[Résolu] Remplissage ComboBox avec liste variable problème si 1 seule ligne

Crennosaure

XLDnaute Nouveau
Bonjour à tous,

Totalement débutant en VBA je suis avec attention le forum 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
 
Dernière édition:

gilbert_RGI

XLDnaute Barbatruc
Re : Remplissage ComboBox avec liste variable problème si 1 seule ligne

Bonjour,

peut-être pouvez vous mettre une gestion d'erreur

Code:
On Error GoTo un
ComboBox2.List = Sheets(1).Range("B2:B" & Cells(Application.Rows.Count, 2).End(xlUp).Row).Value
Exit Sub
un:
ComboBox2.AddItem Sheets(1).Range("B2").Value
 

Bebere

XLDnaute Barbatruc
Re : Remplissage ComboBox avec liste variable problème si 1 seule ligne

bonjour Manu
il y a d'autres méthodes,plus simple
si une ligne utiliser la propriété additem
à tester

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.Clear'vide la combobox 'Value = "" efface la sélection
Sheets("database").Select

''Remplissage de la combobox problématique si il n'y a qu'une seule ligne, c'est à dire, que dans B2
If Range("B2:B" & Cells(Application.Rows.Count, 2).End(xlUp).Row).Rows.Count > 1 Then
ComboBox2.List = Range("B2:B" & Cells(Application.Rows.Count, 2).End(xlUp).Row).Value
Else
ComboBox2.AddItem Range("B2:B" & Cells(Application.Rows.Count, 2).End(xlUp).Row).Value
End If 'Sauvegarde pour prendre en compte le remplissage
ActiveWorkbook.Save

End Sub

edit bonjour Gilbert
 
Dernière édition:

Crennosaure

XLDnaute Nouveau
Re : Remplissage ComboBox avec liste variable problème si 1 seule ligne

Quelle réactivité! Merci Gilbert pour l'astuce du +1, je n'ai plus d'erreur :D
Cependant, il ne me copie pas ce que je veux ... Donc je teste le code de Bebere et je reviens vers vous.

Merci à vous deux
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 337
Membres
102 865
dernier inscrit
FreyaSalander