VBA qui se fait automatiquement

M.R -  
michel_m Messages postés 18903 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

  1. 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
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  3. M.R
     
    Merci pour votre réponse!!
    excel me dit qu'il y a une erreur de syntaxe sur la deuxième ligne...
    0
    1. 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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonjour

    merci Whismeril :o)

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

    cordialement
    0
    1. Utilisateur anonyme
       
      Bonjour

      savais pas
      0
  6. 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
  7. 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
    1. 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
      1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > Utilisateur anonyme
         
        en VBA pas de mise en rouge pour une donnée qqsoit le type
        0
    2. M.R
       
      Merci beaucoup pour vos réponses !!! Tout s'éclaire !!!
      0
  8. 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
  9. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Où avais tu parlé de "Q3 " ?
    0
  10. 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
    1. 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
  11. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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