Excel et Combobox

Résolu
Signaler
Messages postés
6
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
12 février 2009
-
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
-
Bonsoir,

Aprés avoir effectuer de nombreuses recherches sans succés je fais appel à votre aide. Je voulais savoir si il était possible de garder la même mise en forme d'excel (police : taille, couleur, ...) dans un combobox. En fait, je rempli une combobox à l'aide d'un fichier Excel et j'aimerai que ma combobox garde la meme mise enfore que ce qu'il y a dans excel. J'espère avoir été assez clair. Je vous remercie de votre aide.

Cordialement

Benoit

9 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Comme je te l'ai dit, il n'est pas possible de personaliser la liste des items lors de la présentation des items quand on clique sur le bouton, uniquement après qu'un choix a été fait, la colorisation concerne tous les items de la Combo.

Comme je l'ai aussi dit, si tu veux personaliser la liste, il faut faire un SubClassing de l'évènement d'appel (quand on clique sur le triangle) pour l'intercepter avant le système + afficher une zone graphique + récupérer tous les éléments de la liste + personaliser l'affichage (*) + gérer le clic de sélection
(*) il te faudra bien faire une recherche dans les items de ta DB pour savoir s'il est rouge ou pas.
C'est faisable, mais très compliqué à mettre au point, surtout sous Excel.

Si tu as VB6, tu peux regarder parmi les sources du site celles qui parlent de "combobox personaliser" (recherche)

Pourquoi ne pas repenser ton programme et faire le tri avant : Une Combo pour les clients 'normaux' et une autre pour les clients 'rouges' ?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Salut
Parles-tu de l'aspect de l'item après sélection, et/ou de l'aspect de la liste quand on clique sur le triangle ?
Cette deuxième partie n'est pas faisable avec la ComboBox classique, il faut ajouter une usine à gaz derrière (SubClassing, utilisation d'objets supplémentaires) et je ne pense pas que Excel le supporte bien

Pour la partie présentation après sélection :
Après avoir inséré ta ComboBox sur ta feuille, fait un Clic-Droit et regarde les Propriétés.
Dedans, tu peux jouer avec :
- les fontes (fonte, taille, gras, italic, barré, souligné)
- la couleur
Ces réglages sont uniques pour tous les items de la Combo, tu ne pourras pas insérer des styles différents en fonction des Items, à moins de le programmer dans ComboBox1_Change
Exemple :
Place un Bouton "CommandButton1" et une ComboBox "ComboBox1" sur ta feuille, puis double clique sur l'un deux.
Insère ce code :
Private Sub CommandButton1_Click()
    With ComboBox1
        .AddItem "Coucou"
        .AddItem "Codes-Sources"
        .AddItem "Bonsoir"
    End With
End Sub



Private Sub ComboBox1_Change()
    With ComboBox1
        Select Case .ListIndex
            Case 0
                .Font.Name = "Arial"
                .Font.Size = 10
                .Font.Bold = True
                .Font.Underline = False
            Case 1
                .Font.Name = "Comic Sans MS"
                .Font.Size = 18
                .Font.Bold = False
                .Font.Underline = True
            Case 2
                .Font.Name = "Courier New"
                .Font.Size = 8
                .Font.Bold = True
                .Font.Underline = True
        End Select
    End With
End Sub


Même si tu spécialises les fontes, tu remarqueras que la liste proposée (quand on clique sur le triangle) utilise les caractéristiques actuelles pour l'affichage de tous les items.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés


<hr />
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
6
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
12 février 2009

Merci Jack pour ta réponse. En fait je parle plutot de l'aspect des données se trouvant dans ma Combobox. En fait, j'ai créé une interface graphique (userform) sur laquelle on peut retrouver des liste déroulante (Combobox). Ces listes sont alimentées à partir d'un fichier excel (en fait ce fichier me sert de base de données). Par exemple dans mon fichier excel j'ai une colonne qui correspond à mes clients. Certains de ces clients sont marqués en gras ou avec une couleur rouge. J'aimerai que lorsque j'alimente ma Combobox correspondant à ces clients, je puisse retrouver la couleur rouge et le texte en gras (seulement pour les clients concernés par cet aspect) dans ma liste déroulante (Combobox). Actuellement j'utilise le code suivant pour alimenter ma combobox :

Sub client_list()


   Dim Dernier_client As String
    Windows(classeur_DATA).Visible = True
    Dernier_client = Workbooks(classeur_DATA).Worksheets(feuille_DATA).Range("A2").End(xlDown).Address
    Création_Devis.liste_client.RowSource = "A2:" & Dernier_client
    Création_Devis.liste_client.ListIndex = 0
    Windows(classeur_DATA).Visible = False

End Sub

Le problème c'est qu'avec ce code, ma liste déroulante ne garde pas la mise en forme que j'ai dans mon fichier excel (pas de couleur rouge et pas de texte en gras). Je précise bien que je ne veux qu'il ait tous les clients qui soient en rouge et en gras. Je veux que ma liste déroulante respecte la mise en forme que j'ai choisi sur excel. Je sais que je me répete mais j'ai peur de ne pas etre assez précis. J'ai bien peur qu'il n'y ait pas de solution. Je fais appel à vos neurones amis programmeurs. Merci encore.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Re
Ah bah non, la mise en forme doit être adaptée par programme selon l'item choisi. A toi de gérer.
   If LaCouleurEstRougeDansLeClasseur Then ComboBox1.ForegroundColor = vbRed
A toi de retrouver les attributs de ta cellule pour les recopier dans les propriétés de la ComboBox.

Si, dans ta ComboBox, l'item d'index 0 (le premier) correspond au client qui est en ligne 5 de ta base (le premier), il te suffit de faire un truc du genre (à approfondir) :
   maRow = maComboBox.ListIndex + 5
   maCol = 12   ' la colonne des clients
   maComboBox.ForegroundColor = Cells(maRow, maCol).Font.ColorIndex

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
6
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
12 février 2009

Voila c'ést bien ce qu'il me semblait. Je suis obligé de scanner chaque donnée de ma base de données (fichier excel) pour pouvoir garder la meme mise en forme. Le problème c'est que j'ai plus d'une dizaine de listes déroulantes qu contiennent beaucoup de données. J'espérais qu'il y ait une option qui fasse se travail automatiquement. Mais j'ai bien compris que ce n'est pas le cas. Par conséquent il ne me reste plus qu'à me mettre au travail en essayant de le minimiser au maximum.
Jack je te remercie d'avoir pris le temps de me répondre.  Ta réponse va me permettre de continuer mon projet. Bonne soirée et à bientot.
Messages postés
6
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
12 février 2009

Ah mince j'ai peut etre crié victoire un peu trop vite.  La solution que tu m'as donné Jack ne me permet pas d'attribuer la couleur rouge à un seul élément de ma liste déroulante. D'aprés ta solutio c'est tou le texte de ma liste déroulante que je vais avoir en rouge. Moi je cherche justement a différencier certains éléments de ma liste. Crois tu que c'est possible?
Messages postés
6
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
12 février 2009

J'aimerais avoir une liste déroulante ui ressemble a l'exemple suivant :

liste clients dans fichier excel :     toto
                                                 titi
                                                tata
                                                TUTU
                                                TyTY

et j'aimerais avoir dans ma combobox correspondant aux clients :

                                                toto
                                                 titi
                                                tata
                                                TUTU
                                                TyTY

Je pense que cet exemple illustre assez bien ce que je souhaite obtenir.
Messages postés
6
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
12 février 2009

Merci Jack pour toutes ces précisions. Comme tu me l'as dit je vais essayer de me renseigner sur les Combobox personnalisées. Si je vois que cela demande trop de temps, je garderai ma solution initiale ou sinon je suivrai ta remarque trés perninente qui est de créer 2 listes. Encore merci. A bientot
Cordialement
Benoit
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
Bonjour benz31,

L'idée de Jack d'avoir 2 listes est bonne, mais si la présence  d'un TerxtBox n'est pas requise l'uilisation d'un Hierarchical FlexGrid  apporterait la solution à ton problème.

Amicalement de Cheyenne