Bonjour à tous,
Je débute en programmation: voici mon problème:
J’ai 3 checkboxes et deux comboboxes. à chaque fois que l’on modifie les checkboxes:
1 Lorsqu’on coche les 3 checkboxes, un menu unique apparait dans la combobox appelé CboTypologie et un menu apparait dans la seconde combobox appelé CboDetail.
2 Lorsqu’on coche une ou deux checkboxes sur les trois alors une autre liste apparait dans la combobox CboTypologie et en fonction du choix fait, une liste déroulante en cascade doit apparaitre dans CboDetail.
3 Lorsqu’aucune case n’est cochée les comboboxes restent vides.
4 Enfin, lorsque les choix sont fait dans Cbotypologie et Cbodetail, une boite Txt affiche un score.
Pour l’instant, dans mon formulaire l’ensemble fonctionne à l’exception la partie 2. La Cbodetail reste désespérément vide dans le cas 2.
voici le code: j’ai mis entre étoiles la partie qui me pose problème mais je vois pas ce qui cloche. un peu d’aide me serait bien utile !
Partie 1,2 et 3
Private Sub ChkRenOeu_Click()
ModifierFonction
End Sub
Private Sub ChkAcCo_Click()
ModifierFonction
End Sub
Private Sub ChkPratique_Click()
ModifierFonction
End Sub
Sub ModifierFonction()
’ Effacer le contenu des comboboxes
Cbotypologie.Clear
CBoDetail.Clear
' Vérifier si les 3 checkboxes sont cochées
If ChkRenOeu.Value And ChkAcCo.Value And ChkPratique.Value Then
' Afficher la combobox Cbotypologie avec la valeur "Action avec les 3 piliers de l'EAC"
Cbotypologie.AddItem "Action avec les 3 piliers de l'EAC"
Cbotypologie.Value = "Action avec les 3 piliers de l'EAC"
' Afficher la combobox CBoDetail avec le contenu du Tableau15
For Each cell In Worksheets("RefScore").ListObjects("Tableau15").ListColumns(1).DataBodyRange
CBoDetail.AddItem cell.Value
Next cell
' Activer les comboboxes
Cbotypologie.Enabled = True
Else
' Vérifier combien de checkboxes sont cochées
Dim count As Integer
count = IIf(ChkRenOeu.Value, 1, 0) + IIf(ChkAcCo.Value, 1, 0) + IIf(ChkPratique.Value, 1, 0)
If count > 0 Then
’ Ajouter les éléments du tableau Typo2 à la combobox Cbotypologie en utilisant une boucle
For Each cell In Worksheets(« RefScore »).ListObjects(« Typo2 »).ListColumns(1).DataBodyRange
Cbotypologie.AddItem cell.Value
Next cell
' Activer la combobox Cbotypologie
Cbotypologie.Enabled = True
' Recherche de la valeur sélectionnée dans Cbotypologie dans le tableau Tabrecherche
Dim recherche As Range
Set recherche = Worksheets("RefScore").ListObjects("Tabrecherche").Range
' Chercher la valeur correspondante dans le tableau Tabrecherche
Dim valeurRecherche As Variant
valeurRecherche = Application.VLookup(Cbotypologie.Value, recherche, 1, False)
' Si la valeur est trouvée, afficher le nom du tableau correspondant dans CboDetail
If Not IsError(valeurRecherche) Then
Dim nomTableau As String
nomTableau = valeurRecherche.Offset(0, 1).Value
Dim tableau As ListObject
Set tableau = Worksheets("RefScore").ListObjects(nomTableau)
' Afficher les éléments du tableau correspondant dans la combobox CBoDetail
For Each cell In tableau.ListColumns(1).DataBodyRange
CBoDetail.AddItem cell.Value
Next cell
' Activer la combobox CBoDetail si au moins une option est disponible
If CBoDetail.ListCount > 0 Then
CBoDetail.Enabled = True
End If
End If
End If
End If
End Sub
Partie 4
Private Sub CboDetail_Change()
’ Récupérer la valeur sélectionnée dans la combobox
Dim valeurRecherche As String
valeurRecherche = CBoDetail.Value
' Référence à la feuille "Refscore"
Dim feuille As Worksheet
Set feuille = ThisWorkbook.Sheets("Refscore")
' Référence au tableau "TableauCorrespondance" dans la feuille "Refscore"
Dim tableauCorrespondance As Range
Set tableauCorrespondance = feuille.Range("TableauCorrespondance")
' Rechercher la valeur dans le tableau
Dim ligneTrouvee As Range
Set ligneTrouvee = tableauCorrespondance.Find(What:=valeurRecherche, LookIn:=xlValues, LookAt:=xlWhole)
' Vérifier si la valeur a été trouvée
If Not ligneTrouvee Is Nothing Then
' Récupérer la valeur dans la colonne suivante sur la même ligne
Dim valeurTrouvee As String
valeurTrouvee = ligneTrouvee.Offset(0, 1).Value
' Afficher la valeur dans la textbox
TxtEac.Value = valeurTrouvee
Else
' Valeur non trouvée, afficher 0 dans la textbox
TxtEac.Value = 0
End If
End Sub