VBA alignement colonnes combobox [Résolu]

cs_rlapt 63 Messages postés lundi 6 octobre 2003Date d'inscription 25 juin 2013 Dernière intervention - 18 janv. 2012 à 20:40 - Dernière réponse : cs_rlapt 63 Messages postés lundi 6 octobre 2003Date d'inscription 25 juin 2013 Dernière intervention
- 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
Afficher la suite 

Votre réponse

11 réponses

cs_rlapt 63 Messages postés lundi 6 octobre 2003Date d'inscription 25 juin 2013 Dernière intervention - 21 janv. 2012 à 14:02
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_rlapt
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 21 janv. 2012 à 17:12
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 18 janv. 2012 à 20:53
0
Utile
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 18 janv. 2012 à 21:32
0
Utile
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 18 janv. 2012 à 21:44
0
Utile
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 janv. 2012 à 08:28
0
Utile
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
Commenter la réponse de ucfoutu
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 21 janv. 2012 à 14:58
0
Utile
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
Commenter la réponse de LIBRE_MAX
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 21 janv. 2012 à 15:55
0
Utile
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
Commenter la réponse de ucfoutu
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 21 janv. 2012 à 16:17
0
Utile
"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.
Commenter la réponse de LIBRE_MAX
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 21 janv. 2012 à 17:03
0
Utile
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
Commenter la réponse de ucfoutu
cs_rlapt 63 Messages postés lundi 6 octobre 2003Date d'inscription 25 juin 2013 Dernière intervention - 21 janv. 2012 à 19:33
0
Utile
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
Commenter la réponse de cs_rlapt

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.