Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/10/2006, 11h42   #1
Invité de passage
 
Inscription : octobre 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 5
Points : 2
Points : 2
Par défaut Rechercher/Remplacer dans zone de text word ne fonctionne pas.

Bonjour,

Je fais du VB pour la première fois aujourd'hui et j'avoue ne pas tout comprendre ...
Je cherche simplement à remplacer des chaînes de caractères dans un document Word (par exemple remplacer [nom] par Toto). La fonction que j'ai écrite fonctionne si mon texte à rechercher ne se trouve pas dans une zone de texte Word (menu insertion/Zone de texte) !! J'ai absolument besoin d'utiliser des zones de texte !

Ce qui est étrange c'est que lorsque je lance la commande rechercher/remplacer sous Word, celui ci me remplace bine les mots situés dans les zones de texte !
Voici le code VB
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
Sub Remplacer_texte(Texte_à_remplacer As Variant, Texte_de_remplacement As Variant, Tout As Boolean)
 
With Word_Application
    .Selection.find.ClearFormatting
    .Selection.find.Replacement.ClearFormatting
 
     With .Selection.find
          .Text = Texte_à_remplacer
         .Replacement.Text = Texte_de_remplacement
         .Forward = True
         .Wrap = wdFindContinue
         .Format = False
         .MatchCase = False
         .MatchWholeWord = False
         .MatchWildcards = False
         .MatchSoundsLike = False
         .MatchAllWordForms = False
    End With
    .Selection.find.Execute
 
    With .Selection
         If .find.Forward = True Then
             .Collapse Direction:=wdCollapseStart
         Else
             .Collapse Direction:=wdCollapseEnd
         End If
         If Tout Then
             .find.Execute Replace:=wdReplaceAll
         Else
             .find.Execute Replace:=wdReplaceOne
         End If
     End With
 End With
 
 End Sub
Quelqu'un a-t-il déjà rencontré ce problème ?

Merci d'avance.
cellma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2006, 14h16   #2
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Où prends-tu ta zone de texte ? Dans la barre d'outils "Commandes" ou dans la barre d'outils "Dessin" ?
Si c'est dans la barre d'outils "Dessin"
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    ActiveDocument.Shapes("Text Box 1").Select
    Selection.WholeStory
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "cou"
        .Replacement.Text = "lou"
        .Forward = True
        .Wrap = wdFindAsk
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Application.DisplayAlerts = False
    Selection.Find.Execute Replace:=wdReplaceAll
Tu dois sélectionner ta zone de texte et tout son contenu avant de lancer la recherche

Edit
Voui, j'ai été interrompu...
Quand la zone de texte provient de la barre d'outils "Commandes", Je sais pas !
Dans quel cas es-tu ?
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2006, 15h33   #3
Invité de passage
 
Inscription : octobre 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 5
Points : 2
Points : 2
Ok ! Merci !! Ce n'est pas encore la solution mais cette réponse m'a permis d'avancer !

Ton code fonctionne quand je rajoute des zones de textes depuis la barre d'outils "dessin".
Quand j'insère une zone de texte depuis le menu "Insertion", Word crée un "canevas" et c'est dans ce canevas que doit se trouver mes fameuses zones de texte. Je vais donc approfondir de se côté. A mon avis on doit pourvoir récupérer les fils d'un objet shape.

Merci encore !
cellma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2006, 15h40   #4
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Sans doute ! Sans doute !
J'avoue que je n'ai jamais fait ça dans Word

Bonne chance dans tes recherches. Si tu trouves, n'hésite pas à mettre ta solution ici
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2006, 17h03   #5
Invité de passage
 
Inscription : octobre 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 5
Points : 2
Points : 2
voilà ce que j'ai trouvé :
Shape.CanvasItems Property
Returns a CanvasShapes object that represents a collection of shapes in a drawing canvas.

Donc sur chaque shape, on peut à nouveau récupérer une collection de shape et recommencer la manip Rechercher/Remplacer.
cellma est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h21.


 
 
 
 
Partenaires

Hébergement Web