VBA alignement colonnes combobox

Résolu
cs_rlapt Messages postés 63 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 25 juin 2013 - 18 janv. 2012 à 20:40
cs_rlapt Messages postés 63 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 25 juin 2013 - 21 janv. 2012 à 19:33
Bonjour,
En VBA, lorsque l'on utilise un ComboBox, est-t'il possible de programmer l'alignement de chacune des colonnes de la liste déroulante ?
J'ai une liste déroulante dans un ComboBox avec :
- sur la première colonne des nombres (alignement à droite)
- sur la deuxième colonne l'explication du nombre de la première colonne (alignement à gauche).
La valeur récupérée de la liste déroulante du ComboBox est donc un nombre. J'ai donc programmé un alignement à droite. LE problème est que les deux colonnes de la liste sont également alignées à droite. Ce n'est pas très convivial sans parler de l'esthétique.
Avez-vous une solution ?
Merci d'avance.Lire la suite VBA Alignement des colonnes d'une liste dérou »

RLAPT

11 réponses

cs_rlapt Messages postés 63 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 25 juin 2013
21 janv. 2012 à 14:02
Bonjour,

Quelle pétulance!

Merci de vous être soucié de mes difficultés. En fait j'ai résolu le problème en alignant à gauche. Moins joli dans l'affichage de la valeur du contrôle. Mais tellement plus simple.

J'avais déjà trouvé une solution similaire sur le lien suivant.
http://www.developpez.net/forums/d751070/logiciels/microsoft-office/excel/macros-vba-excel/probleme-aligner-entrees-multicolonnes-listbox/

Par contre cette solution, si elle affiche bien dans la liste déroulante et dans la valeur du contrôle, récupère la totalité de ce qui est pour moi deux colonnes. Or, mes deux colonne comportent, pour la première une valeur numérique que je veux récupérer et pour la deuxième l'explication de celle-ci.

Il y à bien l'idée de faire deux colonnes :
La première avec la valeur numérique
La seconde avec la concaténation formatée des deux informations.
et de :
Fixer à 1 la propriété .columnBound
Remplir la propriété ColunmsWidths avec une largeur de 0 à pour la première colonne.
Reste la difficulté que après sélection la valeur affichée est la valeur concaténée.

Peut être, y a t'il une solution ?

Pour information, aucun utilisateur n'a remarqué que la valeur numérique était alignée à gauche. Comme quoi on se pose des difficultés qui n'en sont pas.

En tout cas merci du temps passé.
RLAPT
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 janv. 2012 à 17:12
Allez !

Une petite demo qui parlera d'elle-même.
Pour mettre en oeuvre ce que j'ai dit bien plus haut et ne pas s'éterniser pour rien :

fint = "@@@@@@@@"
  fdec = "########.00"
  With ComboBox1
    .ColumnCount = 3
    .Font.Size = 10
    .Font.Name = "Courier"
    .ColumnWidths = "50; 80; 20"
    .Width = 200
    .AddItem
    .List(0, 0) = "blabla"
    .List(0, 1) = Format(Format(241.2, fdec), fint)
    .List(0, 2) = Format(1441, fint)
    .AddItem
    .List(1, 0) = "coucou"
    .List(1, 1) = Format(Format(1.25, fdec), fint)
    .List(1, 2) = Format(1, fint)
    .AddItem
    .List(2, 0) = "bye"
    .List(2, 1) = Format(Format(3847, fdec), fint)
    .List(2, 2) = Format(22, fint)
  End With



et de cette manière, on a les vraies colonnes et les vraies lignes, auxquelles ont peut se référencer normalement
exemple :
MsgBox ComboBox1.List(1, 2)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 janv. 2012 à 20:53
Bonjour,
Oui ===>> propriété TextAlign dans ton aide VBA ==>>> mais ===>>> s'appliquera à la totalité de ta combobox, car non "individualisable" à ma connaissance.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 janv. 2012 à 21:32
Regarde par contre ce que fait ceci : dans cet exemple, pour simplifier : une seule colonne
 Private Sub CommandButton1_Click()
   ComboBox1.Font.Name = "Courier"
   ComboBox1.AddItem 1
   ComboBox1.AddItem Format(1, "@@@@@@@")
   ComboBox1.AddItem Format(111, "@@@@@@@")
   ComboBox1.AddItem Format(1111, "@@@@@@@")
   ComboBox1.AddItem 3
   ComboBox1.AddItem Format(2, "@@@@@@@")
   ComboBox1.AddItem Format(222, "@@@@@@@")
   ComboBox1.AddItem Format(222, "@@@@@@@")
End Sub

Vu ? Compris ? ==>> te reste plus qu'à utiliser à ton gré, selon la colonne

Attention : observe la première ligne, qui dit :
ComboBox1.Font.Name = "Courier"

Elle est très importante, car cette police de caractères est à espacement fixe. Il t'est bien évidemment possible d'en choisir une autre, à condition qu'elle soit à espacement fixe .
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 janv. 2012 à 21:44
Bon..;
Je devine la question qui va venir et y réponds à l'avance (car je m'en vais au dodo) :

regarde, maintenant :
Private Sub CommandButton1_Click()
   ComboBox1.Font.Name = "Courier"
   ComboBox1.AddItem 1
   ComboBox1.AddItem Format(Format(1.2, "####.00"), "@@@@@@@")
   ComboBox1.AddItem Format(Format(111, "####.00"), "@@@@@@@")
   ComboBox1.AddItem Format(Format(11.5, "####.00"), "@@@@@@@")
End Sub


Compris ? Bien. Bonne nuit.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 janv. 2012 à 08:28
Alors ?
Et la suite ?



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
21 janv. 2012 à 14:58
Bonjour,

voir ce que tu peux en tirer.


'http://www.freevbcode.com/ShowCode.asp?ID=1266

'Alignement à droite d'items tels que des 'valeurs numériques

Private Const LB_SETTABSTOPS = &H192

Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long

Private Sub Form_Load()
'DEMO: ADD A LISTBOX TO THE FORM
'FOR THE DEMO TO WORK

'Must be a long or integer array
Dim mTabs(0) As Long

'Set the a tab stop to a negative number
mTabs(0) = -40
SendMessage List1.hwnd, LB_SETTABSTOPS, 1, mTabs(0)
List1.Clear
List1.AddItem vbTab & "21321"
List1.AddItem vbTab & "2321"
List1.AddItem vbTab & "2411"
List1.AddItem vbTab & "12"
List1.AddItem vbTab & "12142"
List1.AddItem vbTab & "2221"
List1.Refresh

End Sub
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 janv. 2012 à 15:55
A LIBRE_MAX :

Je te mets au défi d'appliquer ton code à une combobox ou à une listbox de VBA/Excel . Et pas uniquement en raison de ce qu'il t'en faudra extraire le handle (ce que l'on perut faire par une autre fonction de l'Api de Windows.
Soyons sérieux ! Les contrôles listbox et ComboBox de VBA ne sont pas ceux de VB6

A rlapt :

Je ne sais pas si je "ne manque pas de pétulance", mais :
- tu en manques, apparemment
- tu mets le tag "réponse acceptée" sur ta propre réponse, qui n'est de surcroît pas la solution de ton problème !
- je t'avais pourtant donné une solution efficace ! Qu'en as-tu donc fait ?
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
21 janv. 2012 à 16:17
"voir ce que tu peux en tirer"

dixit, avec tout le sérieux du monde.. [] Ce qui va sans dire. va mieux en le disant.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 janv. 2012 à 17:03
Il ne pourra rien en tirer !

Je sais extraire le hwnd de ces contrôles (avec une astuce, notamment si plusieurs contrôles de la même espèce), mais === >>>

Voilà plus de 9 mois que je cherche les constantes qu'attend la fonction SendMessage concernant les listboxes et les comboboxes de VBA/Excel

Voilà

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_rlapt Messages postés 63 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 25 juin 2013
21 janv. 2012 à 19:33
Merci à tous de votre aide et surtout du temps que vous avez bien voulu m'accorder.

Je conserve vos idées pour les cas où la mise en forme sera vraiment trop déplorable.

Bonne soirée

RLAPT
0
Rejoignez-nous