Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Jacquou ??? Ah oui !
J'ai eu l'occasion de le rencontrer plusieurs fois à la Punta del Este où il se fit bâtir une maison qu'il baptisa "Isla Santiago" (= "Île Jacques"). N'en déplaise à certains, c'était un type franchement très sympatique et intéressant.
Merci pour ton aide. C'est presque parfait.
J'ai fait quelques modifications. Je joins le classeur où j'y ai mis mes questions.
J'ai résolu le problème des lignes vacantes dans le 2ème ComboBox quand on choisissait le dernier item du 1er ComboBox.
En revanche, je ne parviens toujours pas, quand le 2ème ComboBox s'actualise, à faire en sorte que le 1er item de sa liste soit sélectionné par défaut.
Pourquoi faire simple quand on peut faire compliqué :
Code:
Private Sub ComboBox1_Change()
Dim n As Byte, i As Byte, h As Byte
n = ComboBox1.ListIndex + 1
ComboBox2.Clear 'RAZ
If n = 0 Then Exit Sub
With Sheets("Hoja2").[B3:B42]
i = Application.Match(n, .Cells, 0)
h = Application.CountIf(.Cells, n)
ComboBox2.List = .Cells(i, 2).Resize(h).Value
ComboBox2.ListIndex = 0
End With
End Sub
La macro beuguait pour "Divers" car la propriété List nécessite au moins 2 éléments.
Alors créons 2 colonnes avec Resize :
Code:
Private Sub ComboBox1_Change()
Dim n As Byte, i As Byte, h As Byte
n = ComboBox1.ListIndex + 1
ComboBox2.Clear 'RAZ
If n = 0 Then Exit Sub
With Sheets("Hoja2").[B3:B42]
i = Application.Match(n, .Cells, 0)
h = Application.CountIf(.Cells, n)
ComboBox2.List = .Cells(i, 2).Resize(h, 2).Value '2 colonnes
ComboBox2.ListIndex = 0
End With
End Sub
On aura bien vu qu'à l'ouverture du fichier la liste de ComboBox2 est vide.
Pour l'éviter on peut utiliser la propriété ListFillRange :
Code:
Private Sub ComboBox1_Change()
Dim n As Byte, i As Byte, h As Byte
n = ComboBox1.ListIndex + 1
ComboBox2 = "": ComboBox2.ListFillRange = "" 'RAZ
If n = 0 Then Exit Sub
With Hoja2.[B3:B42] 'CodeName de la feuille
i = Application.Match(n, .Cells, 0)
h = Application.CountIf(.Cells, n)
With .Cells(i, 2).Resize(h)
ComboBox2.ListFillRange = "'" & .Parent.Name & "'!" & .Address
End With
ComboBox2.ListIndex = 0
End With
End Sub
Si l'on voulait toujours utiliser la propriété List il faudrait une macro Workbook_Open.
Fichier (3).
Edit : il faut mettre le nom de la feuille entre 'quotes' au cas où il y aurait des espaces.
Merci pour vos réponses.
Décidément, le minimalisme de job me fait comprendre que le chemin du VBA est encore long...
J'ai fait quelques modifications mineures, d'abord en nommant la plage [B3:B42], mais surtout il se trouve que quand on choisissait le dernier item ("Inclassés") du ComboBox1, dans le ComboBox2 apparaissait des lignes inutilement vides.
Je ne sais pas si le moyen que j'ai choisi pour résoudre ce problème est le plus orthodoxe, mais ça semble marcher.
J'ai bien lu ta macro, mais j'avoue que :
Encore une chose qui n'a rien à voir avec ce fil, mais que j'ai fréquemment rencontrée, en l'occurrence au cours de ce fil.
J'envoie une feuille avec des cellules colorées.
On me renvoie la feuille et la couleur des cellules n'est plus forcément la même.
À quoi est dû ce phénomène ?
J'avais complètement oublié "CountA" ; autant pour moi !
En revanche, ne comprenant toujours pas "'" et "'!", j'ai tenté de chercher dans l'aide au sujet de "ListFillRange", sur ma version d'Excel il n'y a rien.
Malheureusement je reviens sur le sujet.
Le classeur que j'avais posté est évidemment une version simplifiée de celui où je travaille.
Les différences ne sont pas notables (ComboBox nommés, feuilles nommées (là serait peut-être le problème), le tableau "ListeItems3" comportant en fait 2 colonnes).
Je pense avoir bien fait les rectifications nécessaires, mais je ne comprends pas pourquoi ça plante.
Dis on ne va quand même pas passer des heures à triturer tes fiéfées ComboBoxes 🙄
Code:
Set plage = [ListeItems3].Columns(1) '1ère colonne du tableau "ListeItems3"
'------------------
With plage.Resize(nblgn).Offset(, -1) 'CodeName de la feuille
'------------------
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD