J'ai une macro pour remplacer du texte dans Word à partir d'Excel... Si sur
le poste où je lance la macro il y'a un Excel 2007 et un Word 2007 alors je
n'ai pas de souci... mais si je lance la macro sur les postes où j'ai Excel
2003 avec un Word 97 alors j'ai systématiquement un message d'erreur "Erreur
5 Argument ou appel de procédure incorrecte".
Pour les postes avec Excel et Word 2007, j'ai en référence:
Microsoft Excel 12.0 Object Library
Microsoft Word 12.0 Object Library
Pour les postes avec Excel 2003 et Word 97, j'ai en référence:
Microsoft Excel 11.0 Object Library
et m'apparait une référence manquante, celle de Word... j'ajoute alors la
référence
Microsoft Word 8.0 Object Library
Mais le souci est qu'alors lorsque je lance la macro j'ai constamment une
erreur 5 avec plantage d'Excel. Word s'ouvre bien mais mon texte n'est pas
remplacé.
Voici ma macro:
Set AppWord = New Word.Application
AppWord.ShowMe
AppWord.Visible = True
Set DocWord = AppWord.Documents.Open(CheminW, ReadOnly:=False)
i = 12
If Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value <> "" Then
Do
With DocWord.Content.Find
.ClearFormatting
.Text = Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value
'Mon erreur 5 apparaît ici
With .Replacement
.ClearFormatting
.Text =
Evaluate(Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 3).Formula)
End With
.Execute Replace:=wdReplaceAll
.Forward = True
.Wrap = wdFindContinue
End With
i = i + 1
Loop Until Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value = ""
End If
L'erreur 5 apparaît sur le premier .Text
Lorsque j'enregistre une macro sur Word97 pour voir si j'ai des différences
dans la syntaxe je n'ai pas de différence. J'ai le script suivant (exemple
avec remplacement du H par le e):
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "H"
.Replacement.Text = "e"
.Forward = True
.Wrap = wdFindContinue
.Format = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
MichD
Bonjour,
Ne coche par lesdites bibliothèques pour "Word" et modifie ton code comme suit :
Dim AppWord As Object, DocWord As Object
Set AppWord = CreateObject("Word.Application") AppWord.ShowMe AppWord.Visible = True Set DocWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse)
MichD -------------------------------------------- "HD" a écrit dans le message de groupe de discussion : imq3ki$23b5$
Bonjour,
J'ai une macro pour remplacer du texte dans Word à partir d'Excel... Si sur le poste où je lance la macro il y'a un Excel 2007 et un Word 2007 alors je n'ai pas de souci... mais si je lance la macro sur les postes où j'ai Excel 2003 avec un Word 97 alors j'ai systématiquement un message d'erreur "Erreur 5 Argument ou appel de procédure incorrecte".
Pour les postes avec Excel et Word 2007, j'ai en référence: Microsoft Excel 12.0 Object Library Microsoft Word 12.0 Object Library Pour les postes avec Excel 2003 et Word 97, j'ai en référence: Microsoft Excel 11.0 Object Library et m'apparait une référence manquante, celle de Word... j'ajoute alors la référence Microsoft Word 8.0 Object Library
Mais le souci est qu'alors lorsque je lance la macro j'ai constamment une erreur 5 avec plantage d'Excel. Word s'ouvre bien mais mon texte n'est pas remplacé.
Voici ma macro: Set AppWord = New Word.Application AppWord.ShowMe AppWord.Visible = True Set DocWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse)
i = 12 If Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value <> "" Then Do With DocWord.Content.Find .ClearFormatting .Text = Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value 'Mon erreur 5 apparaît ici With .Replacement .ClearFormatting .Text Evaluate(Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 3).Formula) End With .Execute Replace:=wdReplaceAll .Forward = True .Wrap = wdFindContinue End With i = i + 1 Loop Until Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value = "" End If
L'erreur 5 apparaît sur le premier .Text Lorsque j'enregistre une macro sur Word97 pour voir si j'ai des différences dans la syntaxe je n'ai pas de différence. J'ai le script suivant (exemple avec remplacement du H par le e): Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "H" .Replacement.Text = "e" .Forward = True .Wrap = wdFindContinue .Format = False End With Selection.Find.Execute Replace:=wdReplaceAll
Je ne comprend donc pas trop ce qui coince...
Merci d'avance pour votre aide -- @+ HD
Bonjour,
Ne coche par lesdites bibliothèques pour "Word" et modifie ton code comme suit :
Dim AppWord As Object, DocWord As Object
Set AppWord = CreateObject("Word.Application")
AppWord.ShowMe
AppWord.Visible = True
Set DocWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse)
MichD
--------------------------------------------
"HD" a écrit dans le message de groupe de discussion : imq3ki$23b5$1@saria.nerim.net...
Bonjour,
J'ai une macro pour remplacer du texte dans Word à partir d'Excel... Si sur
le poste où je lance la macro il y'a un Excel 2007 et un Word 2007 alors je
n'ai pas de souci... mais si je lance la macro sur les postes où j'ai Excel
2003 avec un Word 97 alors j'ai systématiquement un message d'erreur "Erreur
5 Argument ou appel de procédure incorrecte".
Pour les postes avec Excel et Word 2007, j'ai en référence:
Microsoft Excel 12.0 Object Library
Microsoft Word 12.0 Object Library
Pour les postes avec Excel 2003 et Word 97, j'ai en référence:
Microsoft Excel 11.0 Object Library
et m'apparait une référence manquante, celle de Word... j'ajoute alors la
référence
Microsoft Word 8.0 Object Library
Mais le souci est qu'alors lorsque je lance la macro j'ai constamment une
erreur 5 avec plantage d'Excel. Word s'ouvre bien mais mon texte n'est pas
remplacé.
Voici ma macro:
Set AppWord = New Word.Application
AppWord.ShowMe
AppWord.Visible = True
Set DocWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse)
i = 12
If Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value <> "" Then
Do
With DocWord.Content.Find
.ClearFormatting
.Text = Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value
'Mon erreur 5 apparaît ici
With .Replacement
.ClearFormatting
.Text Evaluate(Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 3).Formula)
End With
.Execute Replace:=wdReplaceAll
.Forward = True
.Wrap = wdFindContinue
End With
i = i + 1
Loop Until Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value = ""
End If
L'erreur 5 apparaît sur le premier .Text
Lorsque j'enregistre une macro sur Word97 pour voir si j'ai des différences
dans la syntaxe je n'ai pas de différence. J'ai le script suivant (exemple
avec remplacement du H par le e):
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "H"
.Replacement.Text = "e"
.Forward = True
.Wrap = wdFindContinue
.Format = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Ne coche par lesdites bibliothèques pour "Word" et modifie ton code comme suit :
Dim AppWord As Object, DocWord As Object
Set AppWord = CreateObject("Word.Application") AppWord.ShowMe AppWord.Visible = True Set DocWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse)
MichD -------------------------------------------- "HD" a écrit dans le message de groupe de discussion : imq3ki$23b5$
Bonjour,
J'ai une macro pour remplacer du texte dans Word à partir d'Excel... Si sur le poste où je lance la macro il y'a un Excel 2007 et un Word 2007 alors je n'ai pas de souci... mais si je lance la macro sur les postes où j'ai Excel 2003 avec un Word 97 alors j'ai systématiquement un message d'erreur "Erreur 5 Argument ou appel de procédure incorrecte".
Pour les postes avec Excel et Word 2007, j'ai en référence: Microsoft Excel 12.0 Object Library Microsoft Word 12.0 Object Library Pour les postes avec Excel 2003 et Word 97, j'ai en référence: Microsoft Excel 11.0 Object Library et m'apparait une référence manquante, celle de Word... j'ajoute alors la référence Microsoft Word 8.0 Object Library
Mais le souci est qu'alors lorsque je lance la macro j'ai constamment une erreur 5 avec plantage d'Excel. Word s'ouvre bien mais mon texte n'est pas remplacé.
Voici ma macro: Set AppWord = New Word.Application AppWord.ShowMe AppWord.Visible = True Set DocWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse)
i = 12 If Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value <> "" Then Do With DocWord.Content.Find .ClearFormatting .Text = Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value 'Mon erreur 5 apparaît ici With .Replacement .ClearFormatting .Text Evaluate(Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 3).Formula) End With .Execute Replace:=wdReplaceAll .Forward = True .Wrap = wdFindContinue End With i = i + 1 Loop Until Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value = "" End If
L'erreur 5 apparaît sur le premier .Text Lorsque j'enregistre une macro sur Word97 pour voir si j'ai des différences dans la syntaxe je n'ai pas de différence. J'ai le script suivant (exemple avec remplacement du H par le e): Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "H" .Replacement.Text = "e" .Forward = True .Wrap = wdFindContinue .Format = False End With Selection.Find.Execute Replace:=wdReplaceAll
Je ne comprend donc pas trop ce qui coince...
Merci d'avance pour votre aide -- @+ HD
HD
Merci MichDenis.
Je viens également de trouve l'explication de plantage d'Excel que j'avais avec le classeur via lequel je veux utiliser la macro pour transférer les données d'Excel ves Word... Le classeur en question est sur un répertoire partagé en lecture seule, l'accés à ce classeur se fait via un raccourci dans lequel le répertoire de travail spécifié est le répertoire partagé en lecture seule. J'ai changé le répertoire de travail du raccourci pour le faire pointer vers le répertoire temporaire de l'ordinateur et... je n'ai plus de plantage.
(par contre... ma macro ne fonctionne pas puisque si la recherche fonctionne bien, elle ne fait que sélectionner le mot recherché sans pour autant le remplacer...) -- @+ HD
Merci MichDenis.
Je viens également de trouve l'explication de plantage d'Excel que j'avais
avec le classeur via lequel je veux utiliser la macro pour transférer les
données d'Excel ves Word... Le classeur en question est sur un répertoire
partagé en lecture seule, l'accés à ce classeur se fait via un raccourci
dans lequel le répertoire de travail spécifié est le répertoire partagé en
lecture seule. J'ai changé le répertoire de travail du raccourci pour le
faire pointer vers le répertoire temporaire de l'ordinateur et... je n'ai
plus de plantage.
(par contre... ma macro ne fonctionne pas puisque si la recherche fonctionne
bien, elle ne fait que sélectionner le mot recherché sans pour autant le
remplacer...)
--
@+
HD
Je viens également de trouve l'explication de plantage d'Excel que j'avais avec le classeur via lequel je veux utiliser la macro pour transférer les données d'Excel ves Word... Le classeur en question est sur un répertoire partagé en lecture seule, l'accés à ce classeur se fait via un raccourci dans lequel le répertoire de travail spécifié est le répertoire partagé en lecture seule. J'ai changé le répertoire de travail du raccourci pour le faire pointer vers le répertoire temporaire de l'ordinateur et... je n'ai plus de plantage.
(par contre... ma macro ne fonctionne pas puisque si la recherche fonctionne bien, elle ne fait que sélectionner le mot recherché sans pour autant le remplacer...) -- @+ HD
MichD
La section problème devrait ressembler à ceci :
Ceci est une question réservée au guru de Word ! '-------------------------------- With DocWord.Content.Find .ClearFormatting .Replacement.ClearFormatting .Text = "Le texte du document que tu veux remplacer" 'Le texte de remplacement .Replacement.Text = _ Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value .Forward = True .Execute Replace:=wdReplaceAll End With '--------------------------------
Ceci est une question réservée au guru de Word !
'--------------------------------
With DocWord.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "Le texte du document que tu veux remplacer"
'Le texte de remplacement
.Replacement.Text = _
Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value
.Forward = True
.Execute Replace:=wdReplaceAll
End With
'--------------------------------
Ceci est une question réservée au guru de Word ! '-------------------------------- With DocWord.Content.Find .ClearFormatting .Replacement.ClearFormatting .Text = "Le texte du document que tu veux remplacer" 'Le texte de remplacement .Replacement.Text = _ Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value .Forward = True .Execute Replace:=wdReplaceAll End With '--------------------------------
'-------------------------------- With DocWord.Content.Find .ClearFormatting .Replacement.ClearFormatting .Text = "Le texte du document que tu veux remplacer" 'Le texte de remplacement .Replacement.Text = _ Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value .Forward = True .Execute Replace:=wdReplaceAll End With '--------------------------------
Le souci est que cela ne fonctionne pas non plus... Rien est remplacé. J'ai toujours les mêmes données. Pourtant lorsque je fais le premier remplacement de la boucle à la main cela fonctionne bien. Je n'ai pas non plus de message d'erreur. Mon poste est en Word97 avec Excel97 sous XP SP3 mais j'ai le souci quelque soit la version d'office.
En test, j'ai crée un script tout simple: Sub test Dim AppWord As Object, DocWord As Object Dim ret As Long Dim CheminW As String Dim i As Long Dim AWkb As String
CheminW = Range("D8").Value
Set AppWord = CreateObject("Word.Application") AppWord.ShowMe AppWord.Visible = True Set DocWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse) With DocWord.Content.Find .ClearFormatting .Replacement.ClearFormatting .Text = "[PRODVEGER]" 'Le texte de remplacement .Replacement.Text = "TTTTESSTTTTTTTTTT" .Forward = True .Execute Replace:=wdReplaceAll End With End Sub
Mais rien y fait... Le document Word s'ouvre bien, je n'ai aucun message d'erreur et je n'ai pourtant aucun texte remplacé.
-- @+ HD
Ceci est une question réservée au guru de Word !
Les guru de Word sont hélas bien silencieux...
'--------------------------------
With DocWord.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "Le texte du document que tu veux remplacer"
'Le texte de remplacement
.Replacement.Text = _
Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value
.Forward = True
.Execute Replace:=wdReplaceAll
End With
'--------------------------------
Le souci est que cela ne fonctionne pas non plus... Rien est remplacé. J'ai
toujours les mêmes données. Pourtant lorsque je fais le premier remplacement
de la boucle à la main cela fonctionne bien. Je n'ai pas non plus de message
d'erreur. Mon poste est en Word97 avec Excel97 sous XP SP3 mais j'ai le
souci quelque soit la version d'office.
En test, j'ai crée un script tout simple:
Sub test
Dim AppWord As Object, DocWord As Object
Dim ret As Long
Dim CheminW As String
Dim i As Long
Dim AWkb As String
CheminW = Range("D8").Value
Set AppWord = CreateObject("Word.Application")
AppWord.ShowMe
AppWord.Visible = True
Set DocWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse)
With DocWord.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "[PRODVEGER]"
'Le texte de remplacement
.Replacement.Text = "TTTTESSTTTTTTTTTT"
.Forward = True
.Execute Replace:=wdReplaceAll
End With
End Sub
Mais rien y fait... Le document Word s'ouvre bien, je n'ai aucun message
d'erreur et je n'ai pourtant aucun texte remplacé.
'-------------------------------- With DocWord.Content.Find .ClearFormatting .Replacement.ClearFormatting .Text = "Le texte du document que tu veux remplacer" 'Le texte de remplacement .Replacement.Text = _ Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value .Forward = True .Execute Replace:=wdReplaceAll End With '--------------------------------
Le souci est que cela ne fonctionne pas non plus... Rien est remplacé. J'ai toujours les mêmes données. Pourtant lorsque je fais le premier remplacement de la boucle à la main cela fonctionne bien. Je n'ai pas non plus de message d'erreur. Mon poste est en Word97 avec Excel97 sous XP SP3 mais j'ai le souci quelque soit la version d'office.
En test, j'ai crée un script tout simple: Sub test Dim AppWord As Object, DocWord As Object Dim ret As Long Dim CheminW As String Dim i As Long Dim AWkb As String
CheminW = Range("D8").Value
Set AppWord = CreateObject("Word.Application") AppWord.ShowMe AppWord.Visible = True Set DocWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse) With DocWord.Content.Find .ClearFormatting .Replacement.ClearFormatting .Text = "[PRODVEGER]" 'Le texte de remplacement .Replacement.Text = "TTTTESSTTTTTTTTTT" .Forward = True .Execute Replace:=wdReplaceAll End With End Sub
Mais rien y fait... Le document Word s'ouvre bien, je n'ai aucun message d'erreur et je n'ai pourtant aucun texte remplacé.
-- @+ HD
MichD
Fais une petite expérience...
A )Tu ouvres Word, tu insères dans le document actif ton expression "[PRODVEGER]" , tu peux même la copier dans diverses cellules d'un tableau. B ) Exécute la macro suivante... Avec Word 2007, tous les remplacements sont faits.
Si cela ne fonctionne pas sous Word 1997, je n'ai aucune idée du pourquoi...Je n'ai jamais travaillé avec cette version et elle ne m'est pas disponible pour de plus amples tests !
Tu insères cette macro dans le ThisDocument de ton document dans la fenêtre de l'éditeur de code. '---------------------------------- Sub test() Dim docWord As Document Set docWord = ActiveDocument With docWord.Content.Find .ClearFormatting .Replacement.ClearFormatting .Text = "[PRODVEGER]" 'Le texte de remplacement .Replacement.Text = "TTTTESSTTTTTTTTTT" .Forward = True .Execute Replace:=wdReplaceAll End With
End Sub '----------------------------------
MichD -------------------------------------------- "HD" a écrit dans le message de groupe de discussion : iokasa$17e3$
Ceci est une question réservée au guru de Word !
Les guru de Word sont hélas bien silencieux...
'-------------------------------- With DocWord.Content.Find .ClearFormatting .Replacement.ClearFormatting .Text = "Le texte du document que tu veux remplacer" 'Le texte de remplacement .Replacement.Text = _ Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value .Forward = True .Execute Replace:=wdReplaceAll End With '--------------------------------
Le souci est que cela ne fonctionne pas non plus... Rien est remplacé. J'ai toujours les mêmes données. Pourtant lorsque je fais le premier remplacement de la boucle à la main cela fonctionne bien. Je n'ai pas non plus de message d'erreur. Mon poste est en Word97 avec Excel97 sous XP SP3 mais j'ai le souci quelque soit la version d'office.
En test, j'ai crée un script tout simple: Sub test Dim AppWord As Object, DocWord As Object Dim ret As Long Dim CheminW As String Dim i As Long Dim AWkb As String
CheminW = Range("D8").Value
Set AppWord = CreateObject("Word.Application") AppWord.ShowMe AppWord.Visible = True Set DocWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse) With DocWord.Content.Find .ClearFormatting .Replacement.ClearFormatting .Text = T 'Le texte de remplacement .Replacement.Text = "TTTTESSTTTTTTTTTT" .Forward = True .Execute Replace:=wdReplaceAll End With End Sub
Mais rien y fait... Le document Word s'ouvre bien, je n'ai aucun message d'erreur et je n'ai pourtant aucun texte remplacé.
-- @+ HD
Fais une petite expérience...
A )Tu ouvres Word, tu insères dans le document actif
ton expression "[PRODVEGER]" , tu peux même la
copier dans diverses cellules d'un tableau.
B ) Exécute la macro suivante... Avec Word 2007,
tous les remplacements sont faits.
Si cela ne fonctionne pas sous Word 1997, je n'ai aucune idée du
pourquoi...Je n'ai jamais travaillé avec cette version et elle ne
m'est pas disponible pour de plus amples tests !
Tu insères cette macro dans le ThisDocument de ton document
dans la fenêtre de l'éditeur de code.
'----------------------------------
Sub test()
Dim docWord As Document
Set docWord = ActiveDocument
With docWord.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "[PRODVEGER]"
'Le texte de remplacement
.Replacement.Text = "TTTTESSTTTTTTTTTT"
.Forward = True
.Execute Replace:=wdReplaceAll
End With
End Sub
'----------------------------------
MichD
--------------------------------------------
"HD" a écrit dans le message de groupe de discussion : iokasa$17e3$1@saria.nerim.net...
Ceci est une question réservée au guru de Word !
Les guru de Word sont hélas bien silencieux...
'--------------------------------
With DocWord.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "Le texte du document que tu veux remplacer"
'Le texte de remplacement
.Replacement.Text = _
Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value
.Forward = True
.Execute Replace:=wdReplaceAll
End With
'--------------------------------
Le souci est que cela ne fonctionne pas non plus... Rien est remplacé. J'ai
toujours les mêmes données. Pourtant lorsque je fais le premier remplacement
de la boucle à la main cela fonctionne bien. Je n'ai pas non plus de message
d'erreur. Mon poste est en Word97 avec Excel97 sous XP SP3 mais j'ai le
souci quelque soit la version d'office.
En test, j'ai crée un script tout simple:
Sub test
Dim AppWord As Object, DocWord As Object
Dim ret As Long
Dim CheminW As String
Dim i As Long
Dim AWkb As String
CheminW = Range("D8").Value
Set AppWord = CreateObject("Word.Application")
AppWord.ShowMe
AppWord.Visible = True
Set DocWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse)
With DocWord.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = T
'Le texte de remplacement
.Replacement.Text = "TTTTESSTTTTTTTTTT"
.Forward = True
.Execute Replace:=wdReplaceAll
End With
End Sub
Mais rien y fait... Le document Word s'ouvre bien, je n'ai aucun message
d'erreur et je n'ai pourtant aucun texte remplacé.
A )Tu ouvres Word, tu insères dans le document actif ton expression "[PRODVEGER]" , tu peux même la copier dans diverses cellules d'un tableau. B ) Exécute la macro suivante... Avec Word 2007, tous les remplacements sont faits.
Si cela ne fonctionne pas sous Word 1997, je n'ai aucune idée du pourquoi...Je n'ai jamais travaillé avec cette version et elle ne m'est pas disponible pour de plus amples tests !
Tu insères cette macro dans le ThisDocument de ton document dans la fenêtre de l'éditeur de code. '---------------------------------- Sub test() Dim docWord As Document Set docWord = ActiveDocument With docWord.Content.Find .ClearFormatting .Replacement.ClearFormatting .Text = "[PRODVEGER]" 'Le texte de remplacement .Replacement.Text = "TTTTESSTTTTTTTTTT" .Forward = True .Execute Replace:=wdReplaceAll End With
End Sub '----------------------------------
MichD -------------------------------------------- "HD" a écrit dans le message de groupe de discussion : iokasa$17e3$
Ceci est une question réservée au guru de Word !
Les guru de Word sont hélas bien silencieux...
'-------------------------------- With DocWord.Content.Find .ClearFormatting .Replacement.ClearFormatting .Text = "Le texte du document que tu veux remplacer" 'Le texte de remplacement .Replacement.Text = _ Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value .Forward = True .Execute Replace:=wdReplaceAll End With '--------------------------------
Le souci est que cela ne fonctionne pas non plus... Rien est remplacé. J'ai toujours les mêmes données. Pourtant lorsque je fais le premier remplacement de la boucle à la main cela fonctionne bien. Je n'ai pas non plus de message d'erreur. Mon poste est en Word97 avec Excel97 sous XP SP3 mais j'ai le souci quelque soit la version d'office.
En test, j'ai crée un script tout simple: Sub test Dim AppWord As Object, DocWord As Object Dim ret As Long Dim CheminW As String Dim i As Long Dim AWkb As String
CheminW = Range("D8").Value
Set AppWord = CreateObject("Word.Application") AppWord.ShowMe AppWord.Visible = True Set DocWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse) With DocWord.Content.Find .ClearFormatting .Replacement.ClearFormatting .Text = T 'Le texte de remplacement .Replacement.Text = "TTTTESSTTTTTTTTTT" .Forward = True .Execute Replace:=wdReplaceAll End With End Sub
Mais rien y fait... Le document Word s'ouvre bien, je n'ai aucun message d'erreur et je n'ai pourtant aucun texte remplacé.
-- @+ HD
HD
Fais une petite expérience... A )Tu ouvres Word, tu insères dans le document actif ton expression "[PRODVEGER]" , tu peux même la copier dans diverses cellules d'un tableau.
J'ai effectivement déjà un fichier word avec l'expression "[PRODVEGER]".
B ) Exécute la macro suivante... Avec Word 2007, tous les remplacements sont faits.
J'ai Word 2007 sur mon poste, effectivement, lorsque la macro est placée sur le document lui même elle s'exécute bien et l'expression "[PRODVEGER]" est bien remplacée par "TTTTESSTTTTTTTTTT".
Mais si je lance la macro adaptée pour être lancée via Excel (j'ai également la version 2007) alors cela ne fonctionne pas. J'ajoute juste les objets AppWord et docWord. Le document word s'ouvre bien mais le texte n'est pas remplacé et je n'ai aucun message d'erreur : Sub test3() Dim AppWord As Object Dim docWord As Object CheminW = Range("D8").Value
Set AppWord = CreateObject("Word.Application") AppWord.ShowMe AppWord.Visible = True Set docWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse) With docWord.Content.Find .ClearFormatting .Replacement.ClearFormatting .Text = "[PRODVEGER]" 'Le texte de remplacement .Replacement.Text = "TTTTESSTTTTTTTTTT" .Forward = True .Execute Replace:=wdReplaceAll End With End Sub
-- @+ HD
Fais une petite expérience...
A )Tu ouvres Word, tu insères dans le document actif
ton expression "[PRODVEGER]" , tu peux même la
copier dans diverses cellules d'un tableau.
J'ai effectivement déjà un fichier word avec l'expression "[PRODVEGER]".
B ) Exécute la macro suivante... Avec Word 2007,
tous les remplacements sont faits.
J'ai Word 2007 sur mon poste, effectivement, lorsque la macro est placée sur
le document lui même elle s'exécute bien et l'expression "[PRODVEGER]" est
bien remplacée par "TTTTESSTTTTTTTTTT".
Mais si je lance la macro adaptée pour être lancée via Excel (j'ai également
la version 2007) alors cela ne fonctionne pas. J'ajoute juste les objets
AppWord et docWord. Le document word s'ouvre bien mais le texte n'est pas
remplacé et je n'ai aucun message d'erreur :
Sub test3()
Dim AppWord As Object
Dim docWord As Object
CheminW = Range("D8").Value
Set AppWord = CreateObject("Word.Application")
AppWord.ShowMe
AppWord.Visible = True
Set docWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse)
With docWord.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "[PRODVEGER]"
'Le texte de remplacement
.Replacement.Text = "TTTTESSTTTTTTTTTT"
.Forward = True
.Execute Replace:=wdReplaceAll
End With
End Sub
Fais une petite expérience... A )Tu ouvres Word, tu insères dans le document actif ton expression "[PRODVEGER]" , tu peux même la copier dans diverses cellules d'un tableau.
J'ai effectivement déjà un fichier word avec l'expression "[PRODVEGER]".
B ) Exécute la macro suivante... Avec Word 2007, tous les remplacements sont faits.
J'ai Word 2007 sur mon poste, effectivement, lorsque la macro est placée sur le document lui même elle s'exécute bien et l'expression "[PRODVEGER]" est bien remplacée par "TTTTESSTTTTTTTTTT".
Mais si je lance la macro adaptée pour être lancée via Excel (j'ai également la version 2007) alors cela ne fonctionne pas. J'ajoute juste les objets AppWord et docWord. Le document word s'ouvre bien mais le texte n'est pas remplacé et je n'ai aucun message d'erreur : Sub test3() Dim AppWord As Object Dim docWord As Object CheminW = Range("D8").Value
Set AppWord = CreateObject("Word.Application") AppWord.ShowMe AppWord.Visible = True Set docWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse) With docWord.Content.Find .ClearFormatting .Replacement.ClearFormatting .Text = "[PRODVEGER]" 'Le texte de remplacement .Replacement.Text = "TTTTESSTTTTTTTTTT" .Forward = True .Execute Replace:=wdReplaceAll End With End Sub
-- @+ HD
HD
A savoir que si j'active la référence "Microsoft Word 12.0 Object Library" alors ça fonctionne... Mais le souci est qu'il me faudrait ne pas activer cette référence car la macro doit pouvoir fonctionner sur toutes les plateformes (Word 97 à Word 2010)... et si j'active la référence "Microsoft Word 12.0 Object Library" sur mon classeur alors lorsqu'il est ouvert sur un poste avec une autre version de word cela plante car la référence ""Microsoft Word 12.0 Object Library" est affichée manquante.
-- @+ HD
A savoir que si j'active la référence "Microsoft Word 12.0 Object Library"
alors ça fonctionne... Mais le souci est qu'il me faudrait ne pas activer
cette référence car la macro doit pouvoir fonctionner sur toutes les
plateformes (Word 97 à Word 2010)... et si j'active la référence "Microsoft
Word 12.0 Object Library" sur mon classeur alors lorsqu'il est ouvert sur un
poste avec une autre version de word cela plante car la référence
""Microsoft Word 12.0 Object Library" est affichée manquante.
A savoir que si j'active la référence "Microsoft Word 12.0 Object Library" alors ça fonctionne... Mais le souci est qu'il me faudrait ne pas activer cette référence car la macro doit pouvoir fonctionner sur toutes les plateformes (Word 97 à Word 2010)... et si j'active la référence "Microsoft Word 12.0 Object Library" sur mon classeur alors lorsqu'il est ouvert sur un poste avec une autre version de word cela plante car la référence ""Microsoft Word 12.0 Object Library" est affichée manquante.
-- @+ HD
MichD
Dans le ThisWorkbook de ton classeur, sur l'évènement Workbook_Open tu inscris cette procédure qui va se charger la référence Word à l'OUVERTURE d'Excel sans égard à la version Office d'installer sur la machine.
'--------------------------- Private Sub Workbook_Open() Dim Refs As Object, Ref As Object On Error Resume Next With ThisWorkbook Set Refs = .VBProject.References For Each Ref In Refs If Ref.IsBroken Then Refs.Remove Ref End If Next .VBProject.References.AddFromGuid _ "{00020905-0000-0000-C000-000000000046}", 8, 4 End With End Sub '---------------------------
Et tu pourras utiliser ta macro () dans un module standard
'----------------------------- sub Ta_Macro() Dim AppWord As Word.Application Dim DocWord As Document
Set AppWord = New Word.Application AppWord.ShowMe AppWord.Visible = True Set DocWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse)
Dans le ThisWorkbook de ton classeur, sur l'évènement Workbook_Open
tu inscris cette procédure qui va se charger la référence Word à
l'OUVERTURE d'Excel sans égard à la version Office d'installer sur la machine.
'---------------------------
Private Sub Workbook_Open()
Dim Refs As Object, Ref As Object
On Error Resume Next
With ThisWorkbook
Set Refs = .VBProject.References
For Each Ref In Refs
If Ref.IsBroken Then
Refs.Remove Ref
End If
Next
.VBProject.References.AddFromGuid _
"{00020905-0000-0000-C000-000000000046}", 8, 4
End With
End Sub
'---------------------------
Et tu pourras utiliser ta macro () dans un module standard
'-----------------------------
sub Ta_Macro()
Dim AppWord As Word.Application
Dim DocWord As Document
Set AppWord = New Word.Application
AppWord.ShowMe
AppWord.Visible = True
Set DocWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse)
Dans le ThisWorkbook de ton classeur, sur l'évènement Workbook_Open tu inscris cette procédure qui va se charger la référence Word à l'OUVERTURE d'Excel sans égard à la version Office d'installer sur la machine.
'--------------------------- Private Sub Workbook_Open() Dim Refs As Object, Ref As Object On Error Resume Next With ThisWorkbook Set Refs = .VBProject.References For Each Ref In Refs If Ref.IsBroken Then Refs.Remove Ref End If Next .VBProject.References.AddFromGuid _ "{00020905-0000-0000-C000-000000000046}", 8, 4 End With End Sub '---------------------------
Et tu pourras utiliser ta macro () dans un module standard
'----------------------------- sub Ta_Macro() Dim AppWord As Word.Application Dim DocWord As Document
Set AppWord = New Word.Application AppWord.ShowMe AppWord.Visible = True Set DocWord = AppWord.Documents.Open(CheminW, ReadOnly:úlse)
Où avez vous eu l'info que le Guid "{00020905-0000-0000-C000-000000000046}" correspond à la référence Microsoft Word ? -- @+ HD
MichD
GUID -> Globally Unique Identifier
Tu charges manuellement les références que tu désires et tu exécutes cette procédure. Tu obtiendras les 3 données nécessaires "Guid", "Major", "Minor" à l'utilisation de la méthode : "AddFromGuid" pour charger une bibliothèque. Elle sera chargée à partir du registre de Windows plutôt que d'un fichier dans l'arborescence de Windows.
'--------------------------------------- Sub AfficherLesGuids_Propriétés() Dim X As Integer, Sh As Worksheet Dim NbRef As Integer
Set Sh = Worksheets.Add(After:=Sheets(Sheets.Count))
On Error Resume Next With Sh .Name = "GUIDS" .Cells(1, 1) = "Nom de la bibliothèque" 'Son appellation dans la fenêtre Reférences .Cells(1, 2) = "Description" .Cells(1, 3) = "Guid" .Cells(1, 4) = "Major" .Cells(1, 5) = "Minor" .Cells(1, 6) = "Chemin complet" With .Range("A1:F1") .Font.Bold = True .Font.Size = 12 End With With Sh.Parent.VBProject.References NbRef = .Count X = 2 For a = 1 To NbRef Sh.Cells(X, 1) = .Item(a).Name Sh.Cells(X, 2) = .Item(a).Description Sh.Cells(X, 3) = .Item(a).GUID Sh.Cells(X, 4) = .Item(a).Major Sh.Cells(X, 5) = .Item(a).Minor Sh.Cells(X, 6) = .Item(a).fullpath X = X + 1 Next End With .Range("A1").CurrentRegion.EntireColumn.AutoFit End With End Sub '---------------------------------------
Tu charges manuellement les références que tu désires et tu
exécutes cette procédure. Tu obtiendras les 3 données nécessaires
"Guid", "Major", "Minor" à l'utilisation de la méthode : "AddFromGuid"
pour charger une bibliothèque. Elle sera chargée à partir du registre de
Windows plutôt que d'un fichier dans l'arborescence de Windows.
'---------------------------------------
Sub AfficherLesGuids_Propriétés()
Dim X As Integer, Sh As Worksheet
Dim NbRef As Integer
Set Sh = Worksheets.Add(After:=Sheets(Sheets.Count))
On Error Resume Next
With Sh
.Name = "GUIDS"
.Cells(1, 1) = "Nom de la bibliothèque"
'Son appellation dans la fenêtre Reférences
.Cells(1, 2) = "Description"
.Cells(1, 3) = "Guid"
.Cells(1, 4) = "Major"
.Cells(1, 5) = "Minor"
.Cells(1, 6) = "Chemin complet"
With .Range("A1:F1")
.Font.Bold = True
.Font.Size = 12
End With
With Sh.Parent.VBProject.References
NbRef = .Count
X = 2
For a = 1 To NbRef
Sh.Cells(X, 1) = .Item(a).Name
Sh.Cells(X, 2) = .Item(a).Description
Sh.Cells(X, 3) = .Item(a).GUID
Sh.Cells(X, 4) = .Item(a).Major
Sh.Cells(X, 5) = .Item(a).Minor
Sh.Cells(X, 6) = .Item(a).fullpath
X = X + 1
Next
End With
.Range("A1").CurrentRegion.EntireColumn.AutoFit
End With
End Sub
'---------------------------------------
Tu charges manuellement les références que tu désires et tu exécutes cette procédure. Tu obtiendras les 3 données nécessaires "Guid", "Major", "Minor" à l'utilisation de la méthode : "AddFromGuid" pour charger une bibliothèque. Elle sera chargée à partir du registre de Windows plutôt que d'un fichier dans l'arborescence de Windows.
'--------------------------------------- Sub AfficherLesGuids_Propriétés() Dim X As Integer, Sh As Worksheet Dim NbRef As Integer
Set Sh = Worksheets.Add(After:=Sheets(Sheets.Count))
On Error Resume Next With Sh .Name = "GUIDS" .Cells(1, 1) = "Nom de la bibliothèque" 'Son appellation dans la fenêtre Reférences .Cells(1, 2) = "Description" .Cells(1, 3) = "Guid" .Cells(1, 4) = "Major" .Cells(1, 5) = "Minor" .Cells(1, 6) = "Chemin complet" With .Range("A1:F1") .Font.Bold = True .Font.Size = 12 End With With Sh.Parent.VBProject.References NbRef = .Count X = 2 For a = 1 To NbRef Sh.Cells(X, 1) = .Item(a).Name Sh.Cells(X, 2) = .Item(a).Description Sh.Cells(X, 3) = .Item(a).GUID Sh.Cells(X, 4) = .Item(a).Major Sh.Cells(X, 5) = .Item(a).Minor Sh.Cells(X, 6) = .Item(a).fullpath X = X + 1 Next End With .Range("A1").CurrentRegion.EntireColumn.AutoFit End With End Sub '---------------------------------------