Macro Word pour edition d'une nouvelle.

Macro Word pour edition d'une nouvelle. - VB/VBA/VBS - Programmation

Marsh Posté le 02-12-2013 à 23:05:48    

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.

Reply

Marsh Posté le 02-12-2013 à 23:05:48   

Reply

Marsh Posté le 03-12-2013 à 12:57:04    

 
            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
Reply

Marsh Posté le 03-12-2013 à 13:28:01    

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.

Reply

Marsh Posté le 03-12-2013 à 17:31:31    

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
Reply

Marsh Posté le 03-12-2013 à 17:58:36    

Reply

Marsh Posté le 03-12-2013 à 19:29:23    

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

 

Reply

Marsh Posté le 03-12-2013 à 21:58:02    

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

Reply

Marsh Posté le 04-12-2013 à 11:31:25    

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.

Reply

Marsh Posté le 04-12-2013 à 14:22:54    

 
           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


 

Reply

Marsh Posté le 04-12-2013 à 14:39:20    

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.

Reply

Marsh Posté le 04-12-2013 à 14:39:20   

Reply

Marsh Posté le 04-12-2013 à 16:08:23    

 
           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 !
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed