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 10/11/2011, 13h15   #1
Nouveau Membre du Club
 
Avatar de Nerva
 
Inscription : juin 2004
Messages : 179
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juin 2004
Messages : 179
Points : 32
Points : 32
Envoyer un message via Skype™ à Nerva
Par défaut Remplacement de guillemets qui ne fonctionne qu'à moitié

Bonjour.

J'ai un problème avec une macro qui théoriquement doit transformer les guillemets en caractères HTML :

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
Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = "« "
        .Replacement.Text = "« "
        .Forward = True
        .Wrap = wdFindAsk
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
 
 Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = " »"
        .Replacement.Text = " »"
        .Forward = True
        .Wrap = wdFindAsk
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
L'exécution de la macro me donne ceci :

Code :
Une « belle » voiture.
Ça fonctionne pour le guillemet ouvrant mais pas pour le fermant.

Merci de votre aide.
Nerva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 14h13   #2
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,

As-tu bien un espace avant ton guillemet fermant.
As-tu bien remis la méthode execute à la fin de ton code pour le guillemet fermant
Code :
Selection.Find.Execute Replace:=wdReplaceAll
Peut-être se replacer entre les deux remplacements au début
Code :
Selection.Homekey unit:=wdstory
__________________
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 10
Vieux 10/11/2011, 15h35   #3
Nouveau Membre du Club
 
Avatar de Nerva
 
Inscription : juin 2004
Messages : 179
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juin 2004
Messages : 179
Points : 32
Points : 32
Envoyer un message via Skype™ à Nerva
J'ai réenregistré les macros séparément et les ai ajoutées dans la macro de formatage. Ca fonctionne maintenant correctement mais je ne comprends pas l'utilité de ces deux lignes avant le With :

Code :
1
2
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Pour les autres remplacements, ces lignes n'existent pas (elles sont juste présentes en début de macro après le sub) et ça marche normalement.
Nerva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 15h47   #4
Membre actif
 
Avatar de Souriane
 
Femme Guylaine C.
Assistant aux utilisateurs
Inscription : septembre 2009
Messages : 157
Détails du profil
Informations personnelles :
Nom : Femme Guylaine C.
Âge : 39
Localisation : Canada

Informations professionnelles :
Activité : Assistant aux utilisateurs
Secteur : Service public

Informations forums :
Inscription : septembre 2009
Messages : 157
Points : 153
Points : 153
Bonjour Nerva,

Citation:
mais je ne comprends pas l'utilité de ces deux lignes avant le With
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting

Ces deux lignes suppriment les attributs de mise en forme qui auraient pu être ajouté lors d'une recherche précédente.

Si lors de ta dernière recherche tu avais cherché le mot tomate écrit en rouge et souligné, eh bien, lors de ta prochaine recherche, par défaut, la fenêtre de recherche indique de chercher le mot "tomate" souligné et écrit en rouge. Si tu n'enlèves pas le format, et bien ta prochaine recherche conservera la consigne souligné et rouge.

Bye!

Souriane
Souriane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 16h41   #5
Nouveau Membre du Club
 
Avatar de Nerva
 
Inscription : juin 2004
Messages : 179
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juin 2004
Messages : 179
Points : 32
Points : 32
Envoyer un message via Skype™ à Nerva
Merci pour ces précisions mais je ne comprends toujours leur utilité à cet endroit précis. Ma macro fait du rechercher/remplacer sur tous les caractères accentués et spéciaux susceptibles de se trouver dans un texte en français. Elle est structurée ainsi (seulement deux blocs présentés ici) :

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 Formatage_HTML()
 
    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
 
    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
 
' Etc, etc...
 
End Sub
Les lignes

Code :
1
2
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
ne sont présentes qu'une seule fois, en début de macro. Or, si j'ajoute les blocs de remplacement des guillemets ouvrants et fermants dans la macro sans ajouter ces deux lignes au-dessus de chaque With Selection.Find, les remplacements ne s'effectuent pas. Comme les instructions sont structurées strictement de la même manière que pour les autres caractères spéciaux, je ne comprends pas ce que ces chevrons ont de particulier et pourquoi les remplacements sont sans effet.
Nerva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 18h10   #6
Membre actif
 
Avatar de Souriane
 
Femme Guylaine C.
Assistant aux utilisateurs
Inscription : septembre 2009
Messages : 157
Détails du profil
Informations personnelles :
Nom : Femme Guylaine C.
Âge : 39
Localisation : Canada

Informations professionnelles :
Activité : Assistant aux utilisateurs
Secteur : Service public

Informations forums :
Inscription : septembre 2009
Messages : 157
Points : 153
Points : 153
Ah! Zut!

Dans ton premier message, je viens de voir pourquoi ta macro te donnait
Citation:
Une « belle » voiture.
C'est que la ligne suivante ne doit pas se trouver au début du code de recherche mais à la fin
car c'est ce qui dit à la macro "exécute la recherche ci-dessus"
Code :
Selection.Find.Execute Replace:=wdReplaceAll
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    With Selection.Find
        .Text = "« "
        .Replacement.Text = "« "
        .Forward = True
        .Wrap = wdFindAsk
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
 
 Selection.Find.Execute Replace:=wdReplaceAl

Citation:
Or, si j'ajoute les blocs de remplacement des guillemets ouvrants et fermants dans la macro sans ajouter ces deux lignes au-dessus de chaque With Selection.Find, les remplacements ne s'effectuent pas.
Je ne figure pas du tout pourquoi. Il doit y avoir autre chose!

Souriane
Souriane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 10h46   #7
Nouveau Membre du Club
 
Avatar de Nerva
 
Inscription : juin 2004
Messages : 179
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juin 2004
Messages : 179
Points : 32
Points : 32
Envoyer un message via Skype™ à Nerva
Bon, c'est réglé. J'ai nettoyé un bon coup mon module de macros qui commençait à être bien fouillis. Et effectivement, le Selection.Find.Execute Replace:=wdReplaceAll n'était pas placé où il le devait...
Nerva 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 06h31.


 
 
 
 
Partenaires

Hébergement Web