Userform masquer/afficher
Bonjour à tous,
J'essaye de réaliser un bouton affichant un userform afin de masquer ou d'afficher les colonnes/lignes avec des cases à cocher.
J'ai trouvé un code sur un forum mais je ne le comprends pas assez pour pouvoir l'appliquer à mes attentes. (PJ: Code_trouvé)
Je souhaite masquer de 2 façons: (PJ: Excel_extrait)
- afficher que la ligne jaune et orange et masquer les lignes blanches (souhait 1)
- Choisir le(s) site(s) souhaité(s) et afficher les lignes blanches. (souhait 2)
Je vous remercie par avance de votre aide!
Cordialement,
Bonjour Cyril, bonjour le forum,
Plutôt que des cases à cocher, je te propose une ListBox (MutilSelect). Clique sur le bouton Masquer.
Le code :
Private O As Worksheet 'déclare la variable O (Onglet)
Private DL As Integer 'déclare la variable DL (Dernière Ligne)
Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim I As Integer 'déclare la variable I (Incrément)
Dim LJ As Integer 'déclare la variable LJ (Ligne Jaune)
Set O = Worksheets("Original") 'définit l'onglet O (à adapter à ton cas)
DL = O.Range("A" & Application.Rows.Count).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet O
With Me.ListBox1 'prend en compte la ListBox1
.ColumnCount = 3 'définit le nombre de colonnes
.ColumnWidths = "0;0" 'masque les deux premières colonnes
For I = 4 To DL - 1 'boucle des lignes 4 a DL - 1
If O.Cells(I, 1).Interior.ColorIndex = 6 Then LJ = I 'si la la cellule ligne I, colonne A est colorée de jaune, définit la ligne jaune LJ
If O.Cells(I, 1).Interior.ColorIndex = 45 Then 'si la la cellule ligne I, colonne A est colorée d'orange
.AddItem 'ajoute un élément à la listBox1
.Column(0, .ListCount - 1) = LJ 'stocke le numéro de la ligne jaune LJ dans la colonne 0 (masquée)
.Column(1, .ListCount - 1) = I 'stocke dans la colonne 1 (masquée) le numéro de ligne I
.Column(2, .ListCount - 1) = O.Cells(I, 1).Value 'stocke dans la colonne 2 le nom du centre
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End With 'fin de la prise en compte de la ListBox1
End Sub
Private Sub CheckBox1_Click() 'au clic dans la CheckBox1
Dim I As Integer 'déclare la variable I (Incrément)
With Me.ListBox1 'prend en compte la ListBox1
For I = 0 To .ListCount - 1 'boucle sur tous les éléments de la ListBox1
.Selected(I) = Me.CheckBox1.Value 'sélectionne/désélectionne l'élément en fonction de la case à cocher
Next I 'prochain élément de la boucle
End With 'fin de la prise en compte de la ListBox1
End Sub
Private Sub CommandButton1_Click() 'bouton "Valider"
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Select Case Me.CheckBox1.Value 'agit en fonction de la valeur de la case à cocher
Case False 'case non cochée
Rows("4:" & DL).Hidden = True 'masque les lignes 4 à DL
With Me.ListBox1 'prend en compte la ListBox1
For I = 0 To .ListCount - 1 'boucle sur tous les éléments de la ListBox1
J = 1 'initialsie la variable J
If .Selected(I) Then 'condition 1 : si l'élément est sélectionné
Rows(.Column(0, I)).Hidden = False 'affiche la ligne jaune LJ stockée dans la colonne 0 de la listBox1
Rows(.Column(1, I)).Hidden = False 'affiche la ligne Orange stockée dans la colonne 1 de la listBox1
Do 'exécute
'condition 2 : si la cellule j lignes en dessous de la ligne I n'a pas de couleur
If O.Cells(.Column(1, I) + J, 1).Interior.ColorIndex = xlNone Then
Rows(.Column(1, I) + J).Hidden = False 'affiche la ligne
Else 'sinon
Exit Do 'sort de la boucle
End If 'fin de la condition 2
J = J + 1 'incrémente J
Loop 'boucle
End If 'fin de la condition 1
Next I 'prochain élément de la boucle
End With 'fin de la prise en compte de la ListBox1
Case True 'case cochée
Rows("4:" & DL - 1).Hidden = True 'masque les lignes 4 à DL-1
For I = 4 To DL - 1 'boucle sur toutes les ligne 4 à DL-1
'si la cellule ligne I, colonne A est Jaune ou orange, affiche la ligne I
If O.Cells(I, 1).Interior.ColorIndex = 6 Or O.Cells(I, 1).Interior.ColorIndex = 45 Then Rows(I).Hidden = False
Next I 'prochaine ligne de la boucle
End Select 'fin de l'action en fonction de la case à cocher
Columns("B:S").Hidden = True 'masque les colonnes B à S
Unload Me 'vide et ferme l'UserForm
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
Private Sub CommandButton2_Click()
Unload Me 'vide et ferme l'UserForm
End SubLe Fichier :
Bonjour ThauThème,
Whaouuuu je te remercie infiniment pour ton code c'est beaucoup mieux que ce que j'avais trouvé !!!
De plus, tu as vraiment tout commenté, permettant une très bonne explication de ton code!
Je te souhaite une bonne journée et je te remercie encore pour ton aide très précieuse