Code evenementiel VBA

Bonjour,

Merci d'avance pour votre aide, je n'arrive pas étant très mauvais en VBA à trouver une solution au problème suivant :

J'aimerai que ma colonne L soit masquée lorsque S1 = A ou B, mais que ma colonne M soit masquée lorsque S1 = C,

Le souci est que la valeur de S1 est une formule qui est égale à J2 , les données J2,J3,J4 etc sont les résultats d'une requête !

Si je saisis A, B ou C dans la cellule S1 cela fonctionne mais pas avec la formule !

Je joins le fichier (sans les requêtes mais un fichier test pour masquer les colonnes souhaitées)

Merci d'avance,

Cordialement,

6test.xlsm (15.31 Ko)

Bonjour,

S2 est une formule qui est égale à J2

Ta procédure événementielle doit donc concerner la cellule J2 :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$J$2" Then
        MsgBox "S2 a été modifiée"
    End If
End Sub

Bonjour Pijaku,

Même en remplaçant dans S1 par J2 dans le code évènementiel, cela ne fonctionne pas, car J2 n'est pas saisi !

La proposition que tu me donne ne me masquera pas les colonnes souhaitées,

Merci d'avance,

Cordialement,

J2 n'est pas saisi, mais J2 change...

As-tu essayé?

Bonjour,

Oui j'ai essayé sur mon fichier de travail et J2 étant le résultat d'une requête, cela ne fonctionne pas même s'il change de valeur (exemple si A devient C par exemple), sur le fichier test le fait de modifier manuellement J2 fait fonctionner le code événementiel modifié avec J2 au lieu de S1 !

Merci d'avance,

Cordialement,

Bonjour tout le monde,

Oui j'ai essayé sur mon fichier de travail et J2 étant le résultat d'une requête, cela ne fonctionne pas même s'il change de valeur (exemple si A devient C par exemple), sur le fichier test le fait de modifier manuellement J2 fait fonctionner le code événementiel modifié avec J2 au lieu de S1 !

De quelle manière est actualisée la requête qui atterrit en J2 ? C'est à ce niveau qu'il faut parvenir à déclencher la macro, le reste ne devrait pas poser problème.

PS : .Columns("L:L") désigne déjà une colonne entière, il n'y a donc pas d'intérêt à préciser ensuite .EntireColumn

Bonjour,

Le target est-il vraiment nécessaire ?

Juste un

If Range("J2")value ="A" then …...

Bonsoir ,

Pour Pedro la requête est simplement actualisé par la procédure worksheet activate sélection cellule a2 et actualisé requête ... elle apparaît en premier sur le code de la feuille ...

Pour xmempl , je ne sais pas si il est nécessaire, c'est en recherchant sur les forums que j'ai adapté le code fournit ... si pour mon cas il y plus simple je suis preneur ...

Merci pour votre aide,

Cordialement

Bonjour,

Pour moi sans target cela fonction inutile de se prendre la tête pour compliquer.

(si changement sur la feuille alors on vérifie contenu de S1 )

Sub Worksheet_SelectionChange(ByVal Target As Range)
         With Sheets(Feuil1.Name)

      If Range("S1").Value = "A" Then
      Columns("L:L").EntireColumn.Hidden = True
      Columns("M:M").EntireColumn.Hidden = False
      End If

      If Range("S1").Value = "B" Then
      Columns("L:L").EntireColumn.Hidden = True
      Columns("M:M").EntireColumn.Hidden = False
      End If

      If Range("S1").Value = "C" Then
      Columns("L:L").EntireColumn.Hidden = False
      Columns("M:M").EntireColumn.Hidden = True
      End If

      End With

End Sub
2test-s1.xlsm (15.36 Ko)

Bonjour Xmenpl,

J'ai mis le code sur mon fichier et cela fonctionne à un détail prés, il faut que sélectionne une cellule au hasard de la feuille 1 pour que l’affichage se fasse correctement,

Merci pour ton retour,

Cordialement,

Aprés réflexion lol j'ai juste ajouté

Range("A1").Select

Dans ma procédure Worksheet Activate et cela fonctionne,

Merci pour tout car je n'y serais pas arriver

Cordialement,

1test-s1.xlsm (15.10 Ko)

Bonjour tout le monde !

Petites modifications au niveau de la syntaxe, mais qui ne change rien au fonctionnement du code proposé par xmenpl :

Sub Worksheet_SelectionChange(ByVal Target As Range)

      Select Case Range("S1").Value 
            Case "A", "B" 
              Columns("L:L").Hidden = True
              Columns("M:M").Hidden = False
          Case "C"
              Columns("L:L").Hidden = False
              Columns("M:M").Hidden = True
            Case Else
              Columns("L:M").Hidden = False
      End Select
      Range("A1").Select

End Sub

Bonjour,

S'il y a du code, déjà, dans l'événement Activate de la feuille, pourquoi ne pas y ajouter ceci en fin de procédure :

      Select Case Range("S1").Value 
              Case "A", "B" 
                  Columns("L:L").Hidden = True
                  Columns("M:M").Hidden = False
            Case "C"
                  Columns("L:L").Hidden = False
                  Columns("M:M").Hidden = True
              Case Else
                  Columns("L:M").Hidden = False
      End Select

Aprés réflexion lol j'ai juste ajouté

Range("A1").Select

Merci pour tout car je n'y serais pas arriver

Cordialement,

Merci à tous pour vos retours,

Tous vos codes fonctionnent nickel, je vais en retenir qu’un mais je garde les différentes versions pour plus tard en cas de besoin,

J'aurais un autre sujet dans peu de temps qui nécessite une macro VBA, je vais déjà faire des recherches sur les forums pour voir ce que je peux en tirer ! Il s'agira de filtre sur un tableau et d'enregistrements des différents cas en PDF !

Merci pour tout,

Cordialement,

Bonjour tout le monde !

Petites modifications au niveau de la syntaxe, mais qui ne change rien au fonctionnement du code proposé par xmenpl :

Je dois reconnaître que pour la plus part des lignes j'ai pas cherché à simplifier ; j'ai juste fais des copiés collé des lignes

existantes du fichier d'origine.

Rechercher des sujets similaires à "code evenementiel vba"