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 14/09/2011, 10h04   #1
Nouveau Membre du Club
 
Inscription : février 2003
Messages : 164
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 164
Points : 30
Points : 30
Par défaut Regrouper 2 macros

Bonjour,
J'ai crée 2 macros qui fonctionnent très bien lorsqu'on les exécute l'une après l'autre.

La première sélectionne un texte entre deux balises de type *** :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Macro1
Selection.HomeKey unit:=wdStory ' place le curseur en debut du document
With Selection.Find
.ClearFormatting
.Text = "***"
.MatchWildcards = 0
.Forward = 1
.Replacement.Text = ""
.Replacement.ClearFormatting
.Execute ' recherche du mot1
.Text = "***"
Selection.Extend ' etendre la selection
.Execute ' atteindre le mot2
End With
    Selection.Find.Execute
End Sub
La deuxième crée un hyperlien sur le texte sélectionné :

Code :
1
2
3
4
5
6
7
8
Sub Macro2
 
    ChangeFileOpenDirectory "C:\Users\MonNomUtilisateur\Desktop\"
    ActiveDocument.ActiveWindow.Selection.Hyperlinks.Add Anchor:=Selection.Range, Address:="", _
        SubAddress:="monsignet", ScreenTip:="", TextToDisplay:= _
        ActiveDocument.ActiveWindow.Selection.Text
 
End Sub
Lorsque j'essaye de les intégrer en copiant la seconde juste après Selection.Find.Execute, Word plante à chaque fois.
Auriez-vous une solution à ce bug? Merci d'avance.
Arsene12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 01h19   #2
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 Arsene12,

Je viens d'essayer aussi ce code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
Sub Macro1 
  ChangeFileOpenDirectory "C:\Users\MonNomUtilisateur\Desktop\"
 
  Selection.HomeKey unit:=wdStory ' place le curseur en debut du document
   With Selection.Find
      .ClearFormatting
      .Text = "***"
      .MatchWildcards = 0
      .Forward = 1
      .Replacement.Text = ""
      .Replacement.ClearFormatting
      .Execute ' recherche du mot1
      .Text = "***"
      Selection.Extend ' etendre la selection
      .Execute ' atteindre le mot2
   End With
   Selection.Find.Execute
   ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:="", _
        SubAddress:="monsignet", ScreenTip:="", TextToDisplay:=Selection.Range.Text
End Sub
Mais moi aussi mon Word ([Word 2007 - PC]) explose en vol
@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 02h19   #3
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 Arsene12,

Après plusieurs essais, Word explose toujours sur l'insertion du lien (même en changeant des paramètres).

Je vais essayer de voir demain.

@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 06h55   #4
Nouveau Membre du Club
 
Inscription : février 2003
Messages : 164
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 164
Points : 30
Points : 30
Par défaut Solution de substitution

Merci beaucoup Sepia. Je compte sur ton aide. J'ai quand même trouvé une solution de substitution. J'ai crée une nouvelle macro qui éxécute les deux précédentes. C'est peut-être comme ça qu'on doit procéder, car les macros sont conçues pour exécuter de courtes tâches répétitives.

Ceci dit, j'ai un problème pour récupérer le nom du signet : SubAddress:="monsignet"

Le signet étant celui d'un tableau, je voudrai remplacer "monsignet" par un truc du genre ActiveDocument.Bookmark.("Table1").name. Je connais pas la formule exacte à utiliser.
Arsene12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 07h29   #5
Nouveau Membre du Club
 
Inscription : février 2003
Messages : 164
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 164
Points : 30
Points : 30
Par défaut Récupérer le nom d'un signet

Pour le bookmark, j'ai trouvé une solution :

Code :
1
2
Dim champ As String
champ = ActiveDocument.Bookmarks(1).Name
Arsene12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 11h40   #6
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 Arsene12,

J'ai continué à chercher (une bonne partie de la nuit ). Le problème est clairement un bug de Word qui vient d'une mauvaise sélection après une recherche. N'aies aucun remord (d'abord parce qu'il s'agit d'un bug de Word, on le voit bien puisqu'individuellement chaque macro fonctionne) et beaucoup aurait de cette façon : utiliser la recherche pour récupérer le range et lui ajouter un hyperlien .

Mais comme il y a un bug, j'ai donc cherché une solution de contournement sans utiliser la fonction de sélection donc pas de déplacement du point d'insertion. Voilà le code (qui ne plante pas). On utilise les objets range de l'objet Document mais pas les fonctions de recherche et de sélection.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
    For aI = 1 To ActiveDocument.Paragraphs.Count
        If InStr(ActiveDocument.Paragraphs(aI), "***") > 0 Then
            If InStr(InStr(ActiveDocument.Paragraphs(aI), "***") + 3, ActiveDocument.Paragraphs(aI), "***") > 0 Then
                ActiveDocument.Hyperlinks.Add _
Anchor:=ActiveDocument.Range(Start:=InStr(ActiveDocument.Paragraphs(aI), "***") + 3, End:=InStr(InStr(ActiveDocument.Paragraphs(aI), "***") + 3, ActiveDocument.Paragraphs(aI), "***") - 1), _
                    Address:="http://www.google.fr", _
                    SubAddress:="", _
TextToDisplay:=ActiveDocument.Range(Start:=InStr(ActiveDocument.Paragraphs(aI), "***") + 3, End:=InStr(InStr(ActiveDocument.Paragraphs(aI), "***") + 3, ActiveDocument.Paragraphs(aI), "***") - 1).Range.Text
            End If
        End If
    Next
Attention, dans ton cas, ça fonctionne mais il faut savoir qu'il s'agit d'une restriction par apport à ce que tu proposais sur 2 points. Le 1er point est qu'il faut que le lien soit sur un seul paragraphe (ce qui semble un comportement normal. Un retour chariot dans un hyperlien n'a pas de sens), le 2ième point est que tu ne peux plus utiliser les fonctions évoluées de la recherche (sur le style, la police, la couleur...) pour mieux cibler tes hyperliens.

Remarque : j'ai "retiré" de la zone d'hyperlien les "***" devant et après car elles n'ont de justification informatique (mais elles ont peut-être pour toi, fonctionnellement). On peut t'aider à les remettre dans la zone si besoin.

@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 08h12   #7
Nouveau Membre du Club
 
Inscription : février 2003
Messages : 164
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 164
Points : 30
Points : 30
Par défaut Merci

Merci Sepia pour tous ces renseignements. J'ai appris pas mal de choses, ça va me permettre d'avancer. Je pense que mon problème est résolu. Il faudrait peut-être que j'apprenne à conserver une variable en changeant de macro, mais je n'en ai pas besoin pour le moment.
Merci encore.
A+
Arsene12 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 01h43.


 
 
 
 
Partenaires

Hébergement Web