Bonjour les gens !
Petit problème aujourd'hui en voulant développer une macro sous Excel (2003) qui ouvre un document Word (2003 aussi, du coup), fait des recherches sur des mots-clés, copie ces mots-clés de Word et les colle dans Excel.
J'ai donc un fichier Excel avec ma macro, et un fichier Word quelconque que j'ouvre via la macro.
Voilà un bout de code qui ouvre le fichier Word et lance la recherche :
(Je vous fais grâce de la suite, en gros ça copie la sélection et ça boucle jusqu'à ce que j'aie fini mon traitement).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 'ouverture du fichier word Set AppliW = New Word.Application 'ouverture d'une instance Word AppliW.Visible = True 'rend Word visible AppliW.WindowState = wdWindowStateMaximize Set DocW = AppliW.Documents.Open(AdressW) 'ouverture du fichier, "AdressW" contient l'adresse absolue du fichier 'Recherche des mots-clés With AppliW.Selection.Find .Forward = True .ClearFormatting .MatchWholeWord = False .MatchCase = False .Wrap = wdFindContinue .MatchWildcards = True .Text = "PR?SENTATION DE LA MODIFICATION" 'le texte est en majuscules, il peut y avoir ou non un accent en fonction des préférences du rédacteur, d'où le "?" en tant que caractère générique End With AppliW.Selection.Find.Execute
Le problème, c'est que ce code fait planter Excel. Même pas de message d'erreur, juste crash complet.
En remplaçant le code pour la recherche par celui-ci :
j'obtiens cette fois un message d'erreur. Voici la page du support microsoft sur cette erreur : ici.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 DocW.Content.Find.Execute findText:="PR?SENTATION DE LA MODIFICATION", MatchCase:=False, MatchWholeWord:=False, MatchWildcards:=True, Forward:=True, Wrap:=wdFindContinue
L'erreur est donc "Method 'Execute' of object 'Find' failed", mais j'avoue ne pas tout comprendre de cette page d'aide... Ça parle de late binding, mais je ne vois pas quoi en faire. Il faudrait déclarer en late binding la recherche ? L'objet "Find" ? La méthode "Execute" ? Le document Word lui-même ? Comment faire ça ?
Par ailleurs, j'ai une autre macro sur le même fichier Excel, qui fonctionne un peu de la même façon : ouverture d'un document Word, et recherche & remplace dans ce document. L'ouverture du fichier est identique au code plus haut, et le code de la recherche est le suivant :
Et ce code fonctionne parfaitement, re-testé à l'instant au cas où...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 DocW.Content.Find.Execute findText:=Cells(i, 1), ReplaceWith:=Cells(i, 2), Replace:=wdReplaceAll
Si quelqu'un a une idée, merci d'avance !
(Et désolé d'avance si pas réactif ce soir, je serai de retour demain...)
Partager