Paramétrage Combobox

  • Initiateur de la discussion Initiateur de la discussion Loic04
  • 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 !

L

Loic04

Guest
BOnjour,


Je voulais savoir c'était quoi le mieux pour paramétrer une combobox entre régler un rowsource ou passer par du codage type:

ComboBox1.AddItem ""

Merci.
 
Re : Paramétrage Combobox

Bonjour Loic,

En ce qui me concerne :

-1. Si les données sont statiques, je remplis la case rowsource qui ça sert à ça justement :

Feuil1!A2:A23

-2. Si les données sont dynamiques, et que la ComboBox doit être sans doublons eh ben c’est le code suivant que j’utilise par exemple :

With Sheets("Feuil1")
Me.ComboBox1.RowSource = "Feuil1!A2:A" & Sheets("Feuil1").Range("A65536").End(xlUp).Row
End With

Cordialement, Kim.
 
Dernière édition:
Re : Paramétrage Combobox

Bonjour Loic, Kim, bonjour le forum,

La propriété RowSource peut poser des problèmes dans certains cas. Aussi je l'évite systématiquement. Un ours (il se reconnaîtra) m'a enseigné la propriété List que j'ai adopté depuis, que la liste soit fixe ou dynamique:
Code:
ComboBox1.List = Range("A1:A10").Value
ou
Code:
ComboBox1.List = Range("A1:A" & Cells(Application.Rows.Count, 1).End(xlUp).Row).Value
Pour une liste triée sans doublons j'utilise le code d'un autre ours (Jacques BOISGONTIER), par exemple à l'initilaisation de l'userform qui contient la ComboBox1 :
Code:
Private Sub UserForm_Initialize()
Dim dico As Object 'déclare la variable dico (DICtiOnnaire)
Dim dl As Long 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim tmp As Variant 'déclare la variable tmp (tableau TeMPoraire)

Set dico = CreateObject("Scripting.Dictionary") 'définit la dictionnaire dico
With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
    dl = .Cells(Application.Rows.Count, 1).End(xlUp) 'définit la dernière ligne dl
    Set pl = .Range("A2:A" & dl) 'définit la plage pl
End With 'fin de la prose en compte de l'onglet "Feuil1"
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
    dico(cel.Value) = "" 'alimente le dictionnaire dico
Next cel 'prochaien cellule de la boucle
tmp = dico.keys 'récupère les valeurs du dictionnaire sans doublons
Call tri(tmp, LBound(tmp), UBound(tmp)) 'lance la peocédure de tri par ordre alphabétique
Me.ComboBox1.List = tmp 'alimente la ComboBox1 d'une liste triée et sans doublons
End Sub


Public Sub tri(a As Variant, gauc As Integer, droi As Integer) 'tirée du site de Jacques BOISGONTIER
Dim g As Integer, d As Integer
Dim ref As Variant
Dim temp As Variant
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
        temp = a(g): a(g) = a(d): a(d) = temp
        g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub
 
Re : Paramétrage Combobox

Bonsoir.
Je me demande pourquoi la référence "Microsoft Scripting Runtime" (scrrun.dll) est tellement boudée.
Elle offre des liaisons non tardives avec un Dictionary qui devient un type d'objet connu, et une assistance à la programmation comme pour les autres objets.
Déclarer MonDico As Dictionary et créez l'instance par Set NomDico = New Dictionary, et non plus avec cette calamité qu'est le CreateObject("Scripting.Dictionary")
Cordialement.
 
Re : Paramétrage Combobox

Bonsoir le fil, bonsoir le forum,

Heu oui Bernard... Pour ma part je n'ai toujours pas compris le code de Jacques et je ne fais que le recopier comme un perroquet. Je n'ai aucune idée de ce qu'est un dictionary. J'essaierai d'appliquer ta remarque à l'avenir... Merci pour ce commentaire.
 
Re : Paramétrage Combobox

Bonsoir,
Je me demande pourquoi la référence "Microsoft Scripting Runtime" (scrrun.dll) est tellement boudée.
Elle offre des liaisons non tardives avec un Dictionary qui devient un type d'objet connu, et une assistance à la programmation comme pour les autres objets.
Déclarer MonDico As Dictionary et créez l'instance par Set NomDico = New Dictionary, et non plus avec cette calamité qu'est le CreateObject("Scripting.Dictionary")
D'accord sur le fond avec toi Bernard mais je pense qu'on on ne peut cependant nier l'avantage du CreateObject : le fait de ne pas avoir à cocher la bibliothèque en question, ce qui est quelquefois pratique. Mais il est vrai que le fait d'utiliser une liaison précoce permet de nombreux avantages et donc, de mieux comprendre les propriétés et méthodes de l'objet. Pour ma part, je pense que lorsque l'on utilise un objet que l'on ne connaît pas ou mal, l'utilisation d'une liaison précoce est un avantage dont il serait bête de ne pas tirer profit (je le constate également pour l'utilisation de Microsoft VBScript Regular Expression x.xx).
A+
 
Re : Paramétrage Combobox

Enfin, en théorie, le principal avantage de la liaison précoce c'est un gain de performance puisque la liaison est établie au moment de la compilation et qu'il n'est plus nécessaire, à l'exécution, d'aller chercher d'identifiant de la propriété ou de la méthode pour trouver où elle se situe dans la classe. Maintenant il est possible que dans la plupart des cas le gain soit microscopique, et si en plus l'application est distribué largement à de non avertis, il se peut que tu ait raison.

P.S. Je vais peut être quand même donner mon point de vue sur la question initialement posée.
Si c'est une plage Nommée dont la référence est statique c'est à dire une simple adresse de plage, dont je gère par macro l'évolution de taille: je spécifie le nom dans la propriété RowSource, exclusivement dans la fenêtre de propriétés. Dans tous les autre cas de plages, propriété List comme le préconise Robert. Propriété List aussi si son obtention vient naturellement d'ailleurs sous forme de tableau. Le AddItem quand ce n'est construit qu'au fur et à mesure sur place.

Cordialement.
 
Dernière édition:
Re : Paramétrage Combobox

Re
Enfin, en théorie, le principal avantage de la liaison précoce c'est un gain de performance puisque la liaison est établie au moment de la compilation et qu'il n'est plus nécessaire, à l'exécution, d'aller chercher d'identifiant de la propriété ou de la méthode pour trouver où elle se situe dans la classe. Maintenant il est possible que dans la plupart des cas le gain soit microscopique, et si en plus l'application est distribué largement à de non avertis, il se peut que tu ait raison.
D'accord avec toi sur toute la ligne.

Pour moi, le principal avantage d'une liaison tardive est que lorsque le fichier s'adresse à des non initiés et/ou qu'il est distribué à plusieurs personnes, tu n'as de problème de gestion de la (ou des) bibliothèque(s) à cocher.

Le principal avantage de la liaison précoce est que tu bénéficies de l'autocomplétion, voire de l'aide concernant l'objet lorsqu'elle existe. Ceci aide donc dans la compréhension et la manipulation de l'objet.

Une piste que je commence à explorer depuis peu : lorsque j'utilise un objet que je connais ou maîtrise peu, j'établie d'abord une liaison précoce pour mieux visualiser les propriétés et méthodes de l'objet.
Une fois le code fonctionnel, je modifie éventuellement la liaison précoce en liaison tardive pour ne pas avoir à gérer l'aspect lié au référencement des bibliothèques.
A+
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
7
Affichages
306
Réponses
3
Affichages
332
Réponses
8
Affichages
251
Réponses
40
Affichages
2 K
Réponses
9
Affichages
385
Retour