souci macro VBA word 2000 sur 2007

stephsteph

XLDnaute Occasionnel
Bonjour,

C'est mon premier post sur cette partie du forum de macro word, même si j'ai souvent participé au forum excel.

Mon problème est le suivant (note : je suis nulle en macro de Word).
J'ai une macro très très vieille sous MSWord 2000 qui fonctionne (j'ai vérifié).

Je voudrais la faire fonctionner sous MSWord 2007, voire la rapidifier en plus.
Donc j'ai fait un copié-collé de la vieille macro dans mon fichier sous docx et je l'ai fait tourner.

Mais cela buggue tout de suite en surlignant en jaune le code:
Code:
.Text = listeMots.Item(i)

Je joins les 2 fichiers en docx pour test.

J'ai aussi quelques détails à améliorer comme la suppression (puisque les 2 fichiers sont ouverts) du code parasite (si possible):

Documents.Open "D:\_Data\TransfertsTemp\codes.docx"

Et je voudrais aussi adapter la macro pour que les codes ne soient pas séparés par la marque de paragraphe (pi), mais par le caractère | (sans espace avant et après).

Enfin j'ai aussi quelques instructions à ajouter qui existent sous word 2000 dans d'autres macros et que je voudrais ajouter à la suite de la macro présente pour que le processus se déroule en une fois de A à Z.
Mais cela je le préciserai dans une 2ème étape.

Pouvez-vous m'aider à fixer le problème de cette 1ère étape?

Merci
 

Pièces jointes

  • fruits-pour-macro-Vba.docx
    25.9 KB · Affichages: 140
  • codes.docx
    10.5 KB · Affichages: 122

Staple1600

XLDnaute Barbatruc
Re : souci macro VBA word 2000 sur 2007

Bonsoir à tous

stephsteph
A lire en préambule
(source de l'info)
Word
Type de fichier XMLExtension
Document.docx
Document à macros actives
.docm
Modèle.dotx
Modèle à macros actives.dotm

J'ai une macro très très vieille sous MSWord 2000 qui fonctionne (j'ai vérifié).
Vieille ne veut pas dire ... invisible ;)
Il serait peut-être utile que l'on voit ton code VBA pour essayer de t'aider, non ?
 
Dernière édition:

stephsteph

XLDnaute Occasionnel
Re : souci macro VBA word 2000 sur 2007

Bonjour Staple 1600,

Lorsque j'ai lu ton message (avant de partir en WE), je suis devenue si rouge que je suis sûre qu'il doit en rester des traces sur tous les écrans des forumistes.
Toutes mes excuses (cela montre mon ignorance de MSWord 2007, mais j'aurais dû penser que cela existait puisque je connaissais l'équivalent sur Excel 2007!).
J'attache les mêmes fichiers avec le suffixe docm (et plus docx), ainsi tu devrais pouvoir visualiser la macro dans l'un des 2 fichiers et faire le test.
Heureusement pour moi, la macro bugge également avec docm, donc le souci reste entier.
En te remerciant de ton aide!

Steph

Ps:
au moment d'envoyer ce message je m'aperçois que les fichiers docm sont invalides en attaché sur ce forum, donc:
-j'attache la macro en docx
-je ne peux attacher les 2 fichiers en docm mais ce sont les mêmes qu'en docx et tu pourras peut-être te "dépatouiller"
- je mets ci-dessous une copie de la macro (en docm pour les noms de fichiers) après l'avoir affichée sous word...

HTML:
Sub italics_taxa_final()
'
' italics_taxa_final Macro
'
'

    Dim p As Paragraph
    Dim listeMots As New Collection
    Dim i As Long
    Dim doc1, doc2 As String

    doc1 = "fruits-pour-macro-Vba.docm"
    doc2 = "codes.docm"

    Documents.Open "D:\_Data\TransfertsTemp\codes.docm"

    For Each p In Documents(doc1).Paragraphs
        If Left(p.Range.Text, Len(p.Range.Text) - 1) <> "" Then _
            listeMots.Add Left(p.Range.Text, Len(p.Range.Text) - 1)
    Next

    Documents(doc2).Activate

    For i = 1 To listeMots.Count
        Selection.Find.ClearFormatting
        With Selection.Find
            .Text = listeMots.Item(i)
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = True
            .MatchWholeWord = True
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Do While Selection.Find.Execute = True
            Selection.Font.Italic = True
        Loop
    Next i
End Sub
 

Pièces jointes

  • Subitalics.docx
    10.7 KB · Affichages: 114

Staple1600

XLDnaute Barbatruc
Re : souci macro VBA word 2000 sur 2007

Bonsoir à tous

stephsteph
Ps:
au moment d'envoyer ce message je m'aperçois que les fichiers docm sont invalides en attaché sur ce forum, donc:
Il suffit alors de zipper les fichiers à joindre et d'ajouter ce fichier *.zip dans le fil (cette extension étant valide)

Sinon, une suggestion non testée
Avec cette modif, l'erreur est toujours là ?

For i = 0 To listeMots.Count

EDITION
: Modif ne fonctione pas
Est-ce ton message d'erreur est celui-ci ?
Erreur 5854, paramètre de la chaîne...

Voir ici une parade possible
vba - runtime error 5854 string parameter is too long - Stack Overflow
 
Dernière édition:

stephsteph

XLDnaute Occasionnel
Re : souci macro VBA word 2000 sur 2007

Bonjour Staple 1600,

Tu as raison, c'est bien l'erreur d'exéc 5854 paramètre de chaîne trop long avec surligné en jaune:
text=listmots.item(i).
J'ai essayé de modifier la macro en remplaçant i=1 par i=0, mais là, j'ai:
erreur d'exéc 9, l'indice n'appartient pa sà la sélection.
Le lien vers un site en Anglais est trop dur pour moi.
Je te joins les 2 fichers en .zip en espérant que tu pourras tester.

Merci, Steph
 

Pièces jointes

  • fruits-pour-macro-Vba.zip
    23.6 KB · Affichages: 198
  • codes.zip
    7.9 KB · Affichages: 112
  • codes.zip
    7.9 KB · Affichages: 110
  • codes.zip
    7.9 KB · Affichages: 109

Staple1600

XLDnaute Barbatruc
Re : souci macro VBA word 2000 sur 2007

Bonsoir à tous

stephsteph
J'ai déjà testé sinon comment aurais-je pu lire le message d'erreur ?
Ceci dit, il faudrait peut-être envisager de réécrire la macro pour Word 2007
Et pour ce faire , peux-tu, stp, détailler précisément ce que doit faire la macro.
(Ne lésines pas sur les détails et explications)
 

stephsteph

XLDnaute Occasionnel
Re : souci macro VBA word 2000 sur 2007

Bonjour Staple 1600,

Je m'en doutais que tu avais testé!
Mais cela m'a permis de faire le processus que tu conseillais en zip.
La macro de base est toute bête, il s'agit de mettre en italique exactement les mots (entiers parfois séparés par un espace ou un point et un espace, la casse étant importante, et parfois avec des doublons) de codes.docm qui sont dans le texte de fruits-pour-macro-Vba.docm.
Bien sûr dans le fichier réel de texte il y a plus 1000 pages et le nombre de codes est supérieur à 3000.
Dans la macro actuelle, le séparateur de codes est le retour à la ligne (pi), dans la version 2007 il faudrait que ce soit le caractère "|".
Ensuite comme tu vois dans fruits-pour-macro-Vba.docm avec les séparateurs ajoutés (type <aaa>) il y aura d'autres traitements à faire mais sans qu'il y ait de boucle à coder, par exemble entre 2 <xxx> et </xxx>, il faudra créer une zone à 2 colonnes, ou après <yyy> il faudra créer un saut de page, ou bien entre <zzz> et </zzz> un formatage du texte (par exemple gras, 18 de taille, centré). Là aussi j'ai des bouts de codes qui fonctionnaient sous MSWord2000 et avec des séparateurs différents (parce que le texte était généré différemment par une macro VBA sur un fichier Excel2000, ce problème là, sur Excel 2007 est déjà réglé).

Voilà j'espère que je suis claire et sans ambiguités.

Merci Staple et à +

Steph
 

stephsteph

XLDnaute Occasionnel
Re : souci macro VBA word 2000 sur 2007

Bonjour Staple 1600,

Je reviens avec 1000 exceuses.
J'ai commis une erreur dans le copier coller de la macro (c'est en voulant la refaire tourner sur MSWord 2000 que j'ai compris).
Ce n'est pas :
Code:
doc1 = "fruits-pour-macro-Vba.docm"
    doc2 = "codes.docm"

Mais
Code:
doc2 = "fruits-pour-macro-Vba.docm"
    doc1 = "codes.docm"
Et là cela tourne aussi bien avec 2000 que 2007.

Donc Staple si tu as pitié de mes bourdes d'enervement, je reviens pour savoir si tu pouvais aider à régler les problèmes que j'ai cité avant...
- séparateur "|" dans codes et plus "paragraphe" (="pi")
- les nouvelles macros de formattage comme création de deux colonnes avec un ligne verticale centrale entre les séparateurs <2> et </2> ou de type de police entre <1> et </1> dans le texte principal (là dans ce cas, j'ai pu tester les bouts de programmes précédents et il ne marchent plus car d'autres choses ont changé entre temps).

Merci de ton indulgence

A+

Steph
 

stephsteph

XLDnaute Occasionnel
Re : souci macro VBA word 2000 sur 2007

Bonjour Staple 1600

Merci de poursuivre ce fil avec moi, c'est vraiment bien.

Je vais essayer de réduire mes ambitions en restant pratique.
Le remplacement des marques de paragraphes (pi) par '|' est trop compliqué (pour moi) et ta piste avec lien ne semble pas correspondre au cas particulier (je ne veux que la macro remplace l'un par l'autre, je voulais que la macro soit changée pour considérer les '|' au lieu des marques de paragraphes), donc j'oublie (il me suffira de faire manuellement le remplacement de '|' par '^p' avant la macro).

Le plus important est donc les formats sur le texte.
Par exemple avec les mises en 2 colonnes, j'ai semble-t-il déjà commis l'erreur d'utiliser des séparateurs avec < et > et selon le support Microsoft il ne faut pas (c'est compris comme des caractères génériques), donc j'ai remplacé dans mon texte <2> par $0$ et </2> par $1$ (des mots qui sont étrangers au contenu du texte, donc qui peuvent servir de séparateurs).
En me servant de mes bouts de codes précédents, j'ai bricolé le code ci-après et le résultat est qu'il fait bien la mise en forme en 2 colonnes, mais seulement pour la première occurrence (donc ma boucle ne marche pas) et ensuite il ne remplace pas $0$ et $1$ par rien après le formatage (j'ai aussi essayé avec .Replacement.Text = "\1", mais c'est pareil).

Au total je ne suis qu'une élève limitée !
En espérant que le "maître" corrigera !

A+ Steph

Code:
Sub format()
Dim iMax As Integer
i = 0
Do While i < iMax + 1
    With Selection.Find
        .Text = "($0$)(*)($1$)"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute
    If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
        ActiveWindow.Panes(2).Close
    End If
    If ActiveWindow.ActivePane.View.Type <> wdPrintView Then
        ActiveWindow.ActivePane.View.Type = wdPrintView
    End If
    ActiveDocument.Range(Start:=Selection.Start, End:=Selection.Start). _
        InsertBreak Type:=wdSectionBreakContinuous
    Selection.Start = Selection.Start + 1
    ActiveDocument.Range(Start:=Selection.End, End:=Selection.End).InsertBreak _
         Type:=wdSectionBreakContinuous
    With Selection.PageSetup.TextColumns
        .SetCount NumColumns:=2
        .EvenlySpaced = True
        .LineBetween = True
        .Width = CentimetersToPoints(9.2)
        .Spacing = CentimetersToPoints(0.6)
    End With
    i = i + 1
    Loop
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : souci macro VBA word 2000 sur 2007

Bonjour à tous

stephsteph
et ta piste avec lien ne semble pas correspondre au cas particulier
ma piste était surtout une invitation explicite* à faire chauffer ton moteur de recherche.
Invitation à laquelle j'ajoute ce conseil:
axer tes recherches également sur le web anglophone (puisque VBA parle english, non ?)

*:
ou ailleurs sur le net
(C'est juste une histoire de mots-clés judicieusement choisis dans G..gle)
 

stephsteph

XLDnaute Occasionnel
Re : souci macro VBA word 2000 sur 2007

Bonjour Staple 1600

Tu as tout à fait raison.
C'est pour cela que, après maintes interrogations Google, la demande a été réduite au strict minimum, à savoir le bon fonctionnement de la boucle do while (le code a été inclus dans le précédent message).
Tous les autres soucis seront réglés manuellement (après tout, le fichier n'est traité qu'une fois par an).
Donc si tu pouvais régler cet os sur la boucle ce serait sûr sympa.
A+
Steph
 

Staple1600

XLDnaute Barbatruc
Re : souci macro VBA word 2000 sur 2007

Bonsoir à tous


stephsteph
Quel est la valeur de iMax ?
Car sauf erreur de ma part, tu le déclares mais ensuite ?
Sinon test ton code en mettant des espions et/ou utilisant Debug ou MsgBox pour voir la valeur de i

NB: Je précise que je suis plus doué en VBA sous Excel que sous Word, donc je ne te serai pas d'un grand secours contrairement à tatiak par exemple (qui aura peut-être la bonne idée de tomber sur ton fil ;) )
 

stephsteph

XLDnaute Occasionnel
Re : souci macro VBA word 2000 sur 2007

Bonjour Staple 1600,

Merci de ton aide et si tu n'est pas un expert c'est encore plus méritant.

Avec tes remarques je suis revenu sur la macro ancienne (qui ne fonctionne plus car le processus est maintenant très différent) et j'ai cherché des infos sur iMax puis sur NomF et j'ai ajouté un bout de code comme ci-après.
Le résultat est que maintenant la macro tourne (elle crée les 2 colonnes) mais seulement pour la première occurrence, pas pour les autres (pas de boucle).
Moi je suis dans la purée car je tatonne total.
Donc si tu peux faire d'autres remarques je veux bien essayer (le mieux serait bien sûr que l'expert que tu cites se réveille, je plaisante)...
L'autre option serait, si tu veux, de mettre le code complet de la précédente macro et que tu y retrouves tes "petits".
Si tu me dis "oui" je mets le code complet lors du prochain post.

A+, Steph


Code:
Sub test()
'
' test Macro
'
Dim NomF(10000) As String
Dim iMax As Integer
Do While i < iMax + 1
        Selection.HomeKey Unit:=wdStory
        Selection.EndKey Unit:=wdLine, Extend:=wdExtend
        Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
        NomF(i) = Selection.Text
        Selection.HomeKey Unit:=wdStory
        Selection.EndKey Unit:=wdLine, Extend:=wdExtend
        Selection.Delete
        i = i + 1
    Loop
    i = 0
Do While i < iMax + 1
    With Selection.Find
        .Text = "($0$)(*)($1$)"
        .Replacement.Text = "\2"
        .Forward = True
        .Wrap = wdFindContinue
        .format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute
    If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
        ActiveWindow.Panes(2).Close
    End If
    If ActiveWindow.ActivePane.View.Type <> wdPrintView Then
        ActiveWindow.ActivePane.View.Type = wdPrintView
    End If
    ActiveDocument.Range(Start:=Selection.Start, End:=Selection.Start). _
        InsertBreak Type:=wdSectionBreakContinuous
    Selection.Start = Selection.Start + 1
    ActiveDocument.Range(Start:=Selection.End, End:=Selection.End).InsertBreak _
         Type:=wdSectionBreakContinuous
    With Selection.PageSetup.TextColumns
        .SetCount NumColumns:=2
        .EvenlySpaced = True
        .LineBetween = True
        .Width = CentimetersToPoints(9.2)
        .Spacing = CentimetersToPoints(0.6)
    End With
    i = i + 1
    Loop
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 197
Messages
2 086 104
Membres
103 118
dernier inscrit
mlaf4032