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