[VBA - Word] Recherche et ajout de texte. [Résolu]

Madvin
Messages postés
123
Date d'inscription
mardi 5 août 2003
Dernière intervention
26 août 2012
- 6 juin 2007 à 15:44 - Dernière réponse : drikce06
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
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.
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Madvin
Messages postés
123
Date d'inscription
mardi 5 août 2003
Dernière intervention
26 août 2012
- 7 juin 2007 à 15:59
3
Merci
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... 

Merci Madvin 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de Madvin
fiko81
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Dernière intervention
5 septembre 2010
- 6 juin 2007 à 22:19
0
Merci
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 />
Commenter la réponse de fiko81
drikce06
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Dernière intervention
29 mai 2008
- 7 juin 2007 à 09:21
0
Merci
Salut! Mais que serions-nous sans l'enregistreur de macro?

 Drikce 06
Commenter la réponse de drikce06
Madvin
Messages postés
123
Date d'inscription
mardi 5 août 2003
Dernière intervention
26 août 2012
- 7 juin 2007 à 10:50
0
Merci
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.
Commenter la réponse de Madvin
Madvin
Messages postés
123
Date d'inscription
mardi 5 août 2003
Dernière intervention
26 août 2012
- 7 juin 2007 à 11:02
0
Merci
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 ?
Commenter la réponse de Madvin
drikce06
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Dernière intervention
29 mai 2008
- 7 juin 2007 à 16:05
0
Merci
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
Commenter la réponse de drikce06

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.