Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Combobox alimentée de deux manières sous condition

  • Initiateur de la discussion Initiateur de la discussion donpopo
  • Date de début Date de début

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 !

donpopo

XLDnaute Occasionnel
Bonjour le forum,

J'ai un userform qui comporte, entre autre, un Checkbox et une combobox. La combobox est alimentée par une liste venant d'une feuille.

Je souhaiterais, que, si je coche la Checkbox (True), seul un élément de la combobox soit accessible.

J'ai joint un petit exemple pour mieux m'expliquer.

Merci d'avance

Donpopo
 

Pièces jointes

Re : Combobox alimentée de deux manières sous condition

Bonjour Donpopo

J'ai trouver cette solution.
====================================================================================================
Private Sub CheckBox1_Change()
If CheckBox1 = True Then
ComboBox1.RowSource = Empty
ComboBox1.Value = "Pierre"
Else
ComboBox1.RowSource = "O1:O8"
End If
End Sub
=====================================================================================================
Private Sub UserForm_Initialize()
ComboBox1.RowSource = "O1:O8" ' Vous avez écrit comme cela (ComboBox1.RowSource = "ListeCombo")
End Sub
=====================================================================================================

Pouvez vous m'expliquer comment vous faite pour parametrer "ListeCombo" ?

J'ai pas compris comment cette variable à était paramétrer (C'est de vous ou une commande VBA au même titre que RowSouce ?

et aussi pour le Début de la liste est la fin (C'est a dire Ligne Colonne = Moi J'ai paramétrer comme cela "O1:O8")

Ps = Je ne suis pour l'instant jamais arriver a paramétrer autrement que cela "O1:O8" Car en équivalence "Range(cells(1,15),Cells(8,15))"

Ne fonctionne pas ? Si vous avez une solution Merci J'avais penser a utiliser la commande ASSII Mais c'est asser lourd.

Au plaisir de vous lire

Laurent
 
Dernière édition:
Re : Combobox alimentée de deux manières sous condition

bonjour donpopo laurent950
question c'est quoi la finalité????? il faut être le plus explicit possible il y a énormement de méthodes pour l'ecrire je vois que tu pars avec rowsource a bannir!!!!
je vais utiliser .list & AddItem pour un exemple mais sans plus d'infos pas simple!!!

code user
Code:
Dim t As Variant
Private Sub UserForm_Initialize()
t = Range("o1:o" & Cells(Rows.Count, 15).End(xlUp).Row): ComboBox1.List = t
End Sub
Private Sub CheckBox1_Click()
If CheckBox1 = True Then
ComboBox1.Clear
ComboBox1.AddItem "pierre"
ComboBox1.ListIndex = 0
Else
t = Range("o1:o" & Cells(Rows.Count, 15).End(xlUp).Row): ComboBox1.List = t
ComboBox1.ListIndex = 0
End If
End Sub

c'est du trés brut
 
Re : Combobox alimentée de deux manières sous condition

bonjour
plus performant que rowsource

Private Sub CheckBox1_Change()
If CheckBox1 = True Then
ComboBox1.Clear
ComboBox1.AddItem "Pierre"
ComboBox1.Value = "Pierre" 'ou combobox1.listindex=0 pour afficher
Else
ComboBox1.Clear
ComboBox1.List = Range("ListeCombo").Value
End If
End Sub

Private Sub UserForm_Initialize()
'listecombo défini dans insertion nom définir emploi de la fonction décaler
ComboBox1.List = Range("ListeCombo").Value
End Sub

à bientôt
 
Re : Combobox alimentée de deux manières sous condition

Bonjour Laurent 950,

En fait, il faut sélectionner dans l'onglet 'Formules' de Excel, 'Gestionnaire de nom' et là créer un nom qui reprend la formule suivante:
decaler(Feuil1!$A$1;;nbval(Feuil1!$A:$A))

Dans cette formule, Feuil1 représente la feuille où se trouve la liste à mettre dans le combobox; $A$1 est la première ligne de la colonne concernée par la série; cela peut débuter en $A$4 ou autre; nbval permet de sélectionner la colonne concernée (A). cela permet d'ajouter à la colonne A des éléments; ceux-ci seront repris automatiquement dans la liste.

A+

Donpopo
 
Re : Combobox alimentée de deux manières sous condition

Bonjour donpopo, Bebere, Leatitia90.

Mer pour ta réponse donpopo, j'apprend aussi beaucoup avec le forum.

Voila aprés avoir annalysé des diffrérentes macro ce que je retients :

' les ":" pour évité le retour a la ligne ?
' t = Range(Cells(1, 15), Cells(8, 15).End(xlUp)) : ComboBox1.List = t
' AddItem (évite le = ) ? ont aurait pu écrire comme cela
' ComboBox1.AddItem "pierre" pour ComboBox1.value = "pierre"
' Intitialisation de la liste a 0 soit le premier de la liste
' ComboBox1.ListIndex = 0
' Remplacement des en tête de colonne pour plus de facilité
' Range(Cells(1, 15), Cells(8, 15).End(xlUp)) car les chiffres peuvent être remplacer par des variables

==================================================================
Sub Test()
Dim t As Variant
Private Sub UserForm_Initialize()
t = Range(Cells(1, 15), Cells(8, 15).End(xlUp))
ComboBox1.List = t
End Sub
Private Sub CheckBox1_Click()
If CheckBox1 = True Then
ComboBox1.Clear
ComboBox1.AddItem "pierre"
ComboBox1.ListIndex = 0
Else
ComboBox1.List = t
ComboBox1.ListIndex = 0
End If
End Sub

= = = = = = = = = = = = = = = = == = = == = = = = == = = = == = = = = == = = = == = = =

Ps : si je me suis tromper ou si il y a des régles établis en VBA avec les mots reserver pouvez vous me conseiller ou m'aiguiller.

Au plaisir de vous répondre et merci a vous.
 
Dernière édition:
Re : Combobox alimentée de deux manières sous condition

re,
en 1 je vais dire bonjour a l'ami bebére qui a une bonne analyse 🙂🙂
un debut explication
les : c'est de la variable Objet ...pas du tout c'est pour simplifier le code c'est la suite du code a deconseiller quand meme il vaut mieux indenter le code

ecrire comme cela plus transparent
Code:
t = Range("o1:o" & Cells(Rows.Count, 15).End(xlUp).Row)
ComboBox1.List = t
surtout que que sur certains cas cela marche pas

autrement RowSource
Impossibilité de faire une sélection filtrée des items ou de les trier, ou de faire un Remove ou un Additem

ideal c'est de passer par des "tablo" dynamique plus complexe a mettre en oeuvre mais plus simple a manipuler
type de code

Code:
For i = LBound(T) To UBound(T)
    If T(i, 1) <> "" Then
    ReDim Preserve Tablo(x)
    Tablo(x) = T(i, 1)
    x = x + 1
    End If
    Next

        For i = LBound(Tablo) To UBound(Tablo)
                For j = LBound(Tablo) + ii To UBound(Tablo)
                    If Tablo(i) > Tablo(j) Then
                        Tmp1 = Tablo(j): Tmp2 = Tablo(j)
                        Tablo(j) = Tablo(i): Tablo(j) = Tablo(i)
                        Tablo(i) = Tmp1: Tablo(i) = Tmp2
                    End If
                Next j
        ii = ii + 1
        Next i
 
Re : Combobox alimentée de deux manières sous condition

bonsoir
question rapidité en 1 range,en 2 objet,en 3 les tableaux mais bien déclarer les variables(exemple l as long,c as integer,pas variant plus lent
à bientôt
 
- 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

Discussions similaires

Réponses
40
Affichages
2 K
Réponses
1
Affichages
236
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…