[XL 2010]Remplissage ComboBox liste variable problème si 1 ligne

Résolu/Fermé
Crennosaure - 14 mars 2014 à 09:12
 Crennosaure - 14 mars 2014 à 10:33
Bonjour à tous,

Totalement débutant en VBA je suis avec attention les forums et jusqu'à présent je m'en sors, mais je bloque.

Voici mon problème:
J'utilise un UserForm avec plusieurs ComboBox:
- ComboBox1 est une liste de pays
- ComboBox2 est une liste de détaillants (chaque détaillant est caractérisé par son pays)
Du fait du grand nombre de détaillants, j'effectue un tri en sélectionnant d'abord le pays, et la ComboBox2 se remplie avec les détaillants qui sont dans le pays choisi. En bidouillant, ça marche mais lorsqu'il n'existe qu'un seul détaillant pour le pays sélectionné, j'ai un message d'erreur sur la ligne qui est censée remplir la ComboBox2.

Voici mon code expliqué pour me bien faire comprendre, ma façon de faire n'est peut être pas la bonne ...

Code :
Private Sub CommandButton10_Click()
Dim Filtre As String
Dim Destination As Range

' Le nom du pays est rentré sous la variable Filtre
Filtre = ComboBox1.Value

' Vide les colonnes où les données vont se copier
Sheets("database").Range("B2:B65536") = ""
Sheets("database").Range("C2:C65536") = ""

' Pour obliger l'utilisateur à sélectionner un pays avant
If ComboBox1 = "" Then
MsgBox ("Rentrez un pays avant de valider!")
Else
' Filtre avec le pays
Sheets("Détaillant").Range("$A$1:$A$3427").AutoFilter Field:=2, Criteria1:=Filtre
End If

'Définis la plage où sera copiée les données
Set Destination = Sheets("database").Range("B2")
Dim MaPlage As Range

'Représente les données filtrées et les titres
Set MaPlage = Sheets("Détaillant").AutoFilter.Range

'Représente seulement les données
Set MaPlage = MaPlage.Offset(1, 0).Resize(MaPlage.Rows.Count - 1, MaPlage.Rows.Count)

'Copie les données à l'endroit qui alimente la combobox
MaPlage.Copy Destination
ComboBox2.Value = ""
Sheets("database").Select

''Remplissage de la combobox problématique si il n'y a qu'une seule ligne, c'est à dire, que dans B2
ComboBox2.List = Range("B2:B" & Cells(Application.Rows.Count, 2).End(xlUp).Row).Value

'Sauvegarde pour prendre en compte le remplissage
ActiveWorkbook.Save

End Sub

Merci à tous pour votre aide.

Manu



A voir également:

2 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
14 mars 2014 à 09:53
Bonjour,

Simplement ainsi tu devrais éviter le problème :
ComboBox2.List = Range("B2:B" & Cells(Application.Rows.Count, 2).End(xlUp).Row + 1).Value
--
Toujours zen
La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer. Antoine de Saint-Exupéry
1
Crennosaure
14 mars 2014 à 10:33
J'avais posté en parallèle sur un autre forum, j'ai eu la même réponse, tout marche parfaitement!
Merci pour votre aide
0