benz31
Messages postés6Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention12 février 2009
-
11 févr. 2009 à 18:49
cs_cheyenne
Messages postés693Date d'inscriptionsamedi 18 mai 2002StatutMembreDernière intervention17 avril 2017
-
12 févr. 2009 à 11:47
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.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 12 févr. 2009 à 08:44
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' ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 11 févr. 2009 à 20:07
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)
benz31
Messages postés6Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention12 février 2009 11 févr. 2009 à 20:24
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 :
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.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 11 févr. 2009 à 20:54
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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
benz31
Messages postés6Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention12 février 2009 11 févr. 2009 à 21:08
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.
benz31
Messages postés6Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention12 février 2009 11 févr. 2009 à 21:13
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?
benz31
Messages postés6Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention12 février 2009 12 févr. 2009 à 09:18
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
cs_cheyenne
Messages postés693Date d'inscriptionsamedi 18 mai 2002StatutMembreDernière intervention17 avril 20172 12 févr. 2009 à 11:47
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.