Exécuter le code VBA automatiquement

Mayss -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Re-bonjour !

J'ai un autre problème sur VBA.
J'ai un code qui me fait exactement ce que je veux, à ceci près :
J'ai une liste déroulante dans ma cellule, et quand je fais un choix dans cette liste, j'aurais besoin que le code s'exécute pour obtenir le résultat qu'il me faut, et qui dépend du texte dans ma cellule...

Une idée ? Merci d'avance !

Mayss

2 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Peux tu nous dire :
    1- En qu'elle cellule est ta liste déroulante?
    2- Quel est le code qui est censé se déclencher automatiquement?
    0
  2. Mayss
     
    Les cellules où les listes sont disponibles sont celles de la colonne C.
    Pour le code à exécuter, c'est celui-ci ;)

    Sub AleaCel()
    Dim Ligne As Byte
    Dim Colonne As Byte

    Colonne = 3
    For Ligne = 1 To 200
    If Cells(Ligne, Colonne) = "oui" Then
    Cells(Ligne, Colonne + 2) = ""
    Cells(Ligne, Colonne + 3) = "-"
    Cells(Ligne, Colonne + 4) = ""
    Cells(Ligne, Colonne + 5) = "-"
    ElseIf Cells(Ligne, Colonne) = "non" Then
    Cells(Ligne, Colonne + 2) = "-"
    Cells(Ligne, Colonne + 3) = ""
    Cells(Ligne, Colonne + 4) = "-"
    Cells(Ligne, Colonne + 5) = ""
    End If
    Next
    Calculate
    DoEvents
    End Sub

    Je voudrais donc que le code s'exécute de lui même dès que je choisis l'une des possibilités dans la liste.
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Tu trouveras, dans l'éditeur VBE, en haut à gauche, une fenêtre VBA-Project avec le nom de tes feuilles.
      Double clic sur la feuille concernée (celle qui a les listes en colonne C) puis copie-colle ce code dans le module de la feuille :
      Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Column <> 3 Then Exit Sub
      If Target.Row < 255 Then AleaCel Target.Row, 3 'pour respecter la limite imposée par le type Byte
      End Sub


      Puis change ta macro comme ceci :
      Sub AleaCel(Ligne As Byte, Colonne As Byte)
      If Cells(Ligne, Colonne) = "oui" Then
          Cells(Ligne, Colonne + 2) = ""
          Cells(Ligne, Colonne + 3) = "-"
          Cells(Ligne, Colonne + 4) = ""
          Cells(Ligne, Colonne + 5) = "-"
      ElseIf Cells(Ligne, Colonne) = "non" Then
          Cells(Ligne, Colonne + 2) = "-"
          Cells(Ligne, Colonne + 3) = ""
          Cells(Ligne, Colonne + 4) = "-"
          Cells(Ligne, Colonne + 5) = ""
      Else 'ICI le cas ou on a rien en colonne C
          Cells(Ligne, Colonne + 2) = ""
          Cells(Ligne, Colonne + 3) = ""
          Cells(Ligne, Colonne + 4) = ""
          Cells(Ligne, Colonne + 5) = ""
      End If
      End Sub
      0