Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

listes déroulante vides

19 réponses
Avatar
Circé
Bonjour à tous !

J'ai le plaisir de vous soumettre un nouveau problème ;)

Dans une Userform, j'ai une combobox qui dépend d'une autre.

Si la comobobox 1 = truc, la combobox 2 aura la liste x
Si la comobobox 1 = machin, la combobox 2 aura la liste y

J'ai donc un SELECT CASE pour définir quelle sera la liste de la
comobox 2.
Ces listes sont dans une feuille Excel, et commencent toutes à la
deuxième ligne, avec un titre chacune pour la première ligne.

Tout ça marche très bien sauf quand la liste est vide est qu'elle ne
contient que le titre. Dans ce cas, j'obtiens le titre comme liste,
alors que je voudrais ne rien avoir, ou juste un message disant qu'il
n'y a rien à voir...

Je pense que je dois formuler ça dans le SELECT CASE, mais je ne vois
pas comment...

With Worksheets("mafeuille")
monchoix = ComboBox1.Value
Select Case monchoix
Case "truc"
Set rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
Case "machin"
Set rg = .Range("B2:B" & .Range("B65536").End(xlUp).Row)
...
...
end Select
End With

Me.ComboBox2.List = rg.Value

Merci par avance !

Circé
http://faqword.com

9 réponses

1 2
Avatar
michdenis
Ça y est, une dernière petite correction a été faite :
Code du formulaire du fichier exemple


Dim RgCombobox1 As Range
Dim Sh As Worksheet
'--------------------------------
Private Sub ComboBox1_Change()
Dim Rg As Range, S As Long
With Me.ComboBox1
S = IIf(Sh.Cells(65536, .ListIndex + 1).End(xlUp). _
Row = 1, 2, Sh.Cells(65536, .ListIndex + 1). _
End(xlUp).Row)
Set Rg = Sh.Range(RgCombobox1(1, .ListIndex + 1). _
Offset(1).Resize(S).Address)
Me.ComboBox2.List = Rg.Value
End With
End Sub
'--------------------------------
Private Sub UserForm_Initialize()
Dim X As Variant
Set Sh = Worksheets("Feuil1")
With Sh
Set RgCombobox1 = .Range("A1", .Cells(1, .Range("IV1"). _
End(xlToLeft).Column))
X = RgCombobox1
Me.ComboBox1.List = Application.Transpose(X)
End With
End Sub
'--------------------------------



"Circé" a écrit dans le message de groupe de discussion :

Bonsoir Daniel et MichDenis

DDaniel, j'avais utilisé à peu près la même technique, mais dès que
j'ai une liste vide, ça plante ! et je ne comprends vraiment pas
pourquoi...

MichDenis, en fait tu n'as compris mon problème... Car ton code bien
que plus concis, m'affiche le titre dans la liste déroulante lorsque
celle ci est vide... Et c'est ça mon problème... Si la liste est vide
dans la feuille Excel, je veux qu'elle soit vide dans mon formulaire.

D'autres idées ?

Circé
http://faqword.com
Avatar
Circé
Bonjour à tous les deux

Bon, je n'y comprends rien !
J'ai essayé vos deux codes qui fonctionnenent très bien sauf dans mon
classeur...
Il n'y a rien à faire, j'ai toujours cette première ligne qui s'affiche
dans la combobox quand la liste est vide...
J'abandonne et je passe à la bidouille.

Merci quand même... Je garde ça précieusement pour une autre fois...

Circé
http://faqword.com

michdenis a exposé le 13/04/2010 :
Ça y est, une dernière petite correction a été faite :
Code du formulaire du fichier exemple


Dim RgCombobox1 As Range
Dim Sh As Worksheet
'--------------------------------
Private Sub ComboBox1_Change()
Dim Rg As Range, S As Long
With Me.ComboBox1
S = IIf(Sh.Cells(65536, .ListIndex + 1).End(xlUp). _
Row = 1, 2, Sh.Cells(65536, .ListIndex + 1). _
End(xlUp).Row)
Set Rg = Sh.Range(RgCombobox1(1, .ListIndex + 1). _
Offset(1).Resize(S).Address)
Me.ComboBox2.List = Rg.Value
End With
End Sub
'--------------------------------
Private Sub UserForm_Initialize()
Dim X As Variant
Set Sh = Worksheets("Feuil1")
With Sh
Set RgCombobox1 = .Range("A1", .Cells(1, .Range("IV1"). _
End(xlToLeft).Column))
X = RgCombobox1
Me.ComboBox1.List = Application.Transpose(X)
End With
End Sub
'--------------------------------



"Circé" a écrit dans le message de groupe de discussion :

Bonsoir Daniel et MichDenis

DDaniel, j'avais utilisé à peu près la même technique, mais dès que
j'ai une liste vide, ça plante ! et je ne comprends vraiment pas
pourquoi...

MichDenis, en fait tu n'as compris mon problème... Car ton code bien
que plus concis, m'affiche le titre dans la liste déroulante lorsque
celle ci est vide... Et c'est ça mon problème... Si la liste est vide
dans la feuille Excel, je veux qu'elle soit vide dans mon formulaire.

D'autres idées ?

Circé
http://faqword.com
Avatar
Circé
Daniel


Je rétablis une vérité...
Ton code marche très bien ! Ouf !
Je l'ai adopté.

Il est vrai que celui de michdenis aurait été plus pratique car j'ai
une douzaine de CASE, mais bon... ça fonctionne et c'est le principal.
Un grand merci.

Circé
http://faqword.com

Daniel.C a utilisé son clavier pour écrire :
J'ai sans doute mal compris; regarde le classeur suivant :
http://www.cijoint.fr/cjlink.php?file=cj201004/cijlI1tmcS.xls
Daniel


Pas mieux ! :(
Plantage immédiat ! :(

ça m'agace ce truc !

Circé


Daniel.C avait écrit le 13/04/2010 :
Essaie plutôt :

With Worksheets("mafeuille")
monchoix = ComboBox1.Value
Select Case monchoix
Case "truc"
If .Range("A65536").End(xlUp).Row = 1 Then
Set rg = Nothing
Else
Set rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End If
Case "machin"
If .Range("B65536").End(xlUp).Row = 1 Then
Set rg = Nothing
Else
Set rg = .Range("B2:B" & .Range("B65536").End(xlUp).Row)
End If
End Select
End With
If rg Is Nothing Then
Me.ComboBox2.Clear
Else
Me.ComboBox2.List = rg.Value
End If

Daniel

Bonsoir Daniel et MichDenis

DDaniel, j'avais utilisé à peu près la même technique, mais dès que j'ai
une liste vide, ça plante ! et je ne comprends vraiment pas pourquoi...

MichDenis, en fait tu n'as compris mon problème... Car ton code bien que
plus concis, m'affiche le titre dans la liste déroulante lorsque celle ci
est vide... Et c'est ça mon problème... Si la liste est vide dans la
feuille Excel, je veux qu'elle soit vide dans mon formulaire.

D'autres idées ?

Circé
http://faqword.com
Avatar
Circé
Euh... j'ai parlé trop vite...

En fait, ça fonctionne quand la liste est vide
ça fonctionne quand elle a au moins 2 items
mais ça plante quand elle n'a qu'un seul item...

Circé
http://faqword.com

Le 14/04/2010, Circé a supposé :
Daniel


Je rétablis une vérité...
Ton code marche très bien ! Ouf !
Je l'ai adopté.

Il est vrai que celui de michdenis aurait été plus pratique car j'ai une
douzaine de CASE, mais bon... ça fonctionne et c'est le principal.
Un grand merci.

Circé
http://faqword.com

Daniel.C a utilisé son clavier pour écrire :
J'ai sans doute mal compris; regarde le classeur suivant :
http://www.cijoint.fr/cjlink.php?file=cj201004/cijlI1tmcS.xls
Daniel


Pas mieux ! :(
Plantage immédiat ! :(

ça m'agace ce truc !

Circé


Daniel.C avait écrit le 13/04/2010 :
Essaie plutôt :

With Worksheets("mafeuille")
monchoix = ComboBox1.Value
Select Case monchoix
Case "truc"
If .Range("A65536").End(xlUp).Row = 1 Then
Set rg = Nothing
Else
Set rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End If
Case "machin"
If .Range("B65536").End(xlUp).Row = 1 Then
Set rg = Nothing
Else
Set rg = .Range("B2:B" & .Range("B65536").End(xlUp).Row)
End If
End Select
End With
If rg Is Nothing Then
Me.ComboBox2.Clear
Else
Me.ComboBox2.List = rg.Value
End If

Daniel

Bonsoir Daniel et MichDenis

DDaniel, j'avais utilisé à peu près la même technique, mais dès que j'ai
une liste vide, ça plante ! et je ne comprends vraiment pas pourquoi...

MichDenis, en fait tu n'as compris mon problème... Car ton code bien que
plus concis, m'affiche le titre dans la liste déroulante lorsque celle
ci est vide... Et c'est ça mon problème... Si la liste est vide dans la
feuille Excel, je veux qu'elle soit vide dans mon formulaire.

D'autres idées ?

Circé
http://faqword.com
Avatar
Daniel.C
Bonjour.
En utilisant le classeur fourni hier, change la macro :

Private Sub ComboBox1_Change()
Dim Ligne As Long, Adresse As String
With Worksheets("Feuil1")
monchoix = ComboBox1.Value
Select Case monchoix
Case "truc"
Ligne = .Range("A65536").End(xlUp).Row
Adresse = "A2:A"
Case "machin"
Ligne = .Range("B65536").End(xlUp).Row
Adresse = "B2:B"
End Select
End With
If Ligne = 1 Then
Me.ComboBox2.Clear
Else
Me.ComboBox2.RowSource = Adresse & Ligne
End If
End Sub

Daniel


Euh... j'ai parlé trop vite...

En fait, ça fonctionne quand la liste est vide
ça fonctionne quand elle a au moins 2 items
mais ça plante quand elle n'a qu'un seul item...

Circé
http://faqword.com

Le 14/04/2010, Circé a supposé :
Daniel


Je rétablis une vérité...
Ton code marche très bien ! Ouf !
Je l'ai adopté.

Il est vrai que celui de michdenis aurait été plus pratique car j'ai une
douzaine de CASE, mais bon... ça fonctionne et c'est le principal.
Un grand merci.

Circé
http://faqword.com

Daniel.C a utilisé son clavier pour écrire :
J'ai sans doute mal compris; regarde le classeur suivant :
http://www.cijoint.fr/cjlink.php?file=cj201004/cijlI1tmcS.xls
Daniel


Pas mieux ! :(
Plantage immédiat ! :(

ça m'agace ce truc !

Circé


Daniel.C avait écrit le 13/04/2010 :
Essaie plutôt :

With Worksheets("mafeuille")
monchoix = ComboBox1.Value
Select Case monchoix
Case "truc"
If .Range("A65536").End(xlUp).Row = 1 Then
Set rg = Nothing
Else
Set rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End If
Case "machin"
If .Range("B65536").End(xlUp).Row = 1 Then
Set rg = Nothing
Else
Set rg = .Range("B2:B" & .Range("B65536").End(xlUp).Row)
End If
End Select
End With
If rg Is Nothing Then
Me.ComboBox2.Clear
Else
Me.ComboBox2.List = rg.Value
End If

Daniel

Bonsoir Daniel et MichDenis

DDaniel, j'avais utilisé à peu près la même technique, mais dès que
j'ai une liste vide, ça plante ! et je ne comprends vraiment pas
pourquoi...

MichDenis, en fait tu n'as compris mon problème... Car ton code bien
que plus concis, m'affiche le titre dans la liste déroulante lorsque
celle ci est vide... Et c'est ça mon problème... Si la liste est vide
dans la feuille Excel, je veux qu'elle soit vide dans mon formulaire.

D'autres idées ?

Circé
http://faqword.com
Avatar
Circé
Cette fois, ça marche, Daniel.
Je suis épuisée par ce truc ! En fait, Excel refuse les listes
déroulantes vides ou d'un seul item... C'est dingue quand même ! On
fait pas ce qu'on veut !

Juste pour ton code j'ai dû ajouter l'activation de la feuille qui
contient les listes car malgré le "With Worksheets", j'obtenais les
données de la feuille où se trouve le bouton qui lance le formulaire !

Remerci.

Circé
http://faqword.com

Daniel.C avait écrit le 14/04/2010 :
Bonjour.
En utilisant le classeur fourni hier, change la macro :

Private Sub ComboBox1_Change()
Dim Ligne As Long, Adresse As String
With Worksheets("Feuil1")
monchoix = ComboBox1.Value
Select Case monchoix
Case "truc"
Ligne = .Range("A65536").End(xlUp).Row
Adresse = "A2:A"
Case "machin"
Ligne = .Range("B65536").End(xlUp).Row
Adresse = "B2:B"
End Select
End With
If Ligne = 1 Then
Me.ComboBox2.Clear
Else
Me.ComboBox2.RowSource = Adresse & Ligne
End If
End Sub

Daniel


Euh... j'ai parlé trop vite...

En fait, ça fonctionne quand la liste est vide
ça fonctionne quand elle a au moins 2 items
mais ça plante quand elle n'a qu'un seul item...

Circé
http://faqword.com

Le 14/04/2010, Circé a supposé :
Daniel


Je rétablis une vérité...
Ton code marche très bien ! Ouf !
Je l'ai adopté.

Il est vrai que celui de michdenis aurait été plus pratique car j'ai une
douzaine de CASE, mais bon... ça fonctionne et c'est le principal.
Un grand merci.

Circé
http://faqword.com

Daniel.C a utilisé son clavier pour écrire :
J'ai sans doute mal compris; regarde le classeur suivant :
http://www.cijoint.fr/cjlink.php?file=cj201004/cijlI1tmcS.xls
Daniel


Pas mieux ! :(
Plantage immédiat ! :(

ça m'agace ce truc !

Circé


Daniel.C avait écrit le 13/04/2010 :
Essaie plutôt :

With Worksheets("mafeuille")
monchoix = ComboBox1.Value
Select Case monchoix
Case "truc"
If .Range("A65536").End(xlUp).Row = 1 Then
Set rg = Nothing
Else
Set rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End If
Case "machin"
If .Range("B65536").End(xlUp).Row = 1 Then
Set rg = Nothing
Else
Set rg = .Range("B2:B" & .Range("B65536").End(xlUp).Row)
End If
End Select
End With
If rg Is Nothing Then
Me.ComboBox2.Clear
Else
Me.ComboBox2.List = rg.Value
End If

Daniel

Bonsoir Daniel et MichDenis

DDaniel, j'avais utilisé à peu près la même technique, mais dès que
j'ai une liste vide, ça plante ! et je ne comprends vraiment pas
pourquoi...

MichDenis, en fait tu n'as compris mon problème... Car ton code bien
que plus concis, m'affiche le titre dans la liste déroulante lorsque
celle ci est vide... Et c'est ça mon problème... Si la liste est vide
dans la feuille Excel, je veux qu'elle soit vide dans mon formulaire.

D'autres idées ?

Circé
http://faqword.com
Avatar
michdenis
Voici un fichier exemple avec le code commenté.
Tu ne devrais pas éprouver de difficulté à adapter !

http://cjoint.com/?eondzywkJY




"Circé" a écrit dans le message de groupe de discussion :

Bonjour à tous les deux

Bon, je n'y comprends rien !
J'ai essayé vos deux codes qui fonctionnenent très bien sauf dans mon
classeur...
Il n'y a rien à faire, j'ai toujours cette première ligne qui s'affiche
dans la combobox quand la liste est vide...
J'abandonne et je passe à la bidouille.

Merci quand même... Je garde ça précieusement pour une autre fois...

Circé
http://faqword.com

michdenis a exposé le 13/04/2010 :
Ça y est, une dernière petite correction a été faite :
Code du formulaire du fichier exemple


Dim RgCombobox1 As Range
Dim Sh As Worksheet
'--------------------------------
Private Sub ComboBox1_Change()
Dim Rg As Range, S As Long
With Me.ComboBox1
S = IIf(Sh.Cells(65536, .ListIndex + 1).End(xlUp). _
Row = 1, 2, Sh.Cells(65536, .ListIndex + 1). _
End(xlUp).Row)
Set Rg = Sh.Range(RgCombobox1(1, .ListIndex + 1). _
Offset(1).Resize(S).Address)
Me.ComboBox2.List = Rg.Value
End With
End Sub
'--------------------------------
Private Sub UserForm_Initialize()
Dim X As Variant
Set Sh = Worksheets("Feuil1")
With Sh
Set RgCombobox1 = .Range("A1", .Cells(1, .Range("IV1"). _
End(xlToLeft).Column))
X = RgCombobox1
Me.ComboBox1.List = Application.Transpose(X)
End With
End Sub
'--------------------------------



"Circé" a écrit dans le message de groupe de discussion :

Bonsoir Daniel et MichDenis

DDaniel, j'avais utilisé à peu près la même technique, mais dès que
j'ai une liste vide, ça plante ! et je ne comprends vraiment pas
pourquoi...

MichDenis, en fait tu n'as compris mon problème... Car ton code bien
que plus concis, m'affiche le titre dans la liste déroulante lorsque
celle ci est vide... Et c'est ça mon problème... Si la liste est vide
dans la feuille Excel, je veux qu'elle soit vide dans mon formulaire.

D'autres idées ?

Circé
http://faqword.com
Avatar
Circé
Je te remercie, je conserve ton classeur de côté... Pour l'instant,
j'ai biaisé... et je suis passé à autre chose... Mais dans quelques
jours ça va revenir !! ;)

D'ailleurs je vais poster un autre problème !

Circé

michdenis avait soumis l'idée :
Voici un fichier exemple avec le code commenté.
Tu ne devrais pas éprouver de difficulté à adapter !

http://cjoint.com/?eondzywkJY




"Circé" a écrit dans le message de groupe de discussion :

Bonjour à tous les deux

Bon, je n'y comprends rien !
J'ai essayé vos deux codes qui fonctionnenent très bien sauf dans mon
classeur...
Il n'y a rien à faire, j'ai toujours cette première ligne qui s'affiche
dans la combobox quand la liste est vide...
J'abandonne et je passe à la bidouille.

Merci quand même... Je garde ça précieusement pour une autre fois...

Circé
http://faqword.com

michdenis a exposé le 13/04/2010 :
Ça y est, une dernière petite correction a été faite :
Code du formulaire du fichier exemple


Dim RgCombobox1 As Range
Dim Sh As Worksheet
'--------------------------------
Private Sub ComboBox1_Change()
Dim Rg As Range, S As Long
With Me.ComboBox1
S = IIf(Sh.Cells(65536, .ListIndex + 1).End(xlUp). _
Row = 1, 2, Sh.Cells(65536, .ListIndex + 1). _
End(xlUp).Row)
Set Rg = Sh.Range(RgCombobox1(1, .ListIndex + 1). _
Offset(1).Resize(S).Address)
Me.ComboBox2.List = Rg.Value
End With
End Sub
'--------------------------------
Private Sub UserForm_Initialize()
Dim X As Variant
Set Sh = Worksheets("Feuil1")
With Sh
Set RgCombobox1 = .Range("A1", .Cells(1, .Range("IV1"). _
End(xlToLeft).Column))
X = RgCombobox1
Me.ComboBox1.List = Application.Transpose(X)
End With
End Sub
'--------------------------------



"Circé" a écrit dans le message de groupe de discussion :

Bonsoir Daniel et MichDenis

DDaniel, j'avais utilisé à peu près la même technique, mais dès que
j'ai une liste vide, ça plante ! et je ne comprends vraiment pas
pourquoi...

MichDenis, en fait tu n'as compris mon problème... Car ton code bien
que plus concis, m'affiche le titre dans la liste déroulante lorsque
celle ci est vide... Et c'est ça mon problème... Si la liste est vide
dans la feuille Excel, je veux qu'elle soit vide dans mon formulaire.

D'autres idées ?

Circé
http://faqword.com
Avatar
Circé
Re...


michdenis avait soumis l'idée :
Voici un fichier exemple avec le code commenté.
Tu ne devrais pas éprouver de difficulté à adapter !

http://cjoint.com/?eondzywkJY



Nickel chrome !!!
Alors là, chapeau !
Comme je t'avais dit, cette histoire allait revenir à la surface et ton
code fonctionne superbement bien... Car mes histoires de Select Case
étaient difficiles à gérer surtout que maintenant on m'annonce que le
tableau peut s'étendre en nb de colonnes. Ton code est parfait.
et hop en prod et en archives en même temps.
Merci beaucoup MichDenis !

Circé





"Circé" a écrit dans le message de groupe de discussion :

Bonjour à tous les deux

Bon, je n'y comprends rien !
J'ai essayé vos deux codes qui fonctionnenent très bien sauf dans mon
classeur...
Il n'y a rien à faire, j'ai toujours cette première ligne qui s'affiche
dans la combobox quand la liste est vide...
J'abandonne et je passe à la bidouille.

Merci quand même... Je garde ça précieusement pour une autre fois...

Circé
http://faqword.com

michdenis a exposé le 13/04/2010 :
Ça y est, une dernière petite correction a été faite :
Code du formulaire du fichier exemple


Dim RgCombobox1 As Range
Dim Sh As Worksheet
'--------------------------------
Private Sub ComboBox1_Change()
Dim Rg As Range, S As Long
With Me.ComboBox1
S = IIf(Sh.Cells(65536, .ListIndex + 1).End(xlUp). _
Row = 1, 2, Sh.Cells(65536, .ListIndex + 1). _
End(xlUp).Row)
Set Rg = Sh.Range(RgCombobox1(1, .ListIndex + 1). _
Offset(1).Resize(S).Address)
Me.ComboBox2.List = Rg.Value
End With
End Sub
'--------------------------------
Private Sub UserForm_Initialize()
Dim X As Variant
Set Sh = Worksheets("Feuil1")
With Sh
Set RgCombobox1 = .Range("A1", .Cells(1, .Range("IV1"). _
End(xlToLeft).Column))
X = RgCombobox1
Me.ComboBox1.List = Application.Transpose(X)
End With
End Sub
'--------------------------------



"Circé" a écrit dans le message de groupe de discussion :

Bonsoir Daniel et MichDenis

DDaniel, j'avais utilisé à peu près la même technique, mais dès que
j'ai une liste vide, ça plante ! et je ne comprends vraiment pas
pourquoi...

MichDenis, en fait tu n'as compris mon problème... Car ton code bien
que plus concis, m'affiche le titre dans la liste déroulante lorsque
celle ci est vide... Et c'est ça mon problème... Si la liste est vide
dans la feuille Excel, je veux qu'elle soit vide dans mon formulaire.

D'autres idées ?

Circé
http://faqword.com
1 2