Aligner les chiffres à droite dans une listbox

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 !

mutzik

XLDnaute Barbatruc
Bonjour à toutes et tous,

une petite bidouille dont je me sers pour que les chiffres soient alignés à droite dans une listbox, les texte restant alignés à gauche
Cela m'évite d'utiliser les listviews

Dans le fichier, appuyez sur 'Go', les macros doivent être activés

Vérifié avec Defender et Avast

A+
Bertrand
 

Pièces jointes

Bonsoir.
Chez moi en police Calibri taille 12, deux espaces semblent occuper la taille d'un chiffre, et un "-" celui d'un espace.
Ce code m'affiche donc des nombres alignés à droite :
VB:
Private Sub UserForm_Click()
   Dim T(0 To 20), V As Double, N As Integer
   Randomize
   For N = 0 To 20
      V = 10000 ^ Rnd * Sgn(Rnd - 0.5)
      T(N) = Replace(Replace(Right$("?????" & Format(V, "0.0000"), 11), "?", "  "), "-", " -")
      Next N
   ListBox1.List = T
   End Sub
 
Dernière édition:
Celui-ci aussi, par le fait :
VB:
Private Sub UserForm_Click()
   Dim T(0 To 6), V As Double, N As Integer
   Randomize
   For N = 0 To 6
      V = 10000 ^ Rnd * Sgn(Rnd - 0.5)
      T(N) = ADroite(V, 9, 2)
   Next N
   ListBox1.List = T
   End Sub
Private Function ADroite(ByVal V As Double, ByVal LgrTot As Integer, ByVal NbDec As Integer) As String
   ADroite = Format$(V, "0" & String(Sgn(NbDec), ".") & String(NbDec, "0"))
   ADroite = Space$(-(V < 0) + (LgrTot - Len(ADroite)) * 2) & ADroite
   End Function
 
J'ai encore amélioré la Function pour ne pas nécessairement utiliser de format, afin que le nombre de décimal affichées puisse être inférieur nombre spécifié, maxi dans ce cas :
VB:
Private Function ADroite(ByVal V As Double, ByVal NbEnt As Integer, ByVal NbDec As Integer, Optional ByVal Fmt As Boolean = True) As String
   If Fmt Then
      ADroite = Format$(V, "0" & String(Sgn(NbDec), ".") & String(NbDec, "0"))
      ADroite = Space$(-(V < 0) + (1 + NbEnt + Sgn(NbDec) + NbDec - Len(ADroite)) * 2) & ADroite
   Else
      ADroite = Int(V * 10 ^ NbDec + 0.5) / 10 ^ NbDec
      ADroite = Space$(-(V < 0) + (1 + NbEnt + Sgn(NbDec) - InStr(ADroite & ",", ",")) * 2) & ADroite
      End If
   End Function
 
Bonjour à toutes et tous, Dranreb

J'utilise la première version avec format car j'ai remplacé la ligne
ADroite = Format$(V, "0" & String(Sgn(NbDec), ".") & String(NbDec, "0"))
par
ADroite = Format$(V, "# ##0" & String(Sgn(NbDec), ".") & String(NbDec, "0"))

ce qui me permet d'avoir un séparateur de milliers

Et en parlant de milliers, mille mercis de t'être intéressé à ce problème plus facile à résoudre grâce
à ton intervention

Je te souhaite de très bonnes fêtes de fin d'année

NB : il y a des barbatruc qui méritent bien leur titre
 
Bonsoir.
J'ai encore changé ma fonction ADroite :
VB:
Private Function ADroite(ByVal V As Double, ByVal NbEspMax As Integer, Optional ByVal Format As String) As String
   Dim P As Integer, Car As String * 1, NbEspOcc As Integer, NbEspDéb As Integer
   ADroite = VBA.Format$(V, Format)
   For P = 1 To Len(ADroite)
      Car = Mid$(ADroite, P, 1): If Car = "," Then Exit For
      NbEspMax = NbEspMax - 1 + (Car Like "#")
      Next P
   If NbEspMax > 0 Then ADroite = Space$(NbEspMax) & ADroite
   End Function
Et j'ai aussi créé un classeur de démo.
 

Pièces jointes

- 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

Discussions similaires

Retour