[VBA - Word] Recherche et ajout de texte.

Résolu
Madvin Messages postés 123 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 26 août 2012 - 6 juin 2007 à 15:44
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 - 7 juin 2007 à 16:05
Bonjour à tous,

Je n'ai jamais fait de VBA sous Word et je ne trouve pas exactement ce que je recherche sur le net. C'est sous Word 2000 plus précisément.

Est-ce que quelqu'un saurait par hasard comment faire par macro, avec une méthode simple si possible, pour :
1) Rechercher toutes les occurrences dans un fichier WORD vérifiant l'expression régulière <> avec * n'importe quelle chaîne de caractères.
2) Ajouter dans le document après chacune des occurences trouvées : saut de ligne + "B_" + la chaîne de caractères correspondant à *.

Pour info, les occurences recherchées peuvent se trouver dans des tableaux.

De plus, est-ce que quelqu'un sait où trouver la documentation officielle pour le VBA sur le net ? J'ai eu beau parcourir dans tous les sens le site de Microsoft je ne trouve pas.
Ou alors éventuellement un site bien fichu à ce sujet. Si vous avez je suis preneur.

Merci beaucoup.

Si vous pouviez me donner un coup de pouce ce ne serait pas de refus.
A voir également:

6 réponses

Madvin Messages postés 123 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 26 août 2012 3
7 juin 2007 à 15:59
Bon ben finalement j'ai réussi !!
Mais c'était franchement laborieux !!!
Côté documentation c'est vraiment pas le top !!

Bon la macro est vraiment basique et bourrée de bidouillages, mais elle peut être améliorée.
La voici donc pour ceux que cela intéresse :

Sub MyMacro()



Dim newExpr As String



' Deplacement du curseur en debut de document
Selection.Start = ActiveDocument.Content.Start
Selection.End = ActiveDocument.Content.Start



'Proprietes de la recherche a effectuer
    With Selection.Find
        .ClearFormatting
        .Text = "(\<\\>)" 'Expression régulière : on recherche les <> avec * une chaîne quelconque
        .Forward = True
        .Wrap = wdFindStop 'On arrête la recherche à la fin du document
        .MatchWildcards = True 'Pour accepter les recherches avec expressions régulières
    End With



'Ajout de la nouvelle expression pour chaque occurrence trouvée
   While Selection.Find.Execute



        newExpr = Selection.Text



        newExpr = Replace(newExpr, "<>", "")
        newExpr = "B" + newExpr



        Selection.InsertParagraphAfter
        Selection.InsertAfter (newExpr)
        Selection.Start = Selection.End + 1
        Selection.End = Selection.Start



   Wend



'Replacement du curseur en debut de document
Selection.Start = ActiveDocument.Content.Start
Selection.End = ActiveDocument.Content.Start
End Sub







Et voilou.

@+ et merci pour ceux qui ont tenté de m'aider... 
3
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
6 juin 2007 à 22:19
Salut,
Voila ce que donne une macro VBA enregistrée avec L'outil d'enregsitrement de macro :

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "A_"
        .Replacement.Text = "B_"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

Et voila la modification à apporter (rien de méchant) :

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "A_"
        .Replacement.Text = vbCr & "B_"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

 Fiko ;-)

La reponse vous convient pensez > Accepter < <hr />
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
7 juin 2007 à 09:21
Salut! Mais que serions-nous sans l'enregistreur de macro?

 Drikce 06
0
Madvin Messages postés 123 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 26 août 2012 3
7 juin 2007 à 10:50
Merci pour ta réponse fiko81 mais c'est pas exactement ce que je veux faire.
Je veux ajouter dans le document après toutes les expressions au format "<>" avec * n'importe quelle chaine autre que "<<" et ">>", l'expression "B_*" avec * la même chaîne que dans l'expression recherchée.

Ex :
Si mon fichier contient ça :

<>

<> (dans une cellule d'un tableau)

Je veux obtenir ça :

<>
B_123456_abcd

<> | <- Dans la même cellule du
B_xyz123_lmnop_99     | <- tableau

J'ai pas mal avancé. Hier j'arrivais à le faire pour la première occurrence trouvée, mais depuis ce matin j'essaye de le réitérer pour tous, mais ça ne marche pas... Et j'arrive même plus à le faire marcher pour la première occurrence depuis.
Pour info voici où j'en suis pour l'instant :

Dim newExpr As String





    With Selection.Find
        .ClearFormatting
        .Text = "\<\\>"
        .Forward = True
        .Wrap = wdFindContinue
    End With




    While Selection.Find.Execute


        newExpr = Selection.Text


        newExpr = Replace(newExpr, "<>", "")
        newExpr = "B" + newExpr


        Selection.InsertParagraphAfter
        Selection.InsertAfter (newExpr)


    Wend

Mais ça ne marche pas, il ne se passe rien.
Et si j'enlève la boucle While, ça m'ajoute B à l'emplacement du curseur : c'est à dire qu'il ne trouve pas et ne sélectionne pas la première occurrence trouvée correspondant à l 'expression régulière, alors que hier ça marchait... Pourquoi ????



Franchement c'est honteux de voir aussi peu de documentation. Et en plus ce n'est pas vraiment de la documentation, mais toujours les mêmes exemples basiques. Rien de bien complet et clair sur la fonction des différents objets et méthodes existantes.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Madvin Messages postés 123 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 26 août 2012 3
7 juin 2007 à 11:02
C'est bizarre... En faisant une exécution pas à pas, je remarque que le code passe directement de la ligne "While" à la suite sans passer par "Wend". =/ Comment ça se fait ?
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
7 juin 2007 à 16:05
Tu pourrais en faire un snippet "Parcourir un fichier word et remplacer une occurence", ce serai sympa et voir déposer également le code sur le forum de mortalino (voir ma signature) dans la section Word (proposition de code). Ce serai sympa et pourrai servir à quelqu'un.
@+.

 Drikce 06
0
Rejoignez-nous