VBA remplir une combobox à partir de plusieurs cellules
Résolu
Angelo
-
Angelo -
Angelo -
Bonjour,
J'essaie de remplir une combobox à partir de plusieurs cellules. Cela fonctionne dans mon premier onglet mais pas pour le deuxième.
Voici le code pour lequel ça bug :
Dim Plage As String
Dim NumCtrt As String
Dim Lig As Integer
NumCtrt = ""
Call ZoneCombinée8_Remplir("Fiche", "u442118")
'Worksheets("ZoneCombinée8").Select
'Worksheets("ZoneCombinée8").Range("B2").Select
'Worksheets("ZoneCombinée8").Range(Selection, Selection.End(xlDown)).Select
'Plage = Selection.Address
Plage = Range("B1:B5").Address
ComboBox2.ListFillRange = "ZoneCombinée8!" & Plage
Sheets("ZoneCombinée8").Visible = False
'NumCtrt = ComboBox2.Value
With Sheets("Table")
Lig = .Columns(4).Cells.Find(NumCtrt, lookat:=xlWhole).Row
End With
Pour le code ci-dessous cela fonctionne :
Dim Plage As String
Dim NumCtrt As String
Dim Lig As Integer
NumCtrt = ""
'(Worksheets("ZoneCombinée8").Select
'Worksheets("ZoneCombinée8").Range("A2").Select
'Worksheets("ZoneCombinée8").Range(Selection, Selection.End(xlDown)).Select
'Plage = Selection.Address
Plage = Range("A1:A5").Address
ComboBox1.ListFillRange = "ZoneCombinée8!" & Plage
NumCtrt = ComboBox1.Value
With Sheets("Table")
Lig = .Columns(4).Cells.Find(NumCtrt, lookat:=xlWhole).Row
End With
Sheets("Ajout").Range("numCT") = NumCtrt
Sheets("Ajout").Range("Produit") = Sheets("Table").Range("E" & Lig)
Sheets("Ajout").Range("encours") = Sheets("Table").Range("F" & Lig)
Sheets("Ajout").Range("delegation") = Sheets("Table").Range("G" & Lig)
Sheets("Ajout").Range("type") = Sheets("Table").Range("H" & Lig)
Sheets("Ajout").Range("comment") = Sheets("Table").Range("I" & Lig)
Sheets("ZoneCombinée8").Visible = False
Comme vous pouvez le voir, pour l'instant j'ai défini limité le contenu de la combo au données présente dans les 5premières celulles. J'aimerais également rendre la taille de la combo variable en fonction du nombre de données présentes dans la colonne mais ce que j'utilise ne fonctionne pas non plus j'ai mis le code que j'ai utilisé en commentaire juste au dessus. Si vous avez des idées n'hésitez pas. J'ai déjà eu l'occasion de programmer mais je débute en VBA et je ne suis pas encore à l'aise avec les fonctions propre à VBA.
J'essaie de remplir une combobox à partir de plusieurs cellules. Cela fonctionne dans mon premier onglet mais pas pour le deuxième.
Voici le code pour lequel ça bug :
Dim Plage As String
Dim NumCtrt As String
Dim Lig As Integer
NumCtrt = ""
Call ZoneCombinée8_Remplir("Fiche", "u442118")
'Worksheets("ZoneCombinée8").Select
'Worksheets("ZoneCombinée8").Range("B2").Select
'Worksheets("ZoneCombinée8").Range(Selection, Selection.End(xlDown)).Select
'Plage = Selection.Address
Plage = Range("B1:B5").Address
ComboBox2.ListFillRange = "ZoneCombinée8!" & Plage
Sheets("ZoneCombinée8").Visible = False
'NumCtrt = ComboBox2.Value
With Sheets("Table")
Lig = .Columns(4).Cells.Find(NumCtrt, lookat:=xlWhole).Row
End With
Pour le code ci-dessous cela fonctionne :
Dim Plage As String
Dim NumCtrt As String
Dim Lig As Integer
NumCtrt = ""
'(Worksheets("ZoneCombinée8").Select
'Worksheets("ZoneCombinée8").Range("A2").Select
'Worksheets("ZoneCombinée8").Range(Selection, Selection.End(xlDown)).Select
'Plage = Selection.Address
Plage = Range("A1:A5").Address
ComboBox1.ListFillRange = "ZoneCombinée8!" & Plage
NumCtrt = ComboBox1.Value
With Sheets("Table")
Lig = .Columns(4).Cells.Find(NumCtrt, lookat:=xlWhole).Row
End With
Sheets("Ajout").Range("numCT") = NumCtrt
Sheets("Ajout").Range("Produit") = Sheets("Table").Range("E" & Lig)
Sheets("Ajout").Range("encours") = Sheets("Table").Range("F" & Lig)
Sheets("Ajout").Range("delegation") = Sheets("Table").Range("G" & Lig)
Sheets("Ajout").Range("type") = Sheets("Table").Range("H" & Lig)
Sheets("Ajout").Range("comment") = Sheets("Table").Range("I" & Lig)
Sheets("ZoneCombinée8").Visible = False
Comme vous pouvez le voir, pour l'instant j'ai défini limité le contenu de la combo au données présente dans les 5premières celulles. J'aimerais également rendre la taille de la combo variable en fonction du nombre de données présentes dans la colonne mais ce que j'utilise ne fonctionne pas non plus j'ai mis le code que j'ai utilisé en commentaire juste au dessus. Si vous avez des idées n'hésitez pas. J'ai déjà eu l'occasion de programmer mais je débute en VBA et je ne suis pas encore à l'aise avec les fonctions propre à VBA.
A voir également:
- VBA remplir une combobox à partir de plusieurs cellules
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Somme de plusieurs cellules excel - Guide
- Créer une vidéo à partir de photos - Guide
- Créer une icone à partir d'une image - Guide
Un grand merci !
la partie de code que vous avez montree est ecrite dans quel procedure ??
parce que ceci est une bizarerie
le mieux serait de mettre votre fichier sans donnees sensible a dispo sur https://www.cjoint.com/
Private Sub ComboBox1_Change()
Dim Plage As String
Dim NumCtrt As String
Dim Lig As Integer
NumCtrt = ""
'(Worksheets("ZoneCombinée8").Select
'Worksheets("ZoneCombinée8").Range("A2").Select
'Worksheets("ZoneCombinée8").Range(Selection, Selection.End(xlDown)).Select
'Plage = Selection.Address
Plage = Range("A1:A5").Address
ComboBox1.ListFillRange = "ZoneCombinée8!" & Plage
NumCtrt = ComboBox1.Value
With Sheets("Table")
Lig = .Columns(4).Cells.Find(NumCtrt, lookat:=xlWhole).Row
End With
Sheets("Ajout").Range("numCT") = NumCtrt
Sheets("Ajout").Range("Produit") = Sheets("Table").Range("E" & Lig)
Sheets("Ajout").Range("encours") = Sheets("Table").Range("F" & Lig)
Sheets("Ajout").Range("delegation") = Sheets("Table").Range("G" & Lig)
Sheets("Ajout").Range("type") = Sheets("Table").Range("H" & Lig)
Sheets("Ajout").Range("comment") = Sheets("Table").Range("I" & Lig)
Sheets("ZoneCombinée8").Visible = False
End Sub
Ben oui, c'est une bizarerie. Il ne sert a rien de faire ceci
Plage = Range("A1:A5").AddressComboBox1.ListFillRange = "ZoneCombinée8!" & Plage
dans cette procedure
cela doit etre fait avant dans une procedure d'initialisation et si c'est deja fait, faut enlever ces deux lignes