Masquer / afficher des lignes en fonction d'une cellule

bonjour à tous,

je reviens vers vous pour avoir de l 'aide pour réaliser quelque chose que je n'arrive pas à faire.

Je souhaiterai que si la cellule I35 de la feuille "DONNEES" n'est pas renseignée, alors il faudrait cacher la ligne 50 de la feuille CPP TITULAIRE-ST (idem pour la cellule G57, qui si elle n'est pas renseignée, doit cacher la ligne 51)

J'ai trouvé des codes sur le forum sans savoir les mettre en œuvre à mon cas.

Merci d'avance pour votre aide.

Bonjour,

Un essai ...

Pour la feuille "DONNEES" ... le code ...

Private Sub Worksheet_Change(ByVal Target As Range)

   If Not Intersect(Target, Range("i35, G57")) Is Nothing Then
      If Range("i35") = "" Then
         Worksheets("CPP TITULAIRE-ST").Rows(50 & ":" & 50).Hidden = True
      Else
         Worksheets("CPP TITULAIRE-ST").Rows(50 & ":" & 50).Hidden = False
      End If

      If Range("G57") = "" Then
         Worksheets("CPP TITULAIRE-ST").Rows(51 & ":" & 51).Hidden = True
      Else
         Worksheets("CPP TITULAIRE-ST").Rows(51 & ":" & 51).Hidden = False
      End If
   End If
End Sub

ric

Bonjour dav86, ric,

je te retourne ton fichier modifié :

ATTENTION !

* pour « si la cellule est renseignée » : quand tu saisis une donnée en I35 ou en G57 : c'est OK

* pour « si la cellule n'est pas renseignée » : quand tu effaces la donnée en I35 ou en G57 :

a) si tu utilises la touche Suppression, ça marche pas, car l'événement « modification de cellule »

ne se déclenche pas ! (si quelqu'un a une solution pour ça, j'suis fortement preneur !)

b) pour que ça marche : appuie sur la touche F2 ; sélectionne toute la donnée ; appuie sur

la touche Suppression, puis sur la touche Entrée


Alt F11 pour voir le code VBA de la feuille "DONNEES", puis revenir sur Excel

merci de me donner ton avis.

dhany

Bonjour,

A mettre dans le module de la feuille "DONNEES" :

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address(0, 0) <> "I35" And Target.Address(0, 0) <> "G57" Then Exit Sub

    Worksheets("CPP TITULAIRE-ST").Rows(50).Hidden = Range("I35").Value = ""
    Worksheets("CPP TITULAIRE-ST").Rows(51).Hidden = Range("G57").Value = ""

End Sub

Bonjour à tous,

merci Theze, Ric et Dhany pour votre aide. Les codes fonctionnent.

celui de Ric a l'avantage, me semble t-il, de masquer ou afficher même si on supprime la valeur dans la cellule de départ.

Merci beaucoup pour votre aide

merci pour ton retour ! bonne continuation !

dhany

ric

j'ai appliqué le code de Ric aux autres cellules concernées et ça marche parfaitement.

dans mon élan je me suis dit je fais faire pareil pour mes feuilles à cacher si il y a ou non présence d'un co-traitant avec le code

If Target = "" Then
            Feuil3.Visible = xlSheetHiden
            Feuil7.Visible = xlSheetHiden
            Feuil8.Visible = xlSheetHiden
        Else
            Feuil3.Visible = xlSheetVisible
            Feuil7.Visible = xlSheetVisible
            Feuil8.Visible = xlSheetVisible
        End If

Si la case C6 est rempli (un cotraitant) alors j'affiche les feuilles correspondantes. ça marche quand je renseigne un nom mais quand je supprime le nom du cotraitant en case 6 j'ai une erreur de type 13 (incompatibilité de type).

J'ai remplacé le target par Range comme ceci mais ça ne marche plus

 If Range("C6") = "" Then
            Feuil3.Visible = xlSheetHiden
            Feuil7.Visible = xlSheetHiden
            Feuil8.Visible = xlSheetHiden
        Else
            Feuil3.Visible = xlSheetVisible
            Feuil7.Visible = xlSheetVisible
            Feuil8.Visible = xlSheetVisible
        End If

Il y a sans doute quelque chose que je ne fais pas correctement

edit je me réponds à moi même ça fonctionne je devais pas être bien réveillé !

alors un café ?

dhany

même avec un café j'ai encore un souci.

dans la cellule C12 j'ai une liste déroulante REVISION / ACTUALISATION.

Si je mets REVISION (feuille DONNEES) je veux afficher les lignes 35 et 43 mais aussi afficher l'onglet 10 et cacher le 9

si je mets ACTUALISATION en C13 je veux afficher les lignes 35 et 43 mais aussi afficher l'onglet 9 et cacher le 10

Enfin si je ne sélectionne rien sur C12 je veux cacher les lignes 35-36-44 et masquer les onglets 9 et 10.

Sur la lancée de ce que RIC a écrit, j'ai continué de cette manière

  If Range("C12") = "REVISION" Then

        Worksheets("CPP TITULAIRE-ST").Rows(35 & ":" & 35).Hidden = False
        Worksheets("CPP TITULAIRE-ST").Rows(43 & ":" & 43).Hidden = False
        Feuil10.Visible = xlSheetVisible
        Feuil9.Visible = xlSheetHidden

        ElseIf Range("C12") = "ACTUALISATION" Then

        Worksheets("CPP TITULAIRE-ST").Rows(35 & ":" & 35).Hidden = False
        Worksheets("CPP TITULAIRE-ST").Rows(43 & ":" & 43).Hidden = False
        Feuil9.Visible = xlSheetVisible
        Feuil10.Visible = xlSheetHidden

        Else

        Worksheets("CPP TITULAIRE-ST").Rows(35 & ":" & 35).Hidden = True
        Worksheets("CPP TITULAIRE-ST").Rows(43 & ":" & 43).Hidden = True
        Feuil10.Visible = xlSheetHidden
        Feuil9.Visible = xlSheetHidden

      End If

mais je pense que je ne combine pas coorectement les IF par rapport à mes hypothèses.

@dav86

j'suis fatigué, et j'vais bientôt arrêter, alors je laisse ric te répondre.

dhany

Dhany. J'ai fini par trouver et ça fonctionne.

merci !!

J'abuse encore de votre temps et de vos conseils.

j'ai donc réussi à faire quelques petites choses mais je n'arrive pas à masquer des cellules (ou masquer un onglet) en fonction d'une cellule dans laquelle s'opère un calcul mais je n'arrive pas à combiner les IF AND OR.

J'aimerais que

si C6 (feuille DONNES) est renseigné et

que C11 (feuilles DONNEES))contient "OUI" et

que la somme de la plage E48 : F48 (Feuille DONNES) >= 25 000 ou

que la somme de la plage E70 : F70 (Feuille DONNES) >= 25 000 ou

que la somme de la plage E92 : F92 (Feuille DONNES) >= 25 000 alors

j'affiche les feuilles 3 / 7 et 8

et sinon si C6 (Feuille DONNES) est renseignée et

que C11(Feuille DONNES) contient autre chose que "OUI" alors

j'affiche la feuille 7

sinon je masque les feuilles 3/7/8.

De même je n'arrive pas à afficher masquer les lignes 56 à 66 de la feuille DONNEES en fonction de la valeur de la cellule F19. si cette cellule est supérieur à 0 alors il faut afficher les lignes 56 à 66 sinon il faut les cacher. Je suppose que ça vient du fait qu'il s'agit d'une valeur numérique mais je n'ai pas trouvé comment m'en sortir.

Merci d'avance pour vos retours

Bonjour à tous,

Ça semble terriblement difficile à suivre > je vais prendre une pause et cogiter sur la chose.

ric

Bonsoir à tous,

j'ai avancé dans mon projet et j'ai repris la macro de Ric pour y ajouter ce que je voulais.

J'ai essayé de rédiger la macro en allant dans le sens de défilement de la lecture de la feuille (de haut en bas).

A ce stade, je bloque sur un dernier point sur lequel je souhaite votre avis.

Si G19 est différent de "FAUX" dans la première feuille, je veux afficher les lignes 56 à 76 de la première feuille.

J'ai donc noté :

If Range("G19") = "FAUX" Then
    Worksheets("DONNEES").Rows(56 & ":" & 76).Hidden = True
    Worksheets("CPP TITULAIRE-ST").Rows(29 & ":" & 29).Hidden = True
    Worksheets("CPP TITULAIRE-ST").Rows(39 & ":" & 39).Hidden = True
    Worksheets("CPP CO-TRAITANT-ST").Rows(29 & ":" & 29).Hidden = True
    Worksheets("CPP CO-TRAITANT-ST").Rows(39 & ":" & 39).Hidden = True
    Else
    Worksheets("DONNEES").Rows(56 & ":" & 76).Hidden = False
    Worksheets("CPP TITULAIRE-ST").Rows(29 & ":" & 29).Hidden = False
    Worksheets("CPP TITULAIRE-ST").Rows(39 & ":" & 39).Hidden = False
    Worksheets("CPP CO-TRAITANT-ST").Rows(29 & ":" & 29).Hidden = False
    Worksheets("CPP CO-TRAITANT-ST").Rows(39 & ":" & 39).Hidden = False

    End If

Mais cela ne marche pas.

Plus étonnant (pour moi !) une fois cette partie de code insérée dans la macro, cela affiche les lignes 56 et 76 alors même que G19 = FAUX alors que jusque là pas de souci, je peux afficher ou masquer les lignes sans souci.

Je ne sais pas si je suis très clair

Merci d'avance pour vos lumières.

Bonjour,

En tout premier, ce n'est pas G19 qu'il te faut viser dans Intersect() car elle contient une formule et de ce fait, la procédure événementielle n'est pas appelée par le changement dans G19 (sinon utiliser la procédure événementielle "Calculate()") mais dans la cellule dont dépend la formule à savoir F19 donc, remplacer G19 par F19 puis, la valeur à utiliser dans le code est False et non "Faux" :

If Range("G19") = False Then

    Worksheets("DONNEES").Rows(56 & ":" & 76).Hidden = True
    Worksheets("CPP TITULAIRE-ST").Rows(29 & ":" & 29).Hidden = True
    Worksheets("CPP TITULAIRE-ST").Rows(39 & ":" & 39).Hidden = True
    Worksheets("CPP CO-TRAITANT-ST").Rows(29 & ":" & 29).Hidden = True
    Worksheets("CPP CO-TRAITANT-ST").Rows(39 & ":" & 39).Hidden = True

Else

    Worksheets("DONNEES").Rows(56 & ":" & 76).Hidden = False
    Worksheets("CPP TITULAIRE-ST").Rows(29 & ":" & 29).Hidden = False
    Worksheets("CPP TITULAIRE-ST").Rows(39 & ":" & 39).Hidden = False
    Worksheets("CPP CO-TRAITANT-ST").Rows(29 & ":" & 29).Hidden = False
    Worksheets("CPP CO-TRAITANT-ST").Rows(39 & ":" & 39).Hidden = False

End If

Bonjour Theze,

merci pour ce retour.

Si je résume ce que je pense avoir compris

False pour "FAUX", effectivement je pensais que c'était une valeur texte.

L’Élément "Change" ne fonctionne pas, à lui seul, pour une cellule contenant une formule de calcul donc viser G19 est inutile en haut de la macro.

J'ai donc remplacé G19 par F19 dans la déclaration "if not intersect"

If Not Intersect(Target, (Range "F19")) Is Nothing Then

ou bien je n'ai pas compris ce que tu expliquais ?

En faisant cette modification et en ajoutant le code que tu as mis ton message, cela ne fonctionne pas. Il y a quelque chose que je ne fais pas correctement...

Est ce que je dois ajouter une instruction "Calculate" ?

Oups, désolé c'est E19 (et non F19) dont dépend F19 qui va modifier la valeur de G19 !

Merci beaucoup Theze.

Maintenant que tu le dis, effectivement c'est plutôt logique J'ai été cherché quelque chose que j'avais sous le nez

Rechercher des sujets similaires à "masquer afficher lignes fonction"