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

10 réponses

1 2
Avatar
Daniel.C
Bonjour.
Pas testé, mais peut-être :

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

Me.ComboBox2.List = rg.Value

Cordialement.
Daniel

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
Avatar
michdenis
Bonjour,

Je ne sais pas si j'ai bien compris...
un petit exemple :

http://cjoint.com/?enqdOVM2Vo



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

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
Avatar
michdenis
Dans le code soumis du formulaire, j'ai omis de
déclarer 2 variables, X et Rg

Dim RgCombobox1 As Range
Dim Sh As Worksheet
'------------------------------------
Private Sub ComboBox1_Change()
Dim Rg As Range
With Me.ComboBox1
Set Rg = Range(RgCombobox1(1, .ListIndex + 1).Offset(1), _
Sh.Range(Sh.Cells(65536, .ListIndex + 1).End(xlUp).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))
ss = RgCombobox1.Address
X = RgCombobox1
Me.ComboBox1.List = Application.Transpose(X)
End With
End Sub
'------------------------------------



"michdenis" a écrit dans le message de groupe de discussion :
#
Bonjour,

Je ne sais pas si j'ai bien compris...
un petit exemple :

http://cjoint.com/?enqdOVM2Vo



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

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
Avatar
Circé
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
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é
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é
Re..

Ce qui marche c'est de mettre une plage de 2 cellules minimum vides
sans titre au dessus... Si je mets par exemple .Range("Z1:Z2") à la
place de Nothing, j'ai deux lignes blanches ma liste déroulante. C'est
moins pire, mais c'est quand même de l'infâme bidouillage ! et j'aime
pas beaucoup ça...

Circé
http://faqword.com

Daniel.C avait énoncé :
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
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
Le code du formulaire :

Attention aux lignes coupées par le service de messagerie.

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 = Range(RgCombobox1(1, .ListIndex + 1).Offset(1).Resize(S).Address)
Me.ComboBox2.List = Rg.Value
End With
End Sub
'---------------------------------------
Private Sub UserForm_Initialize()
Set Sh = Worksheets("Feuil1")
With Sh
Set RgCombobox1 = .Range("A1", .Cells(1, .Range("IV1").End(xlToLeft).Column))
ss = RgCombobox1.Address
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
michdenis
Le code du formulaire dans le fichier exemple :

Attention aux lignes coupées par le service de messagerie.

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 = 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