Liste deroulante dans un Userform

Résolu/Fermé
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
- 14 août 2018 à 18:43
Patrice33740
Messages postés
8549
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
7 mai 2022
- 17 août 2018 à 22:16
Bonsoir à tous,

Je cherche à réaliser des listes déroulantes imbriquées dans un Userform. Après des recherches j’ai trouvé ce qui m’a servi à faire mon test. J’ai créé un Userform avec deux ComboBox, j’ai rentré le code mais dès que je lance l’exécution j’ai le message d’erreur suivant :

Erreur d’exécution 438
Propriété ou méthode non géré par cet objet


J’ai bien essayé de comprendre cette erreur mais je n’y suis pas parvenu.

Avec ce lien vous allez pouvoir télécharger mon fichier :
https://www.cjoint.com/c/HHoqF4pEpu5

Pouvez-vous m’aider..
D’avance merci.
Mistral

3 réponses

Patrice33740
Messages postés
8549
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
7 mai 2022
1 754
15 août 2018 à 09:20
Bonjour,

1) Il faut absolument éviter les .Select, ActiveCell, Selection, ... en VBA.
2) il faut éviter de déclarer toutes les variables avec une portée globales, il faut limiter leur portée au strict nécessaire.

J'aurais écrit ton code comme ceci :
Option Explicit
Private Sub UserForm_Initialize()
' Procédure permettant  d'initailiser
' les données de la liste Rubrique.
Dim colonne As Long
    ' Initialisation des Variables.
    colonne = 2 ' Numéro de la Première colonne.
    ' Création d'une boucle pour charger toutes les rubriques.
    With Sheets("Donnees")
        Do While .Cells(2, colonne).Value <> "" ' Tant qu'il y a des valeurs sur la ligne 2.
            FrmSaisie.CboRubriques.AddItem .Cells(2, colonne).Value
            colonne = colonne + 1
        Loop
    End With
End Sub
Private Sub CboRubriques_Change()
' Procédure permettant  d'initialiser
' les données de la liste Sous-Rubrique.
Dim i As Long
Dim j As Long
Dim colonne As Long
    ' Initialisation variables.
    i = 2
    ' On vide la liste des sous-rubriques.
    FrmSaisie.CboSousRubriques.Clear
    ' On travaille sur la feuille données
    With Sheets("Donnees")
        ' On boucle pour récupérer les sous rubriques de chaque rubriques.
        Do While .Cells(2, i).Value <> ""
            ' On test que le nom de rubriques soit bien identique.
            If .Cells(2, i).Value = FrmSaisie.CboRubriques.Value Then ' Si oui
                ' Récupération du N° de colonne
                colonne = .Cells(2, i).Column
            End If
            i = i + 1
        Loop
        ' On initialise le numéro de ligne à 3.
        j = 3
        ' On boucle sur les colonnes pour récupérer les sous-rubriques.
        Do While .Cells(j, colonne).Value <> ""
            ' On charge les villes dans la liste déroulante
            FrmSaisie.CboSousRubriques.AddItem .Cells(j, colonne)
            j = j + 1
        Loop
    End With
    ' On affiche la première valeur par défaut.
    CboSousRubriques.ListIndex = 0
End Sub
Private Sub BtnFermeture_click()
    Unload Me
End Sub

--
Cordialement
Patrice
0