Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2433 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  WORD VBA - Lancement automatique d'une macro

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

WORD VBA - Lancement automatique d'une macro

n°1408800
didieraucu​n
Posté le 18-07-2006 à 20:33:02  profilanswer
 

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

mood
Publicité
Posté le 18-07-2006 à 20:33:02  profilanswer
 

n°1408928
daniel-12
Posté le 18-07-2006 à 23:07:13  profilanswer
 

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
n°1409714
didieraucu​n
Posté le 19-07-2006 à 19:58:00  profilanswer
 

merci, mais pour le test de la condition de la premiere ligne de texte, je mets quoi ?

n°1409740
daniel-12
Posté le 19-07-2006 à 20:19:41  profilanswer
 

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

n°1409766
daniel-12
Posté le 19-07-2006 à 21:20:32  profilanswer
 

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

n°1411242
didieraucu​n
Posté le 21-07-2006 à 22:35:06  profilanswer
 

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:

n°1411248
didieraucu​n
Posté le 21-07-2006 à 23:13:09  profilanswer
 

é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      
 

n°1411872
didieraucu​n
Posté le 23-07-2006 à 21:34:51  profilanswer
 

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 ?

n°1411933
daniel-12
Posté le 23-07-2006 à 23:26:47  profilanswer
 

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
 

n°1412666
didieraucu​n
Posté le 24-07-2006 à 21:35:58  profilanswer
 

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

mood
Publicité
Posté le 24-07-2006 à 21:35:58  profilanswer
 

n°1412784
daniel-12
Posté le 25-07-2006 à 09:23:40  profilanswer
 


 
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
 

n°1413381
didieraucu​n
Posté le 25-07-2006 à 20:29:39  profilanswer
 

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.

n°1413391
daniel-12
Posté le 25-07-2006 à 20:58:48  profilanswer
 

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
n°1414202
didieraucu​n
Posté le 26-07-2006 à 23:52:21  profilanswer
 

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 ?
 
 
 

n°1414213
daniel-12
Posté le 27-07-2006 à 00:29:49  profilanswer
 

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

n°1414247
Paul Hood
Posté le 27-07-2006 à 08:45:26  profilanswer
 

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

n°1414992
didieraucu​n
Posté le 28-07-2006 à 00:10:44  profilanswer
 

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

n°1415005
daniel-12
Posté le 28-07-2006 à 00:49:36  profilanswer
 


'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

n°1436019
didieraucu​n
Posté le 03-09-2006 à 21:51:05  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  WORD VBA - Lancement automatique d'une macro

 

Sujets relatifs
Fichier de configuration automatique de proxy?VBA Excel : utiliser une Locale spécifique dans une macro
Word numéro de tableauj'arrive pas a faire une liaison en VBA entre excel et une base access
[VBA] RESOLU Extraction d'une chaine de caractèresDimension automatique du site
Génération automatique de documentstableaux iùmbriqués sous word
Tableaux imbriqués dans word 
Plus de sujets relatifs à : WORD VBA - Lancement automatique d'une macro


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR