Bonjour,
je voulais vous demander vos avis sur différentes partie d'un code concernant un userfom (4 combobox et un bouton de commande) et me dire si chaque partie est rédigée correctement. J'ai découpé dans mon message les différentes partie du code de l'userform.
Voici donc ces parties :
Ici, je lui demande de filtrer par rapport à la colonne 3. J'avais remarqué que lorsque je me trompais de choix dans la combobox et que j'en choisissais un autre dans la foulée il ne "défiltrait" pas le précédent choix. Du coup, je lui demande de défiltrer puis de filtre. Je ne sais pas si c'est la bonne méthode. J'ai eu cette idée. C'est la première fois que je fais cela.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub UserForm_Initialize() Feuil1.unprotect Password:="toto" Feuil1.ListObjects("Tableau1").AutoFilter.ShowAllData End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Private Sub ComboBox1_Change() lieu = ComboBox1.Value Feuil1.ListObjects("Tableau1").Range.AutoFilter Field:=3 Feuil1.ListObjects("Tableau1").Range.AutoFilter Field:=3, Criteria1:=lieu End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Private Sub ComboBox2_Change() couleurs = ComboBox2.Value Feuil1.ListObjects("Tableau1").Range.AutoFilter Field:=5 Feuil1.ListObjects("Tableau1").Range.AutoFilter Field:=5, Criteria1:=couleurs End SubLà c'est le code que THEZE m'a adapté. J'ai modifié juste un poil pour l'adapter à mon cas mais bon normalement c'est nickel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Private Sub ComboBox3_Change() competences = ComboBox3.Value Feuil1.ListObjects("Tableau1").Range.AutoFilter Field:=6 Feuil1.ListObjects("Tableau1").Range.AutoFilter Field:=6, Criteria1:=competences End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 Private Sub CommandButton1_Click() Dim Commentaire As String Dim Cel As Range nom = ComboBox4.Value 'là il ne filtre pas mais se sert de cette donnée pour la chercher dans le tableau Set Cel = Feuil1.Range("7:7").Find(nom, , xlValues, xlWhole, , , False) 'il faut contrôler si un Range est bien retournée ! If Not Cel Is Nothing Then colonne = Cel.Column ligne = Cel.Row '<-- ici, c'est forcément 7 ! Commentaire = "" 'facultatif, mais au cas où tu relances la macro, ça va d'abord vider la variable With Sheets("saisie") For Each Cel In .Range(.Cells(ligne + 3, colonne + 2), .Cells(ligne + 1949, colonne + 2)) 'si visible (suite au filtrage) If Cel.EntireRow.Hidden = False Then If Cel.Text <> "" Then Commentaire = Commentaire & "- " & Cel.Text & vbNewLine End If Next Cel End With Sheets(ComboBox4.Value).Select 'charge le formulaire en mémoire Load UserForm14 With UserForm14 'paramètre pour le label .Label1.Caption = "Voici les commentaires obtenus par " & ComboBox4.Value & " dans la période " & ComboBox1.Value & " avec le niveau " & ComboBox2.Value & " pour la compétence " & ComboBox3.Value 'paramètre le TextBox .TextBox1.MultiLine = True .TextBox1.WordWrap = True .TextBox1.Text = Commentaire 'affectation de texte 'affichage visuel du formulaire .Show End With Else MsgBox "La valeur '" & nom & "' n'a pas été trouvée !" End If End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub UserForm_Terminate() Feuil1.protect Password:="toto" End Sub
Partager