Problème: Masquer ligne selon le choix de la liste

olivedelaporte

XLDnaute Nouveau
Bonjour à tous,

Je me présente Olivier. Je ne sais pas si je poste au bon endroit :(.

Utilisateur très très débutant sur excel, j'aimerai faire un petit tableau dynamique.

Je m'explique; j'aimerai faire une liste déroulante et lorsque je choisis quelque chose dedans, ça me masque des lignes voulues.

Je ne sais pas si c'est simple vu qu'en code je ne connais rien...

Aussi je voulais savoir si il était possible de fixer une date, une cellule est sélectionnée et la date est fixée tant que l'on dé-sélectionne pas...

J'espère que vous pourrez m'aider.

Voici le fichier comme exemple:

302 Found

Cordialement.

Olivier
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème: Masquer ligne selon le choix de la liste

Bonjour Olive et bienvenu, bonjour le forum,

Heu... Bien le fichier exemple pour expliquer ton problème sauf que là il n'explique rien...
Quel rapport entre Alpha, Beta, Gamma et Premier, Deuxième, Troisième, Quatrième. Aucune date dans ton fichier ?
Tu as le nez dedans donc pour toi c'est certainement évident mais je t'assure que c'est pas clair du tout. Tu devrais faire un onglet Avant et un autre qui montre Après le traitement par la macro...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème: Masquer ligne selon le choix de la liste

Bonjour Olive, bonjour le forum,

En pièce jointe ton fichier modifié (j'ai supprimé les cellules fusionnées plus difficile à gérer avec VBA) avec le code ci-dessous :
Code:
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans une cellule
Dim pl As Range 'déclare la varialbe PL (PLage)

If Target.Cells.Count > 1 Then Exit Sub 'si la modification agit sur plus d'une unique cellule, sort de la procédure
If Target.Address = "$C$1" Then 'condition 1 : si le changement a lieu dans la cellule C1
    Select Case Target.Cells(1).Value 'agit en fonction de la valeur de C1
        Case "Plastique" 'cas "Plastique"
            Cells.EntireRow.Hidden = False 'affiche toutes les lignes de l'onglet
            Set pl = Application.Union(Range("A4:A6"), Range("A8")) 'définit la plage PL
            pl.EntireRow.Hidden = True 'masques les lignes de la plage PL
        Case "métal" 'cas "métal"
            Cells.EntireRow.Hidden = False 'affiche toutes les lignes de l'onglet
            Set pl = Application.Union(Range("A3"), Range("A5"), Range("A7:A8")) 'définit la plage PL
            pl.EntireRow.Hidden = True 'masques les lignes de la plage PL
        Case "caoutchouc" 'cas "caoutchouc"
            Cells.EntireRow.Hidden = False 'affiche toutes les lignes de l'onglet
            Set pl = Application.Union(Range("A3:A4"), Range("A6:A7")) 'définit la plage PL
            pl.EntireRow.Hidden = True 'masques les lignes de la plage PL
        Case Else 'tout autre cas
            Cells.EntireRow.Hidden = False 'affiche toutes les lignes de l'onglet
    End Select 'fin de l'action en fonction de...
End If 'fin de la condition 1
If Not Application.Intersect(Range("B3:B8"), Target) Is Nothing Then 'condition 2 : si le changement a lieu dans la plage "B3:B8"
    If UCase(Target.Value) = "X" Then 'condition 3 : si la cellule contient "x" ou "X"
        Range("C3:C8").ClearContents 'efface la plage B3:C8
        Target.Offset(0, 1).Value = Format(Date, "dd/mm/yyyy") 'renvoie la date dans la cellule colonne C
    Else 'sinon
        Target.Offset(0, 1).Value = "" 'efface le contenue de la cellule en colonne C
    End If 'fin de la condition 3
End If 'fin de la condition 2
End Sub

Tu te débrouilleras à adapter car je ne pense pas que ce soit le fichier complet...
le fichier :
 

Pièces jointes

  • Olive_v01.xlsm
    15.4 KB · Affichages: 18

olivedelaporte

XLDnaute Nouveau
Re : Problème: Masquer ligne selon le choix de la liste

Nickel j'ai pu adapter ton code à ma convenance :D.

Par contre une question, quand je mets un "x" dans la cellule "validation" la date apparait pas de soucis, mais si je mets un "x" dans la cellule du dessous il n'y rien qui se mets dans la cellule à sa droite?

Est ce que c'est compliqué à faire ou à modifier?

Merci bien.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème: Masquer ligne selon le choix de la liste

quand je mets un "x" dans la cellule "validation" la date apparait pas de soucis, mais si je mets un "x" dans la cellule du dessous il n'y rien qui se mets dans la cellule à sa droite?

Qu'appelles-tu la cellule du dessous ? Le code marche uniquement pour pour la plage B3:B8. Si tu veux modifier il te faut adapter la ligne de code :
Code:
If Not Application.Intersect(Range("B3:B8"), Target) Is Nothing Then 'condition 2 : si le changement a lieu dans la plage "B3:B8"
Soit en dur : en remplaçant Range("B3:B8") par Range("B3:B15") par exemple
Soit dynamiquement en remplaçant Range("B3:B8") par Range("B3:B" & Cells(Application.Rows.Count, 1).End(xlUp).Row). Elle va aller de B3 à la dernière ligne éditée de la colonne 1 (=A), soit B....
 

olivedelaporte

XLDnaute Nouveau
Re : Problème: Masquer ligne selon le choix de la liste

Une image vaut mieux qu'une explication:
capture 1.png

Lorsque je mets un "X dans la validation "Volume" la date se mets, et lorsque je mets dans MEP/MAJ la date se décale en bas au lieu de se créer.

Tu vois ce que je veux dire?
 

Pièces jointes

  • capture 1.png
    capture 1.png
    2 KB · Affichages: 32
  • capture 1.png
    capture 1.png
    2 KB · Affichages: 31

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème: Masquer ligne selon le choix de la liste

Bonjour Olive, bonjour le forum,

Oui ça je le sais puisque c'est ce que j'ai demandé au code de faire...
Le problème c'est que visiblement je n'ai pas compris ce que tu voulais toi ! Pourrais-tu me faire un petit exemple Avant, Après ? Ça m'aiderait à mieux comprendre ce que tu désires et à te proposer une solution...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème: Masquer ligne selon le choix de la liste

Bonjour Olive, bonjour le forum,

Là j'ai enfin compris ! En revanche, ce que je ne comprends pas c'est que tu n'aies pas pu modifier toi même tellement c'était simple. Ça sert à quoi que je me fatigue à commenter le code si tu ne le lis même pas pour essayer de comprendre ?
Le code modifié :
Code:
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans une cellule
Dim pl As Range 'déclare la varialbe PL (PLage)

If Target.Cells.Count > 1 Then Exit Sub 'si la modification agit sur plus d'une unique cellule, sort de la procédure
If Target.Address = "$C$1" Then 'condition 1 : si le changement a lieu dans la cellule C1
    Select Case Target.Cells(1).Value 'agit en fonction de la valeur de C1
        Case "Bague" 'cas "Bague"
            Cells.EntireRow.Hidden = False 'affiche toutes les lignes de l'onglet
            Set pl = Application.Union(Range("A4:A6"), Range("A8")) 'définit la plage PL
            pl.EntireRow.Hidden = True 'masques les lignes de la plage PL
        Case "métal" 'cas "métal"
            Cells.EntireRow.Hidden = False 'affiche toutes les lignes de l'onglet
            Set pl = Application.Union(Range("A3"), Range("A5"), Range("A7:A8")) 'définit la plage PL
            pl.EntireRow.Hidden = True 'masques les lignes de la plage PL
        Case "caoutchouc" 'cas "caoutchouc"
            Cells.EntireRow.Hidden = False 'affiche toutes les lignes de l'onglet
            Set pl = Application.Union(Range("A3:A4"), Range("A6:A7")) 'définit la plage PL
            pl.EntireRow.Hidden = True 'masques les lignes de la plage PL
        Case Else 'tout autre cas
            Cells.EntireRow.Hidden = False 'affiche toutes les lignes de l'onglet
    End Select 'fin de l'action en fonction de...
End If 'fin de la condition 1
If Not Application.Intersect(Range("B3:B8"), Target) Is Nothing Then 'condition 2 : si le changement a lieu dans la plage "B3:B8"
    If UCase(Target.Value) = "X" Then 'condition 3 : si la cellule contient "x" ou "X"
        Target.Offset(0, 1).Value = Format(Date, "dd/mm/yyyy") 'renvoie la date dans la cellule colonne C
    Else 'sinon
        Target.Offset(0, 1).Value = "" 'efface le contenue de la cellule en colonne C
    End If 'fin de la condition 3
End If 'fin de la condition 2
End Sub
 

Discussions similaires

Réponses
7
Affichages
487

Statistiques des forums

Discussions
312 199
Messages
2 086 159
Membres
103 147
dernier inscrit
tubaman