WORD VBA - Lancement automatique d'une macro

WORD VBA - Lancement automatique d'une macro - VB/VBA/VBS - Programmation

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  :)

Reply

Marsh Posté le 18-07-2006 à 20:33:02   

Reply

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
 


Message édité par daniel-12 le 18-07-2006 à 23:10:41
Reply

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 ?

Reply

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

Reply

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" )

Reply

Marsh Posté le 21-07-2006 à 22:35:06    

daniel-12 a écrit :

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" )


 
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 ... :ange:

Reply

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      
 

Reply

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 ?

Reply

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
 

Reply

Marsh Posté le 24-07-2006 à 21:35:58    

J'ai ecris ça, mais ca ne marche pas  :non:  
 
ligne2 = Selection.Document.Paragraphs(2)
  If Left(ligne2, 7) = "X" Then
  MsgBox ("Il y a le X pour client" )
  End If
 
 :??:  
 

Reply

Marsh Posté le 24-07-2006 à 21:35:58   

Reply

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
 

Reply

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.

Reply

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


Message édité par daniel-12 le 25-07-2006 à 21:00:38
Reply

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 :
http://img144.imageshack.us/img144/3348/clipboard1qh9.jpg
 
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  :pt1cable:  
 
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 ?
 
 
 

Reply

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" )

Reply

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 :D

Reply

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
mais ne ne sais pas pourquoi ??  :(  
MsgBox Selection.Tables(1).Cell(1, 2).Range.Text


 
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  :??:  

Reply

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

Reply

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  :ange:  
 
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
http://img318.imageshack.us/img318/722/clipboard1ea6.jpg
 
Merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed