Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1337 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Macro Word pour edition d'une nouvelle.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Macro Word pour edition d'une nouvelle.

n°2212428
lasauvage
Posté le 02-12-2013 à 23:05:48  profilanswer
 

Salut a tous, désolé de vous embêter, mais j'ai un petit problème.
En fait j'essaie de créer une macro word pour éditer une nouvelle qu'on écris moi et une amie sur un forum.
On s’écrie les passages par MP, le truc c'est que quand je sauve le texte finale, toute l'histoire est a l'envers (la dernière réponse est au début, la première a la fin)
Pas très pratique.
 
J'ai donc voulu faire une macro pour inverser tout ça. Comme je ne sais faire que des macro par enregistrement j'ai donc commencé par ça. Mais sa ne marche pas comme prévu parce que je ne sais pas dire a Word de sélectionner le text en partant de la fin, ni de faire une boucle...
J'ai regardé la macro, en fait elle fonctionne au nombre de ligne. Donc si on écrit une autre histoire, pas de la même taille, sa marchera encore moins...
 
Pour m'aider, nos répliques sont toute écrite ainsi
 
-------
blablablabla
blablablabla
blablablabla
-------
 
Donc comment dois-je faire pour dire a word de:
#selectionner le text entre chaque -------
#Partir de la toute fin du text
#faire ça en boucle jusqu’à ce qu'il ne trouve plus de -------
(tout le copier/coller tout ça j'ai trouvé le code je pourrai me débrouiller)
 
Merci beaucoup d'avance.

mood
Publicité
Posté le 02-12-2013 à 23:05:48  profilanswer
 

n°2212467
Marc L
Posté le 03-12-2013 à 12:57:04  profilanswer
 

 
            Salut !
 
            Un exemple court et précis éclaircirait la problématique …
 
            Les logiciels de messagerie (en tout cas les bons) ont la possibilité de poster les réponses
            en dessous du message précédent au lieu d'au dessus, pas besoin de code alors ! …
 
            Si non le copier / coller par bloc va très bien aussi !
 
            N'étant pas un spécialiste de Word, une fois le texte collé à l'envers cela risque d'être une usine !
 
            Par contre à partir du texte collé dans le Presse-papiers ou dans un fichier .txt ce serait facile


Message édité par Marc L le 03-12-2013 à 14:27:39
n°2212469
MaybeEijOr​Not
but someone at least
Posté le 03-12-2013 à 13:28:01  profilanswer
 

Salut,
 
Je ne suis pas non plus expert en Word mais as-tu la possibilité de récupérer tout le texte d'un coup dans la macro? Si oui alors il te suffit d'utiliser la fonction split avec tout le texte et comme séparateur les "------", après tu parcoures ton tableau en partant de la fin.

n°2212490
lasauvage
Posté le 03-12-2013 à 17:31:31  profilanswer
 

Bah le truc c'est que le forum ou l'on est a pas un très bon système de messages...  
Et copier coller par bloc c'est efficace, mais long (les macros sont supposé simplifier la vie... celle me colle juste un migraine en revanche >.> )
 
Disons en exemple que j'ai mon histoire comme ça
 
-------
Antoine remarque les chaussures de Marie et grimace... il préférait les autres...
-------
Marie adore ses nouvelles chaussures, elle sont trop belles! Elle les montre vite a Antoine!
--------
 
 
Comme vous voyez, les deux morceaux sont pas dans le bon ordre... et donc je pensais que on pourrai faire une macro simple qui irai sélectionner entre chaque -----, et qui collerais sa dans un nouveau document, de bas en haut, en boucle.
(parce que dans nos histoire les morceau sont un peu (beaucoup) plus gros que deux lignes...)
 
Sinon ce truc de tableau je suis pas sure de comprendre...

Message cité 1 fois
Message édité par lasauvage le 03-12-2013 à 17:32:37
n°2212494
MaybeEijOr​Not
but someone at least
Posté le 03-12-2013 à 17:58:36  profilanswer
 
n°2212504
Marc L
Posté le 03-12-2013 à 19:29:23  profilanswer
 

lasauvage a écrit :

-------
Antoine remarque les chaussures de Marie et grimace... il préférait les autres...
-------
Marie adore ses nouvelles chaussures, elle sont trop belles! Elle les montre vite a Antoine!
--------


           En respectant cette structure, après le Copier du texte source,
           dans Word juste sélectionner le point d'insertion (ne pas Coller !) puis lancer cette procédure :
 

Code :
  1. ' Référence à cocher via le menu Outils : Microsoft Forms 2.0 Object Library
  2.    
  3. Sub InverserBlocs()
  4.     Dim oDO As New DataObject, SP$(), TX$()
  5.    
  6.     oDO.GetFromClipboard
  7.    
  8.     If oDO.GetFormat(1) Then
  9.         SP = Split(oDO.GetText(1), vbNewLine)
  10.    
  11.         For N& = UBound(SP) To 0 Step -1
  12.             If Left(SP(N), 3) = "---" Then
  13.                 If F& - N > 0 Then
  14.                     ReDim Preserve TX(1 To L& + F - N)
  15.    
  16.                     For T& = N + 1 To F
  17.                             L = L + 1
  18.                         TX(L) = SP(T)
  19.                     Next
  20.                 End If
  21.    
  22.                 F = N - 1
  23.             End If
  24.         Next
  25.    
  26.         Selection.InsertBefore Join(TX, vbNewLine)
  27.         Selection.Collapse wdCollapseEnd
  28.     End If
  29. End Sub

 

n°2212521
lasauvage
Posté le 03-12-2013 à 21:58:02  profilanswer
 

Magnifique! Sa marche comme un charme! Merci beaucoup ^^

n°2212571
MaybeEijOr​Not
but someone at least
Posté le 04-12-2013 à 11:31:25  profilanswer
 

La solution que je suggérais :
 

Code :
  1. Sub ReverseSelection()
  2.     Dim contenu As String
  3.     Dim tableau() As String
  4.     Dim i As Currency
  5.     contenu = ""
  6.     tableau = Split(Selection.Text, "-----" & Chr(13))
  7.     For i = UBound(tableau()) To 0 Step -1
  8.         contenu = contenu & tableau(i)
  9.     Next i
  10.     Erase tableau
  11.     Selection.Text = contenu
  12.    
  13. End Sub
  14. Sub ReverseDocument()
  15.     Dim contenu As String
  16.     Dim tableau() As String
  17.     Dim i As Currency
  18.     contenu = ""
  19.     tableau = Split(ActiveDocument.Content, "-----" & Chr(13))
  20.     For i = UBound(tableau()) To 0 Step -1
  21.         contenu = contenu & tableau(i)
  22.     Next i
  23.     Erase tableau
  24.     ActiveDocument.Content = contenu
  25.    
  26. End Sub


 
La première macro travaille sur le texte sélectionné, la deuxième sur tout le document.

n°2212592
Marc L
Posté le 04-12-2013 à 14:22:54  profilanswer
 

 
           Comme de toute manière lasauvage passe par un Copier, j'ai préféré travailler directement à partir du Presse-papiers …
 
           Sinon mon premier jet était dans ton esprit mais peu souple quant au séparateur, s'il y a un "-" de plus ou de moins …
           C'est pour cela que j'ai préféré détecter à partir de 3 "-" consécutifs, peu importe qu'il y en ait 6, 7 ou 8 !
 
           Mon premier jet :

Code :
  1. ' Référence à cocher via le menu Outils : Microsoft Forms 2.0 Object Library
  2.    
  3. Sub InverserPressePapiers()
  4.     Dim oDO As New DataObject, SP$()
  5.    
  6.     oDO.GetFromClipboard
  7.    
  8.     If oDO.GetFormat(1) Then
  9.         SP = Split(oDO.GetText(1), "-------" & vbNewLine)
  10.    
  11.         For N& = UBound(SP) To 0 Step -1
  12.             T$ = T$ + SP(N)
  13.         Next
  14.    
  15.         Selection.InsertBefore T
  16.         Selection.Collapse wdCollapseEnd
  17.     End If
  18. End Sub


 

n°2212593
MaybeEijOr​Not
but someone at least
Posté le 04-12-2013 à 14:39:20  profilanswer
 

Ah oui, je n'ai pas cherché à comprendre, c'est donc cette histoire de tiret qui complique à un peu ton code, mais en effet ça sera plus souple pour un code prêt à l'emploi.

mood
Publicité
Posté le 04-12-2013 à 14:39:20  profilanswer
 

n°2212603
Marc L
Posté le 04-12-2013 à 16:08:23  profilanswer
 

 
           Oui j'aurai pu continuer en alimentant une simple variable texte au lieu de faire le beau avec un second tableau dynamique !
 
           Il y avait aussi la possibilité de ne pas utiliser  Split  mais de détecter via  InstrRev  puis découper par  Mid  …
 
           Bref, différents moyens d'effectuer l'inversion en pur VBA, ce que j'appréhendais était la partie Word, ma fois assez simple dans ce cas …
 
           ______________________________________________________________
           La connaissance, c'est comme la confiture : moins on en a plus on l'étale !
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Macro Word pour edition d'une nouvelle.

 

Sujets relatifs
Macro complémentaire Excel .XLAfaire une macro dans outlook, possible ou pas?
macro trop lente - double boucle do whileRenseignement macro Word
[SQL] [SAS] macro sur tableMacro publication CATIA V6
GWT + javascipt nouvelle fenetreFaire ouvrir Excel par une macro Outlook
Plus de sujets relatifs à : Macro Word pour edition d'une nouvelle.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR