WORD VBA - Lancement automatique d'une macro - VB/VBA/VBS - Programmation
Marsh Posté le 18-07-2006 à 23:07:13
pour qu'une macro s'execute automatiquement à l'ouverture, il te faut la mettre dans un module du document et l'appeler autoopen 
 
 
Sub AutoOpen() 
'ici le code de la macro 
'test de la première ligne ect... 
End Sub 
 
pour plus de précisions : 
http://faqword.free.fr/articles.php?lng=fr&pg=653 
 
Marsh Posté le 19-07-2006 à 19:58:00
merci, mais pour le test de la condition de la premiere ligne de texte, je mets quoi ?
Marsh Posté le 19-07-2006 à 20:19:41
Je ne sais pas te répondre facilement sur ce point 
mais je pense que c'est assez facile 
 
regarde sur ce site, tu y trouveras des infos intéressantes: 
http://faqword.free.fr/articles.php?lng=fr&pg=61
Marsh Posté le 19-07-2006 à 21:20:32
  ligne1 = Selection.Document.Paragraphs(1) 
  If ligne1 Like "*" & "COMMANDE CLIENT." & "*" = True Then MsgBox ("la première ligne contient le texte" ) 
  If ligne1 Like "*" & "COMMANDE CLIENT." & "*" = False Then MsgBox ("la première ligne NE contient PAS le texte" )
Marsh Posté le 21-07-2006 à 22:35:06
| daniel-12 a écrit : ligne1 = Selection.Document.Paragraphs(1)  | 
 
 
je peux rajouter plusieurs ligne de commande avec Then ... et end if 
 If ligne1 Like "*" & "COMMANDE CLIENT." & "*" = True Then MsgBox ("la première ligne contient le texte" ) 
  ........ 
  ........... 
  ............. 
end if 
 
  If ligne1 Like "*" & "COMMANDE CLIENT." & "*" = False Then MsgBox ("la première ligne NE contient PAS le texte" ) 
 
A oui, je suis complètement nul en VBA ...  
 
Marsh Posté le 21-07-2006 à 23:13:09
écrit de cette façon ça marche super 
 
Sub Autoopen() 
' 
    ligne1 = Selection.Document.Paragraphs(1) 
  If ligne1 Like "*" & "COMMANDE CLIENT." & "*" = True Then 
  MsgBox ("la première ligne contient le texte" ) 
  Selection.TypeText Text:="Nouveau texte" 
  End If 
  If ligne1 Like "*" & "COMMANDE CLIENT." & "*" = False Then MsgBox ("la première ligne NE contient PAS le texte" ) 
End Sub 
:-) 
 
Et si je souhaite contrôler, sur la deuxième ligne, la présence d'une croix mais à une certaine position sur la ligne ? 
en effet sur la deuxieme ligne serait du type : 
Client X             Exterieur X      Prestataire X      
 
Marsh Posté le 23-07-2006 à 21:34:51
Et si je souhaite contrôler, sur la deuxième ligne, la présence d'une croix mais à une certaine position sur la ligne ? 
en effet sur la deuxieme ligne serait du type : 
Client X             Exterieur X      Prestataire X       
 
Comment puis je faire ?
Marsh Posté le 23-07-2006 à 23:26:47
Amuse toi avec cette fonction : RIGHT 
 
ligne2 = Selection.Document.Paragraphs(2)   
MsgBox Right(ligne2, 5)    'le 5 dans ce cas donne les 5 dernier caractere de la ligne 2 
 
Apparement en utilisant ce code tel quel, la fonction  
MsgBox Right(ligne2, 1) ,  
ne donne pas le dernier caractère, car c'est certainement un retour chariot, à tester donc 
 
Marsh Posté le 24-07-2006 à 21:35:58
J'ai ecris ça, mais ca ne marche pas   
  
  
ligne2 = Selection.Document.Paragraphs(2) 
  If Left(ligne2, 7) = "X" Then 
  MsgBox ("Il y a le X pour client" ) 
  End If 
 
  
  
 
Marsh Posté le 25-07-2006 à 09:23:40
 
 
Client X             Exterieur X      Prestataire X 
 
Left(ligne2, 7)    ===> part du debut(gauche) et renvoie les 7 caractères suivant (et non pas le 7°) ==> "Client " 
Tu espérais avoir un "X" mais en réalité tu as obtenu "Client ", donc ton test n'est pas valide, donc l'affichage du message n'a pas lieu 
 
Mid(ligne2, 7, 1) ===> commence a extraire les caractères a la 7° position et donnera 1 caractère ==> X 
il te faut donc utiliser la fonction Mid 
 
Ensuite , pour faire des essais,  
au lieu de faire un test, qui annonce le resultat dans un message 
If Left(ligne2, 7) = "X" Then MsgBox ("Il y a le X pour client" ) 
 
tu ferais mieux de faire un message qui te donne le resultat d'une variable : 
 
MsgBox Left(ligne2, 1) 
MsgBox Left(ligne2, 2) 
MsgBox Left(ligne2, 3) 
MsgBox Left(ligne2, 5) 
MsgBox Left(ligne2, 8) 
 
MsgBox Mid(ligne2, 7, 1) 
MsgBox Mid(ligne2, 7, 2) 
MsgBox Mid(ligne2, 7, 3) 
MsgBox Mid(ligne2, 7, 4) 
MsgBox Mid(ligne2, 7, 5) 
 
l'avantage, c'est que tu vois directement le résultat de ta fonction 
c'est utile lors des phases d'apprentissage 
 
Marsh Posté le 25-07-2006 à 20:29:39
MsgBox Mid(ligne2, 7, 2)  renvoi bien X 
 
mais quand j'écris  
ligne2 = Selection.Document.Paragraphs(2) 
  If Mid(ligne2, 7, 2) Like "X" = True Then 
  MsgBox ("Il y a le X" ) 
  End If 
 
il ne se passe rien. 
Marsh Posté le 25-07-2006 à 20:58:48
Normal ! 
Mid(ligne2, 7, 2)  renvoie le 7eme et 8eme caractere soit : " X" 
utilise plutôt : 
Mid(ligne2, 8, 1)  renvoie uniquement le 8eme caractere soit : "X" 
 
avant la ligne de test fais un msgbox Mid(ligne2, 8, 1) et tu constateras toit même le résultat 
 
Edit, c'est vrai que je me suis trompé dans mon post précedent, en ce qui concerne la position du X
Marsh Posté le 26-07-2006 à 23:52:21
Je vois que ça doit pas marcher pareil quand les valeurs sont dans un tableau comme celui-ci :  
 
 
MsgBox Mid(ligne2, 1, 1)  renvois bien x    
 
 
Quand j'écris : 
ligne2 = Selection.Document.Paragraphs(2) 
  If Mid(ligne2, 1, 0) <> "*" Then 
  MsgBox ("CLIENT" ) 
 
La réponse est toujours la même quelque soit la valeur (vide ou avec un X) !!    
 
j'ai essayé plusieurs solutions avec Mid(ligne2, 1, 1) mais c'est toujours pareil   
   
 
Je souhaite avoir le message client si il y a un caractère quel conque (X ou x ou + ou ...) bref si la cellule n'est pas vide. 
 
Comment puis je faire ? 
 
 
 
Marsh Posté le 27-07-2006 à 00:29:49
utilise cette facon pour selectionner ta cellule 
txtcellule = Selection.Tables(1).Cell(1, 2).Range.Text 
 
 
tu remarqueras que le texte de la cellule apparait, mais il est suivi d'un autre caractère 
mais ne ne sais pas pourquoi ??   
   
MsgBox Selection.Tables(1).Cell(1, 2).Range.Text 
 
 
pas grave 
il suffit de faire un test sur le premier caractère de la cellule et le tour est joué 
If Left(txtcellule, 1) = "X" Then MsgBox ("le texte de la cellule commence par un X" ) 
Marsh Posté le 27-07-2006 à 08:45:26
| didieraucun a écrit :   If Mid(ligne2, 1, 0) <> "*" Then  | 
 
Un "mid" avec une longueur de 0. C'est pas complétement anormal que ca retourne rien  
 
Marsh Posté le 28-07-2006 à 00:10:44
| daniel-12 a écrit : tu remarqueras que le texte de la cellule apparait, mais il est suivi d'un autre caractère  | 
 
 
C'est bien ça le problème. C'est ce fichu caractère de code de tableau qui gêne. 
La cellule n'est jamais vide. donc si je teste la presence d'un caractere quel conque. Il renvoi toujours VRAI   
  
Marsh Posté le 28-07-2006 à 00:49:36
 
'recuperation du texte complet avec les 2 caractères de fin 
texte = Selection.Tables(1).Cell(1, 2).Range.Text 
 
'on dira que la longueur du texte est coupée de 2 caractères invisibles situés a la fin 
fintexte = Len(texte) - 2 
 
 
'et on trimme depuis le debut(1) jusqu'a la fin sans les caractères parasites(fintexte) 
'la valeur de fin de texte est variable, car elle depend du nombre de caracteres ecrits dans la cellule 
 
MsgBox Mid(Selection.Tables(1).Cell(1, 2).Range.Text, 1, fintexte) 
 
 
il y surement plus simple
Marsh Posté le 03-09-2006 à 21:51:05
J'éspére que pour vous les vacances se sont bien passées   
  
 
Et me revoilà avec mes questions   
  
 
J'ai écris cela et ça marche bien :  
---------------------------------------------------------------- 
Sub Macro1() 
'  
texte = Selection.Tables(1).Cell(2, 1).Range.Text 
fintexte = Len(texte) - 2 
MsgBox Mid(Selection.Tables(1).Cell(1, 2).Range.Text, 1, fintexte) 
t1 = Mid(Selection.Tables(1).Cell(1, 2).Range.Text, 1, fintexte) 
If t1 = "X" Then 
  MsgBox ("COMMANDE CLIENT" ) 
   
End If 
End Sub 
--------------------------------------------------------------- 
 
Mais si je souhaite avoir le même message pour PRESTATAIRES ET EXTERIEUR 
Je change quelles variables ? 
Comment on choisis une cellule dans le tableau ? 
 
Mon document Word est présenté comme ceci  
 
 
Merci 
Marsh Posté le 18-07-2006 à 20:33:02
Bonjour à tous,
 
 
J'aimerais savoir si il est possible qu'une macro puisse s'exécuter automatique à l'ouverture d'un fichier Word avec comme condition que la première ligne de texte soit par exemple COMMANDE CLIENT.
Par avance merci