Analyse de code partie par partie
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 :
Code:
1 2 3 4
| Private Sub UserForm_Initialize()
Feuil1.unprotect Password:="toto"
Feuil1.ListObjects("Tableau1").AutoFilter.ShowAllData
End Sub |
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:
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:
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 Sub |
Code:
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 |
Là 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:
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:
1 2 3
| Private Sub UserForm_Terminate()
Feuil1.protect Password:="toto"
End Sub |