OVH Cloud OVH Cloud

Remplacer une valeur dans Word via Excel

8 réponses
Avatar
Top100
Bien le bonjour =E0 tous,
je cherche =E0 ouvir un fichier word via excel, =E0 remplacer une valeur
par une autre et =E0 fermer le doc word et sauvant et bien s=FBr tout
cela de mani=E8re transparente pour l'utilisateur. Je suis sur win
serveur / Excel 2003
si quelqu'un voit o=F9 je me suis perdu...
Merci d'avance.

Voici le code de j'ai d=E9j=E0 :
Dim extension
Dim j As Integer, k As Integer
Dim wd As Object
Dim doc

Set wd =3D CreateObject("word.application")
Set doc =3D wd.Documents.Open(Filename:=3D"C:\Repertoire de
test\test.doc", ConfirmConversions:=3DFalse, ReadOnly:=3DFalse)
wd.Visible =3D False
'-------------------------------------------------------------------------

'=E0 partir d'ici =E7a ne marche pas

doc.Find.ClearFormatting
doc.Find.Replacement.ClearFormatting
With Selection.Find
.Text =3D "toto"
.Replacement.Text =3D "tata"
.Forward =3D True
.Format =3D False
.MatchCase =3D False
.MatchWholeWord =3D False
.MatchWildcards =3D False
.MatchSoundsLike =3D False
.MatchAllWordForms =3D False
End With
Selection.Find.Execute Replace:=3DwdReplaceAll
'-------------------------------------------------------------------------
End Sub

8 réponses

Avatar
Top100
Je viens d'essayer ceci trouvé sur un post le Laurent Longre) mais
bien que mon fichier test.doc soit fermé, word ne veut pas l'ouvrir :
msg d'horreur "fichier ouvert par un autre utilisateur" avec le choix
notifier, lecture seule....
Je ne suis pas sur un reseau, le fichier est bel et bien fermé.

'---------------------------------------------------
doc.Range.Find.Execute "Bearing", False, Replacewith:="au revoir", _
Replace:=wdReplaceAll
'---------------------------------------------------
Avatar
Top100
Des fois ça sert de phosphorer...
Voici le code que j'utilise au final si jamais ça peut aider qq'un.


Sub ModifierTexte()
Dim Tbl()
Dim Ln
Dim I As Integer
' et ça marche avec bcp de fichiers texte un peu batards
(.wdf, .klp, .trp ...)
Open "C:Repertoire de testSophia.wdf" For Input As #1

Do While Not EOF(1)
I = I + 1
ReDim Preserve Tbl(1 To I)
Line Input #1, Tbl(I)

Loop


If I = 0 Then
Close #1
MsgBox "Fichier vide. Operation annulee"
Exit Sub

End If
'supprime les guillemets
For I = 1 To UBound(Tbl)
Tbl(I) = Replace(Tbl(I), "SOPHIA", "DEBRIS")
Next I

Close #1
Open "C:Repertoire de testSophia.wdf" For Output As #1
'ré-inscrit les valeurs et referme
For I = 1 To UBound(Tbl)
Print #1, Tbl(I)
Debug.Print Tbl(I)
Next I
Close #1
Erase Tbl
End Sub
Avatar
FxM
Bonsoir,

En lisant les trois messages, je ne vois aucun rapport entre le dernier
et les deux précédents. Un fichier au format Word n'est as un fichier
texte (loin de là).

Parcoure les fils des 27/11 et 28/11 ici (mpf.excel) et sur mpf.word

@+
FxM



Des fois ça sert de phosphorer...
Voici le code que j'utilise au final si jamais ça peut aider qq'un.


Sub ModifierTexte()
Dim Tbl()
Dim Ln
Dim I As Integer
' et ça marche avec bcp de fichiers texte un peu batards
(.wdf, .klp, .trp ...)
Open "C:Repertoire de testSophia.wdf" For Input As #1

Do While Not EOF(1)
I = I + 1
ReDim Preserve Tbl(1 To I)
Line Input #1, Tbl(I)

Loop


If I = 0 Then
Close #1
MsgBox "Fichier vide. Operation annulee"
Exit Sub

End If
'supprime les guillemets
For I = 1 To UBound(Tbl)
Tbl(I) = Replace(Tbl(I), "SOPHIA", "DEBRIS")
Next I

Close #1
Open "C:Repertoire de testSophia.wdf" For Output As #1
'ré-inscrit les valeurs et referme
For I = 1 To UBound(Tbl)
Print #1, Tbl(I)
Debug.Print Tbl(I)
Next I
Close #1
Erase Tbl
End Sub



Avatar
Top100
Bonsoir,
Tu es dans le vrai et ceci merite plus d'explication.
Je dispose d'un fichier .wdf qui s'ouvre parfaitement avec un editeur
de texte mais qui fait quelques bizarreries lorsque j'essaie de
l'importer dans excel puis de le sauver au même format (.wdf, ndlr).

Le but de cette macro est donc de remplacer une valeur par une autre
dans ce fichier wdf via excel et ce de façon invisible.

J'ai donc abandonné mes tentatives d'import sous excel en csv, txt, &
Cie et tenté de passer par Word. D'ou mon premier post. Je tente une
feinte -deuxième post- et cela ne marche toujours pas. En bref,
j'heritai à la sauvegarde de mon fichier en .wdf de pleins de
caractères spéciaux dont je n'avais cure.

Doù mon 3ème post où j'ai enfin trouvé une solution en passant par
un tableau avec line input et print. Etant de nature altruiste, j'ai
donc publié ce code sur le MPFE. Je conviens parfaitement qu'il ne
suit pas le même process que celui decrit sur mon premier post mais
bon, comme le disent beaucoup : si la porte est fermée, rentre par la
fenêtre.

en esperant t'avoir eclairci, je te souhaite une bien bonne soirée.


Bonsoir,

En lisant les trois messages, je ne vois aucun rapport entre le dernier
et les deux précédents. Un fichier au format Word n'est as un fichier
texte (loin de là).

Parcoure les fils des 27/11 et 28/11 ici (mpf.excel) et sur mpf.word

@+
FxM



Des fois ça sert de phosphorer...
Voici le code que j'utilise au final si jamais ça peut aider qq'un.


Sub ModifierTexte()
Dim Tbl()
Dim Ln
Dim I As Integer
' et ça marche avec bcp de fichiers texte un peu batards
(.wdf, .klp, .trp ...)
Open "C:Repertoire de testSophia.wdf" For Input As #1

Do While Not EOF(1)
I = I + 1
ReDim Preserve Tbl(1 To I)
Line Input #1, Tbl(I)

Loop


If I = 0 Then
Close #1
MsgBox "Fichier vide. Operation annulee"
Exit Sub

End If

For I = 1 To UBound(Tbl)
Tbl(I) = Replace(Tbl(I), "SOPHIA", "DEBRIS")
Next I

Close #1
Open "C:Repertoire de testSophia.wdf" For Output As #1
'ré-inscrit les valeurs et referme
For I = 1 To UBound(Tbl)
Print #1, Tbl(I)
Debug.Print Tbl(I)
Next I
Close #1
Erase Tbl
End Sub





Avatar
FxM
Bonsoir,

C'était le coté Word qui passe à la trappe qui m'a fait réagir.

Si c'est pour remplacer une occurrence dans un texte, ce qui suit
devrait aller (non testé) :

Sub ModifierTexte2()
dim fil1 as string, fil2 as string, tablo, ligne as string

fil1 = "C:Repertoire de testSophia.wdf"

tablo=split(fil,"")
tablo(ubound(tablo))="tempo.txt" 'fichier temporaire
fil2 = join(tablo,"")

Open fil1 For Input As #1
open fil2 for output as #2
Do While Not EOF(1)
Line Input #1, ligne
print #2, replace(ligne, "SOPHIA", "DEBRIS")
Loop
close #2
close #1
name fil2 as fil1
'kill fil2 ??
End Sub

@+
FxM



Bonsoir,
Tu es dans le vrai et ceci merite plus d'explication.
Je dispose d'un fichier .wdf qui s'ouvre parfaitement avec un editeur
de texte mais qui fait quelques bizarreries lorsque j'essaie de
l'importer dans excel puis de le sauver au même format (.wdf, ndlr).

Le but de cette macro est donc de remplacer une valeur par une autre
dans ce fichier wdf via excel et ce de façon invisible.

J'ai donc abandonné mes tentatives d'import sous excel en csv, txt, &
Cie et tenté de passer par Word. D'ou mon premier post. Je tente une
feinte -deuxième post- et cela ne marche toujours pas. En bref,
j'heritai à la sauvegarde de mon fichier en .wdf de pleins de
caractères spéciaux dont je n'avais cure.

Doù mon 3ème post où j'ai enfin trouvé une solution en passant par
un tableau avec line input et print. Etant de nature altruiste, j'ai
donc publié ce code sur le MPFE. Je conviens parfaitement qu'il ne
suit pas le même process que celui decrit sur mon premier post mais
bon, comme le disent beaucoup : si la porte est fermée, rentre par la
fenêtre.

en esperant t'avoir eclairci, je te souhaite une bien bonne soirée.


Bonsoir,

En lisant les trois messages, je ne vois aucun rapport entre le dernier
et les deux précédents. Un fichier au format Word n'est as un fichier
texte (loin de là).

Parcoure les fils des 27/11 et 28/11 ici (mpf.excel) et sur mpf.word

@+
FxM



Des fois ça sert de phosphorer...
Voici le code que j'utilise au final si jamais ça peut aider qq'un.


Sub ModifierTexte()
Dim Tbl()
Dim Ln
Dim I As Integer
' et ça marche avec bcp de fichiers texte un peu batards
(.wdf, .klp, .trp ...)
Open "C:Repertoire de testSophia.wdf" For Input As #1

Do While Not EOF(1)
I = I + 1
ReDim Preserve Tbl(1 To I)
Line Input #1, Tbl(I)

Loop


If I = 0 Then
Close #1
MsgBox "Fichier vide. Operation annulee"
Exit Sub

End If

For I = 1 To UBound(Tbl)
Tbl(I) = Replace(Tbl(I), "SOPHIA", "DEBRIS")
Next I

Close #1
Open "C:Repertoire de testSophia.wdf" For Output As #1
'ré-inscrit les valeurs et referme
For I = 1 To UBound(Tbl)
Print #1, Tbl(I)
Debug.Print Tbl(I)
Next I
Close #1
Erase Tbl
End Sub








Avatar
vincent.topsent
ok merci bien... apparment celle ci marche aussi. A part la création
du fichier temp y t'il un avantage à utiliser la tienne plutot que
celle de mon precedent post ?



Bonsoir,

C'était le coté Word qui passe à la trappe qui m'a fait réagir.

Si c'est pour remplacer une occurrence dans un texte, ce qui suit
devrait aller (non testé) :

Sub ModifierTexte2()
dim fil1 as string, fil2 as string, tablo, ligne as string

fil1 = "C:Repertoire de testSophia.wdf"

tablo=split(fil,"")
tablo(ubound(tablo))="tempo.txt" 'fichier temporaire
fil2 = join(tablo,"")

Open fil1 For Input As #1
open fil2 for output as #2
Do While Not EOF(1)
Line Input #1, ligne
print #2, replace(ligne, "SOPHIA", "DEBRIS")
Loop
close #2
close #1
name fil2 as fil1
'kill fil2 ??
End Sub

@+
FxM



Bonsoir,
Tu es dans le vrai et ceci merite plus d'explication.
Je dispose d'un fichier .wdf qui s'ouvre parfaitement avec un editeur
de texte mais qui fait quelques bizarreries lorsque j'essaie de
l'importer dans excel puis de le sauver au même format (.wdf, ndlr).

Le but de cette macro est donc de remplacer une valeur par une autre
dans ce fichier wdf via excel et ce de façon invisible.

J'ai donc abandonné mes tentatives d'import sous excel en csv, txt, &
Cie et tenté de passer par Word. D'ou mon premier post. Je tente une
feinte -deuxième post- et cela ne marche toujours pas. En bref,
j'heritai à la sauvegarde de mon fichier en .wdf de pleins de
caractères spéciaux dont je n'avais cure.

Doù mon 3ème post où j'ai enfin trouvé une solution en passant par
un tableau avec line input et print. Etant de nature altruiste, j'ai
donc publié ce code sur le MPFE. Je conviens parfaitement qu'il ne
suit pas le même process que celui decrit sur mon premier post mais
bon, comme le disent beaucoup : si la porte est fermée, rentre par la
fenêtre.

en esperant t'avoir eclairci, je te souhaite une bien bonne soirée.


Bonsoir,

En lisant les trois messages, je ne vois aucun rapport entre le dernier
et les deux précédents. Un fichier au format Word n'est as un fich ier
texte (loin de là).

Parcoure les fils des 27/11 et 28/11 ici (mpf.excel) et sur mpf.word

@+
FxM



Des fois ça sert de phosphorer...
Voici le code que j'utilise au final si jamais ça peut aider qq'un.


Sub ModifierTexte()
Dim Tbl()
Dim Ln
Dim I As Integer
' et ça marche avec bcp de fichiers texte un peu batards
(.wdf, .klp, .trp ...)
Open "C:Repertoire de testSophia.wdf" For Input As #1

Do While Not EOF(1)
I = I + 1
ReDim Preserve Tbl(1 To I)
Line Input #1, Tbl(I)

Loop


If I = 0 Then
Close #1
MsgBox "Fichier vide. Operation annulee"
Exit Sub

End If

For I = 1 To UBound(Tbl)
Tbl(I) = Replace(Tbl(I), "SOPHIA", "DEBRIS")
Next I

Close #1
Open "C:Repertoire de testSophia.wdf" For Output As #1
'ré-inscrit les valeurs et referme
For I = 1 To UBound(Tbl)
Print #1, Tbl(I)
Debug.Print Tbl(I)
Next I
Close #1
Erase Tbl
End Sub










Avatar
FxM
L'économie de mémoire car non création du tbl surtout si le fichier est
gros. Peut-être la rapidité (à voir ?).

@+
FxM


ok merci bien... apparment celle ci marche aussi. A part la création
du fichier temp y t'il un avantage à utiliser la tienne plutot que
celle de mon precedent post ?



Bonsoir,

C'était le coté Word qui passe à la trappe qui m'a fait réagir.

Si c'est pour remplacer une occurrence dans un texte, ce qui suit
devrait aller (non testé) :

Sub ModifierTexte2()
dim fil1 as string, fil2 as string, tablo, ligne as string

fil1 = "C:Repertoire de testSophia.wdf"

tablo=split(fil,"")
tablo(ubound(tablo))="tempo.txt" 'fichier temporaire
fil2 = join(tablo,"")

Open fil1 For Input As #1
open fil2 for output as #2
Do While Not EOF(1)
Line Input #1, ligne
print #2, replace(ligne, "SOPHIA", "DEBRIS")
Loop
close #2
close #1
name fil2 as fil1
'kill fil2 ??
End Sub

@+
FxM



Bonsoir,
Tu es dans le vrai et ceci merite plus d'explication.
Je dispose d'un fichier .wdf qui s'ouvre parfaitement avec un editeur
de texte mais qui fait quelques bizarreries lorsque j'essaie de
l'importer dans excel puis de le sauver au même format (.wdf, ndlr).

Le but de cette macro est donc de remplacer une valeur par une autre
dans ce fichier wdf via excel et ce de façon invisible.

J'ai donc abandonné mes tentatives d'import sous excel en csv, txt, &
Cie et tenté de passer par Word. D'ou mon premier post. Je tente une
feinte -deuxième post- et cela ne marche toujours pas. En bref,
j'heritai à la sauvegarde de mon fichier en .wdf de pleins de
caractères spéciaux dont je n'avais cure.

Doù mon 3ème post où j'ai enfin trouvé une solution en passant par
un tableau avec line input et print. Etant de nature altruiste, j'ai
donc publié ce code sur le MPFE. Je conviens parfaitement qu'il ne
suit pas le même process que celui decrit sur mon premier post mais
bon, comme le disent beaucoup : si la porte est fermée, rentre par la
fenêtre.

en esperant t'avoir eclairci, je te souhaite une bien bonne soirée.


Bonsoir,

En lisant les trois messages, je ne vois aucun rapport entre le dernier
et les deux précédents. Un fichier au format Word n'est as un fichier
texte (loin de là).

Parcoure les fils des 27/11 et 28/11 ici (mpf.excel) et sur mpf.word

@+
FxM



Des fois ça sert de phosphorer...
Voici le code que j'utilise au final si jamais ça peut aider qq'un.


Sub ModifierTexte()
Dim Tbl()
Dim Ln
Dim I As Integer
' et ça marche avec bcp de fichiers texte un peu batards
(.wdf, .klp, .trp ...)
Open "C:Repertoire de testSophia.wdf" For Input As #1

Do While Not EOF(1)
I = I + 1
ReDim Preserve Tbl(1 To I)
Line Input #1, Tbl(I)

Loop


If I = 0 Then
Close #1
MsgBox "Fichier vide. Operation annulee"
Exit Sub

End If

For I = 1 To UBound(Tbl)
Tbl(I) = Replace(Tbl(I), "SOPHIA", "DEBRIS")
Next I

Close #1
Open "C:Repertoire de testSophia.wdf" For Output As #1
'ré-inscrit les valeurs et referme
For I = 1 To UBound(Tbl)
Print #1, Tbl(I)
Debug.Print Tbl(I)
Next I
Close #1
Erase Tbl
End Sub












Avatar
Top100
En terme d'economie de memoire, ton code est plus adapté, pour ce qui
est de la rapidité c'est vraiment pas differenciateur par contre, je
trouve un peu genant de creer des fichiers (même si ils sont
temporaires).
En bref, c'est un peu au feeling entre les deux solutions...




L'économie de mémoire car non création du tbl surtout si le fichier est
gros. Peut-être la rapidité (à voir ?).

@+
FxM


ok merci bien... apparment celle ci marche aussi. A part la création
du fichier temp y t'il un avantage à utiliser la tienne plutot que
celle de mon precedent post ?



Bonsoir,

C'était le coté Word qui passe à la trappe qui m'a fait réagir.

Si c'est pour remplacer une occurrence dans un texte, ce qui suit
devrait aller (non testé) :

Sub ModifierTexte2()
dim fil1 as string, fil2 as string, tablo, ligne as string

fil1 = "C:Repertoire de testSophia.wdf"

tablo=split(fil,"")
tablo(ubound(tablo))="tempo.txt" 'fichier temporaire
fil2 = join(tablo,"")

Open fil1 For Input As #1
open fil2 for output as #2
Do While Not EOF(1)
Line Input #1, ligne
print #2, replace(ligne, "SOPHIA", "DEBRIS")
Loop
close #2
close #1
name fil2 as fil1
'kill fil2 ??
End Sub

@+
FxM



Bonsoir,
Tu es dans le vrai et ceci merite plus d'explication.
Je dispose d'un fichier .wdf qui s'ouvre parfaitement avec un editeur
de texte mais qui fait quelques bizarreries lorsque j'essaie de
l'importer dans excel puis de le sauver au même format (.wdf, ndlr).

Le but de cette macro est donc de remplacer une valeur par une autre
dans ce fichier wdf via excel et ce de façon invisible.

J'ai donc abandonné mes tentatives d'import sous excel en csv, txt, &
Cie et tenté de passer par Word. D'ou mon premier post. Je tente une
feinte -deuxième post- et cela ne marche toujours pas. En bref,
j'heritai à la sauvegarde de mon fichier en .wdf de pleins de
caractères spéciaux dont je n'avais cure.

Doù mon 3ème post où j'ai enfin trouvé une solution en passan t par
un tableau avec line input et print. Etant de nature altruiste, j'ai
donc publié ce code sur le MPFE. Je conviens parfaitement qu'il ne
suit pas le même process que celui decrit sur mon premier post mais
bon, comme le disent beaucoup : si la porte est fermée, rentre par la
fenêtre.

en esperant t'avoir eclairci, je te souhaite une bien bonne soirée.


Bonsoir,

En lisant les trois messages, je ne vois aucun rapport entre le dern ier
et les deux précédents. Un fichier au format Word n'est as un fi chier
texte (loin de là).

Parcoure les fils des 27/11 et 28/11 ici (mpf.excel) et sur mpf.word

@+
FxM



Des fois ça sert de phosphorer...
Voici le code que j'utilise au final si jamais ça peut aider qq'u n.


Sub ModifierTexte()
Dim Tbl()
Dim Ln
Dim I As Integer
' et ça marche avec bcp de fichiers texte un peu batards
(.wdf, .klp, .trp ...)
Open "C:Repertoire de testSophia.wdf" For Input As #1

Do While Not EOF(1)
I = I + 1
ReDim Preserve Tbl(1 To I)
Line Input #1, Tbl(I)

Loop


If I = 0 Then
Close #1
MsgBox "Fichier vide. Operation annulee"
Exit Sub

End If

For I = 1 To UBound(Tbl)
Tbl(I) = Replace(Tbl(I), "SOPHIA", "DEBRIS")
Next I

Close #1
Open "C:Repertoire de testSophia.wdf" For Output As #1
'ré-inscrit les valeurs et referme
For I = 1 To UBound(Tbl)
Print #1, Tbl(I)
Debug.Print Tbl(I)
Next I
Close #1
Erase Tbl
End Sub