VBA qui se fait automatiquement

M.R -  
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
J'ai une petite question concernant une VBA. Je voudrais faire une VBA qui se fait automatiquement quand je change la valeur de ma cellule.
Je vous explique; j'ai créé une VBA:
Sub lance_USF2()
UserForm2.Show
End Sub

Sub livraison()
If Cells(2, 17).Value = "reçu" Then lance_USF2
End Sub

Celle ci me permet d'ouvrir un userform quand la valeur de la cellule est "reçu"
mais mon problème c'est qu'elle ne se fait pas automatiquement.... Quand je change la valeur de ma cellule, je suis obligé d'appuyer sur "exécuter ma maccro" pour que ça marche...
Quelqu'un aurait une idée?

11 réponses

Utilisateur anonyme
 
Bonjour

VBA est le nom du langage avec lequel tu as écrit ta macro.
C'est donc la macro qu'il faut lancer....

https://forums.commentcamarche.net/forum/affich-20778122-macro-lance-au-changement-d-une-cellule-excel
0
M.R
 
Merci ! mais j'ai bien vu cette conversation mais je n'arrive pas à comprendre comment fonctionne le "Private Sub Worksheet_Change(ByVal Target As Range)" et je n'arrive pas à faire le lien entre "Private Sub Worksheet_Change(ByVal Target As Range)" et ma maccro "livraison"
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour

Tu remplaces tes 2 macros par
Private Sub Worksheet_Change(ByVal Target As Range) 
If target.address=$Q$2 then
If target="reçu" then UserForm2.Show
End if
end sub

code à installer dans le module feuille de la cellule Q2

astuce pour installer:
clic droit sur le nom d'onglet
visualiser le code
0
M.R
 
Merci pour votre réponse!!
excel me dit qu'il y a une erreur de syntaxe sur la deuxième ligne...
0
Utilisateur anonyme
 
Bonsoir,

michel a tapé à la main sur le post, ça se voit car target a une majuscule dans la signature et plus ensuite, donc il n'a pas pu tester la validité du code, mais tout de même il t'apporte 99% de la solution

Un peu de recherche et de réflexion de ta part aurait suffit à finaliser:
  • Si on regarde la propriété Address d'un Range dans l'aide en ligne (faut sélectionner le texte et cliquer F1) on voit que c'est un string.
  • D'autre par, plus haut, dans ton propre code, tu testes la propriété Value du range.


Je suis mauvais en VBA, il m'a fallut 2minutes pour trouver
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
bonjour

merci Whismeril :o)

Toutefois, le "value" n'est pas nécessaire: cette propriété est la propriété par défaut

cordialement
0
Utilisateur anonyme
 
Bonjour

savais pas
0
M.R
 
Vous allez encore me réprimander....
Mais je comprend strictement rien à ce que vous me dites....(quand je vous dit que je suis nulle c'est que je suis vraiment nulle).

"Si on regarde la propriété Address d'un Range dans l'aide en ligne (faut sélectionner le texte et cliquer F1) on voit que c'est un string."
C'est quoi un string?
Qu'est ce qu'il faut que je fasse?
0
Utilisateur anonyme
 
Un string est une chaine de caractère, du texte.
https://fr.wikipedia.org/wiki/Cha%C3%AEne_de_caract%C3%A8res

Le logiciel de programmation tout seul, ne va pas savoir si toto est le nom d'une variable ou le texte toto, souvent (c'est le cas en VBA), un string est écrit entre guillemets pour le reconnaitre.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address=$Q$2 then     
                 If Target="reçu" then UserForm2.Show 
   End if
End sub

Sans guillemets, VBA va chercher une variable qui s'appelle $Q$2, et ne la trouvera pas

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address="$Q$2" then     'cette fois c'est le texte $Q$2 qui est testé
                 If Target.Value="reçu" then UserForm2.Show 
   End if
End sub


J'ai laissé le test avec Target.Value, car mon Excel n'était pas content sans.
0
Utilisateur anonyme
 
PS sur le site un string apparait en rouge, car c'est comme ca en VB6 et VB.Net, mais cette coloration ne marche pas en VBA, du moins pas avec le mien.
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314 > Utilisateur anonyme
 
en VBA pas de mise en rouge pour une donnée qqsoit le type
0
M.R
 
Merci beaucoup pour vos réponses !!! Tout s'éclaire !!!
0
M.R
 
Maintenant que j'ai réussi ça, j'ai mon userform (qui me permet d'entrer du texte dans des cellules d'une certaine ligne)qui s'ouvre quand je met "reçu" en Q2. comment je fait pour que mon userform entre mon texte dans la ligne ou j'écris reçu ?
Exemple: si en Q3 j'écris reçu j'aimerais que ce que j'écris dans mon userform se mette sur la ligne 3...Mais pour l'instant ça ne se met que dans la ligne 2... Peut importe l'endroit De la colonne Q ou je marque Reçu...
J'espère avoir été assez claire...
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Où avais tu parlé de "Q3 " ?
0
M.R
 
J'ai pris Q3 comme exemple mais ça aurait pu être Q5, Q6.... enfaite à chaque fois que je sélectionne "reçu" sur une ligne, j'aimerais que ce que j'écris dans mon UserForm, apparaisse à la suite de cette même ligne et non dans la ligne 2 comme actuellement.
0
M.R
 
J'ai réussi à insérer le code pour que quand "je lance le formulaire, je transmet la ligne" et ça fonctionne!
Merci tout de même de m'avoir aidé!
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Pourquoi ne pas le dire au départ ? :-((

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 17 Then
If Target = "reçu" Then UserForm2.Show
End If
End Sub


maintenant, tu introduis encore un truc
... j'aimerais que ce que j'écris dans mon UserForm, apparaisse à la suite de cette même ligne et...


Il faut bien te rendre compte que ce que tu demandes n'est pas forcément facile et que personne ne veut passer parfois plusieurs heures à essayer de résoudre un problème bénévolement pour se voir dire après coup « En fait, il faudrait que… (rarement, je n'ai pas bien expliqué, excusez moi)…»
0