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 30/08/2011, 09h37   #1
Invité de passage
 
Homme Jérémy
Étudiant
Inscription : août 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : août 2011
Messages : 5
Points : 0
Points : 0
Par défaut Macro pour un rechercher/remplacer de certains espaces.

Bonjour à tous !

Alors voila, après m'être testé aux macros d'Excel, on me demande de bosser sur des macros Word et c'est compliquer d'apprendre tout en 1 jour ^^'.

Je dois effectuer un rechercher/remplacer spécial.

Dans plusieurs documents Word, j'ai des mots avec cette syntaxe :
[[Blabla]], je dois les remplacer par disons http://Blabla

Jusque là ça va, avec l'enregistreur ça passe tranquille :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "[["
        .Replacement.Text = "http://blabla/"
        .Forward = True
        .Wrap = wdFindContinue
 
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
 
 
 
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "]]"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
 
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
Sauf que ça se complique légèrement quand la syntaxe est de la forme :
[[Blabla Blabla]] ou [[Bla Bla Bla]]

Ces satanés espaces sont une vraie plaie, il faudrait que je les transforme en "_" pour avoir : http://Blabla_Blabla.

Le truc c'est que le nombre de caractères dans les [[...]] est aléatoire comme le nombre d'espaces, et évidemment les espaces dans le reste du document ne doivent pas être remplacés :/

Je suis donc preneur si vous avez une idée, car la je sèche complètement ...

Merci de votre aide, qui j'espère sera aussi rapide que la dernière fois =)

Cordialement, Shinmey.
Shinmey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 10h46   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 328
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 328
Points : 29 232
Points : 29 232
Salut,

une idée de départ pour l'enregistrement de ta macro : http://sepia.developpez.com/office/w...cherremplacer/
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 13h28   #3
Invité de passage
 
Homme Jérémy
Étudiant
Inscription : août 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : août 2011
Messages : 5
Points : 0
Points : 0
Bonjour Heureux-oli,

Merci pour ton lien, mais je l'avais déjà vu ^^

Le problème que je rencontre en fait, c'est que quand je mets par exemple dans ma fonction rechercher :

[[* *]] pour trouver mes [[Bla Bla]] si je décoche "utiliser les caractères génériques" ben il ne me trouve pas d'étoiles donc recherche infructueuse, normal ... Et si je la coche j'ai droit à un "le texte recherché contient un plage qui n'est pas valide". Car comme j'ai des crochets ouverts il me cherche un plage de caractère du genre [a-f] sauf que mes crochets sont la pour reconnaître où faire mon remplacement. Donc je suis bloqué

j'ai essayer donc sans les crochets au moins de départ, du genre remplacer [[ par http:// et ensuite * *]] par *_* mais pareil "le texte recherché ...".

Et si je vire complètement les crochets, c'est stupide ça va me rechercher partout où j'ai des espaces pour les remplacer par des _ ...

Du coup j'suis un peu coincé à cause de cette histoire de crochet, et j'arrive pas à voir comment faire ...


Edit : "je me suis dis "hé pourquoi ne pas passer par une étape où je vire les crochets ?"

Du coup en premier lieu je remplace mes doubles crochets [[ par ~~ et mes ]] par -- ( des symboles qu'on rencontre rarements comme ça ça ne risque pas d'apparaitre par hasard dans le doc ) comme ça je suis sur de ne pas avoir "le texte recherché contient un plage qui n'est pas valide".

Mais du coup je rencontre d'autres problèmes.

- Si je fais une recherche du genre ~~*--, cela va me trouver les trucs du genre ~~Bla-- et ~~Bla Bla-- sauf que comment je lui dis de remplacer les espaces par des _ ?

- je si fais une recherche du genre ~~* *-- Il ne me trouve pas les trucs du genre ~~Bla--, à la limite pas trop grave j'peux faire ceux sans espaces séparément et facilement.

- Le plus gros problème réside dans le fait que si je met ~~* *--, à remplacer par http://*_*, il va me trouver ~~Bla Bla-- mais va me remplacer par http://*_*, il ne garde le Bla Bla ...

je patauge toujours ^^'
Shinmey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 19h06   #4
Modérateur
 
Homme Christophe CHAPAT
Spécialiste progiciel
Inscription : février 2010
Messages : 984
Détails du profil
Informations personnelles :
Nom : Homme Christophe CHAPAT
Âge : 25
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Spécialiste progiciel
Secteur : Service public

Informations forums :
Inscription : février 2010
Messages : 984
Points : 1 597
Points : 1 597
Envoyer un message via MSN à carden752
Bonjour,

Une petite proposition qui devrait t'aider
Le principe est de boucler tant que tous les espaces n'ont pas été supprimés et de les supprimer à chaque fois
Ensuite, il ne reste plus qu'à remplacer la zone finale
Code :
1
2
3
4
5
6
7
8
9
10
Sub remplacement()
Selection.HomeKey wdStory
' Boucle tant qu'il reste des espaces entre les crochets
Do While (Selection.Find.Execute(findtext:="\[\[(*) (*)\]\]", ReplaceWith:="[[\1\2]]", MatchWildcards:=True, Forward:=True, Replace:=wdReplaceAll) = True)
Selection.HomeKey wdStory
Loop
'Remplacer le texte entre les crochets
Selection.HomeKey wdStory
Selection.Find.Execute findtext:="\[\[(*)\]\]", ReplaceWith:="http://\1", MatchWildcards:=True, Forward:=True, Replace:=wdReplaceAll
End Sub
__________________
Cordialement,
Christophe

Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche
carden752 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 01h18   #5
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 356
Points : 3 356
Salut Shinmey,

Tu étais sur la bonne voie. Ton seul problème est que tu utilises des caractères spéciaux dans ton remplacement, ce qui n'est pas autorisé. Donc tu le fais en 2 fois, une fois avec les caractères génériques, et une fois sans. Par habitude, j'utilise "$$$" (car on ne ne trouve pas cette séquence dans un texte) donc je n'ai pas de problème de remplacer trop de choses).

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
 
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "(\[\[)(bla bla bla)(\]\])"
        .Replacement.Text = "http:$$$\2"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
 
 
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "$$$"
        .Replacement.Text = "\\"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h52.


 
 
 
 
Partenaires

Hébergement Web