Aide en VBA

Bonjour à tous,

Je suis débutante en VBA et malgré mes recherches sur google je n'arrive pas à trouver ce que je cherche. J'espère que vous pourrez m'aider.

Voici ce que je cherche à faire :

Je voudrais que:

Si la colonne H21 contient le caractère "X" les lignes A79 à L137 soient affichées et les lignes A138 à L215 masquées.

Si la colonne H21 contient le caractère "O" tout s'annule (tous les éléments de la feuille Excel doivent être affichés)

Avec mes recherches j'ai essayé de construire quelque chose mais ça n'aboutit à rien et ça m'affiche des messages d'erreur:

1ère tentative:

If Instru (Cells(H,21), "X") > 0 then

Je ne sais pas comment exprimer la suite

2ème tentative:

Sub macro_test()

If Range("H21") = "X" Then

Display Range([A79:L137 ])

If False Then Rows("A79:L137").EntireRow.Hidden = False

End If

Merci beaucoup

Bonjour,

Je te suggère de joindre ton fichier ...

Cela facilitera grandement l'écriture de la macro dont tu as besoin ...

Bonjour,

Je te suggère de joindre ton fichier ...

Cela facilitera grandement l'écriture de la macro dont tu as besoin ...

Oui en effet.

Voici le fichier en question: il est vide mais c'est volontaire (entreprise)

Merci pour ton aide

10doc.xlsx (25.04 Ko)

Re,

Merci pour ton fichier ...

Si j'ai bien compris ... la cellule H21 est celle dirige le jeu ...

En espèrant que cela t'aide ..

9test-tressyr.xlsm (30.81 Ko)

Ça fonctionne et c'est ce qu'il me fallait.

En fait, concernant la cellule H21 lorsqu'elle contient un X (elle apparaît comme cochée) et le but c'est que lorsque cette colonne est cochée, qu'elle permette de faire apparaître une annexe à remplir.

Merci beaucoup pour ta réactivité !

J'aimerai bien comprendre le code VBA si cela ne te dérange pas de m'expliquer l'équivalent en français du code que tu as écrit ça serait vraiment sympa

Private Sub Worksheet_Change(ByVal Target As Range) =

If Target.CountLarge > 1 Then Exit Sub =

If Target.Address <> "$H$21" Then Exit Sub =

If LCase(Target.Value) = "x" Then =

Rows("138:215").EntireRow.Hidden = True = Masquer les cellules ?

Else

Rows("138:215").EntireRow.Hidden = False = Afficher les cellues ?

End If

End Sub = ça veut dire quoi Sub ?

Re,

Content que cela t'aide ...

Merci pour tes remerciements ....

Ci-dessous les commentaires explicatifs en vert ...

Private Sub Worksheet_Change(ByVal Target As Range) 
' Macro évènement qui se déclenche dès qu'il y a un changement
' Si l'utilisateur choisit une grande plage ... alors quitter la macro
If Target.CountLarge > 1 Then Exit Sub
' Si l'utilisateur choisit une celluel différente de H21... alors quitter la macro
If Target.Address <> "$H$21" Then Exit Sub
'Si la cellule modifiée est égale à x Alors
If LCase(Target.Value) = "x" Then
' Masquer les Lignes 138 à 215
Rows("138:215").EntireRow.Hidden = True
' Sinon
Else
' Afficher les Lignes 138 à 215
Rows("138:215").EntireRow.Hidden = False
' Fin du Bloc Si
End If
' Fin de la macro
End Sub 

En espèrant que cela t'aide ....

Re,

Content que cela t'aide ...

Merci pour tes remerciements ....

Ci-dessous les commentaires explicatifs en vert ...

Private Sub Worksheet_Change(ByVal Target As Range) 
' Macro évènement qui se déclenche dès qu'il y a un changement
' Si l'utilisateur choisit une grande plage ... alors quitter la macro
If Target.CountLarge > 1 Then Exit Sub
' Si l'utilisateur choisit une celluel différente de H21... alors quitter la macro
If Target.Address <> "$H$21" Then Exit Sub
'Si la cellule modifiée est égale à x Alors
If LCase(Target.Value) = "x" Then
' Masquer les Lignes 138 à 215
Rows("138:215").EntireRow.Hidden = True
' Sinon
Else
' Afficher les Lignes 138 à 215
Rows("138:215").EntireRow.Hidden = False
' Fin du Bloc Si
End If
' Fin de la macro
End Sub 

En espèrant que cela t'aide ....

Merci vraiment !

Je vais me copier ça quelque part pour le garder sous la main. C'est très gentil de ta part !!

Par contre j'ai encore une question

J'ai besoin de cette action pour 3 autres cases, est-ce que si je recopie la macro 3 fois en changeant le numéro des lignes et la cellule de de référence ça fonctionnera ou c'est plus compliqué que ça ?

Par exemple : pour la cellule D20 afficher les colonnes 138 à 169 et masquer les lignes 170 à 215 ET les lignes 79 à 138 ?

Re,

Content que cela t'aide ...

Quelles sont les trois autres cellules ( au fait dans Excel ... tu ne trouveras jamais de 'cases' ....uniquement des cellules ) pour lesquelles tu aurais besoin du même comportement ... et quelles sont ... dans chacun des cas ... les lignes à masquer ... ???

Re,

Content que cela t'aide ...

Quelles sont les trois autres cellules ( au fait dans Excel ... tu ne trouveras jamais de 'cases' ....uniquement des cellules ) pour lesquelles tu aurais besoin du même comportement ... et quelles sont ... dans chacun des cas ... les lignes à masquer ... ???

Oui, pardon erreur de vocabulaire en effet on parle de cellules

Voici la listes des comportements (il y en a 5 au total dont celui que tu as déjà réalisé)

2) Si la cellule D20 contient "X" afficher les lignes A138 à L169

Si la cellule D20 contient "o" masquer les lignes A79 à L137 et A170 à L215

3) Si la cellule A18 contient "X" afficher les lignes A170 à L190

Si la cellule a18 contient "o" masquer les lignes A79 à L169 et A191 à L215

4) les même lignes à afficher et à masquer que pour 3) mais pour la celulle A19

5) Si la cellule D19 contient "X" afficher les lignes A191 à L215

Si la cellule D19 contient "o" masquer les lignes A79 à L190

Voila merci

Re,

Si cela ne te dérange pas trop de bien vouloir ta liste des cellules cibles :

A18 A19 D19 D20 H21

Je me permets de redemander ... car cette disposition est ... inhabituelle ...

Re,

Ci-dessous ta macro ... avec tes Cinq conditions ....

Private Sub Worksheet_Change(ByVal Target As Range)
' Commentaires en Vert - Explications des instructions
' Macro évènement qui se déclenche dès qu'il y a un changement
' Si l'utilisateur choisit une grande plage ... alors quitter la macro
If Target.CountLarge > 1 Then Exit Sub
' Si l'utilisateur choisit une cellule différente des cellules cibles... alors quitter la macro
If Intersect(Target, Range("A18,A19,D19,D20,H21")) Is Nothing Then Exit Sub

    Select Case Target.Address

    Case "$A$18", "$A$19"
      'Si la cellule modifiée est égale à x Alors
      If LCase(Target.Value) = "x" Then
        ' Afficher les Lignes 138 à 169
        Rows("138:168").EntireRow.Hidden = False
      ' Sinon
      Else
        ' Masquer les Lignes 79  à 169
        ' Masquer les Lignes 191 à 215
        Rows("79:169").EntireRow.Hidden = True
        Rows("191:215").EntireRow.Hidden = True
      ' Fin du Bloc Si
      End If

    Case "$D$19"
      'Si la cellule modifiée est égale à x Alors
      If LCase(Target.Value) = "x" Then
        ' Afficher les Lignes 191 à 215
        Rows("191:215").EntireRow.Hidden = False
      ' Sinon
      Else
        ' Masquer les Lignes 79  à 190
        Rows("79:190").EntireRow.Hidden = True
      ' Fin du Bloc Si
      End If

     Case "$D$20"
      'Si la cellule modifiée est égale à x Alors
      If LCase(Target.Value) = "x" Then
        ' Afficher les Lignes 138 à 169
        Rows("138:169").EntireRow.Hidden = False
      ' Sinon
      Else
        ' Masquer les Lignes 79  à 137
        ' Masquer les Lignes 170 à 215
        Rows("79:137").EntireRow.Hidden = True
        Rows("170:215").EntireRow.Hidden = True
      ' Fin du Bloc Si
      End If

    Case "$H$21"
      'Si la cellule modifiée est égale à x Alors
      If LCase(Target.Value) = "x" Then
        ' Masquer les Lignes 138 à 215
        Rows("138:215").EntireRow.Hidden = True
      ' Sinon
      Else
        ' Afficher les Lignes 138 à 215
        Rows("138:215").EntireRow.Hidden = False
      ' Fin du Bloc Si
      End If

    End Select
' Fin de la macro
End Sub

En espèrant que cela t'aide ...

Re,

Ci-dessous ta macro ... avec tes Cinq conditions ....

Private Sub Worksheet_Change(ByVal Target As Range)
' Commentaires en Vert - Explications des instructions
' Macro évènement qui se déclenche dès qu'il y a un changement
' Si l'utilisateur choisit une grande plage ... alors quitter la macro
If Target.CountLarge > 1 Then Exit Sub
' Si l'utilisateur choisit une cellule différente des cellules cibles... alors quitter la macro
If Intersect(Target, Range("A18,A19,D19,D20,H21")) Is Nothing Then Exit Sub

    Select Case Target.Address

    Case "$A$18", "$A$19"
      'Si la cellule modifiée est égale à x Alors
      If LCase(Target.Value) = "x" Then
        ' Afficher les Lignes 138 à 169
        Rows("138:168").EntireRow.Hidden = False
      ' Sinon
      Else
        ' Masquer les Lignes 79  à 169
        ' Masquer les Lignes 191 à 215
        Rows("79:169").EntireRow.Hidden = True
        Rows("191:215").EntireRow.Hidden = True
      ' Fin du Bloc Si
      End If

    Case "$D$19"
      'Si la cellule modifiée est égale à x Alors
      If LCase(Target.Value) = "x" Then
        ' Afficher les Lignes 191 à 215
        Rows("191:215").EntireRow.Hidden = False
      ' Sinon
      Else
        ' Masquer les Lignes 79  à 190
        Rows("79:190").EntireRow.Hidden = True
      ' Fin du Bloc Si
      End If

     Case "$D$20"
      'Si la cellule modifiée est égale à x Alors
      If LCase(Target.Value) = "x" Then
        ' Afficher les Lignes 138 à 169
        Rows("138:169").EntireRow.Hidden = False
      ' Sinon
      Else
        ' Masquer les Lignes 79  à 137
        ' Masquer les Lignes 170 à 215
        Rows("79:137").EntireRow.Hidden = True
        Rows("170:215").EntireRow.Hidden = True
      ' Fin du Bloc Si
      End If

    Case "$H$21"
      'Si la cellule modifiée est égale à x Alors
      If LCase(Target.Value) = "x" Then
        ' Masquer les Lignes 138 à 215
        Rows("138:215").EntireRow.Hidden = True
      ' Sinon
      Else
        ' Afficher les Lignes 138 à 215
        Rows("138:215").EntireRow.Hidden = False
      ' Fin du Bloc Si
      End If

    End Select
' Fin de la macro
End Sub

En espèrant que cela t'aide ...

Pardon de la réponse tardive.

Je ne pourrai que tester la semaine prochaine étant en dehors du bureau mais c'est bon pour moi

J'ai vu que tu as mis des explications en vert... franchement c'est tellement gentil merci ! Grace à toi je ressortirai avec quelques connaissances en plus

Mille mercis pour ton temps et ton aide.

Bonne soirée 😊

Re,

Merci ... pour ton GIGANTESQUE MERCI ...

Je vais rougir comme le smiley ....

Re,

Merci ... pour ton GIGANTESQUE MERCI ...

Je vais rougir comme le smiley ....

Bonjour James

Je suis de retour au travail et je pense que je ne maîtrise vraiment pas les macros car après de multiples essais ça ne fonctionne toujours pas.

La macro fonctionne correctement uniquement pour la colonne H21 (en jaune que tu avais faite) lorsque "x" est sélectionné l'action s'exécute et lorsque x n'est pas sélectionné tout s'annule (toutes les colonnes sont affichées).

Peut-être s'agit-il d'une erreur de recopie de ma part ? Je n'arrive vraiment pas à comprendre ce qui cloche.

Peux-tu me venir en aide ? Ci-dessous le fichier en pièce jointe

Bonjour,

En regardant à nouveau les règles tu as fixées ... la macro fonctionne ...

Par contre, il me semble qu'il faudrait que tu fixes une Norme identique aux cinq cas ...

Est-ce que le marquage avec un X ... doit afficher ou cacher les lignes ... ???

Bonjour,

En regardant à nouveau les règles tu as fixées ... la macro fonctionne ...

Par contre, il me semble qu'il faudrait que tu fixes une Norme identique aux cinq cas ...

Est-ce que le marquage avec un X ... doit afficher ou cacher les lignes ... ???

Bonjour,

Le marquage avec un X doit afficher certaines lignes et en cacher d'autres. Lorsque le X n'est pas cochée toutes les lignes doivent s'afficher.

Ça ne fonctionne pas car ça n'affiche pas les lignes/ ne masque pas les lignes qu'il faut.

Si je sélectionne H21 et que je coche un X j'obtiens un résultat, si je décoche et que je coche D20 avec un X il y a un bug ça ne donne jamais le même résultat au final.

Je ne sais pas du tout comment corriger ça, mais ça ne donne pas le résultat voulu.

Il faut savoir que les appendix (annexes) doivent toujours s'afficher sauf pour les cellules A18, A19, D19, D20, H21.

Cela est censé faciliter le remplissage du document par l'utilisateur et faire en sorte qu'il ne perde pas de temps à remplir l'intégralité du document alors que cela n'est pas nécessaire: si il coche la cellule A18, une seule annexe s'affiche et est à remplir par exemple.

Je ne sais pas si tu pourras m'aider plus que tu ne l'as déjà fait ou si je suis assez claire dans mon explication.

Je te remercie pour ton aide jusqu'ici, si tu peux m'aider d'avantage je suis preneuse.

Hello Tracy,

Je t'ai ajouté encore plus de commentaires ... pour que tu aies ton autonomie ...

Cela devrait à la fois te permettre de comprendre ce que chaque instruction fait ...

et, par la suite, tu pourras également modifier la macro à ta guise ...

En espérant que cela t'aide ...

Hello Tracy,

Je t'ai ajouté encore plus de commentaires ... pour que tu aies ton autonomie ...

Cela devrait à la fois te permettre de comprendre ce que chaque instruction fait ...

et, par la suite, tu pourras également modifier la macro à ta guise ...

En espérant que cela t'aide ...

Super !! C'est parfait

Encore une fois merci infiniment pour ton aide, ton temps, et tes commentaires c'est vraiment très clair.

Super !! C'est parfait

Encore une fois merci infiniment pour ton aide, ton temps, et tes commentaires c'est vraiment très clair.

Content que cela puisse t'aider ...

Merci ... pour tes remerciements ...

Rechercher des sujets similaires à "aide vba"