Dans une Listbox multi colonnes, il n'est pas possible de choisir un cadrage individuel par colonne. Tout est à gauche, centré, ou à droite.
Pour une présentation correcte, le texte se cadre en général à gauche et les nombres à droite. Les nombres doivent donc être mises en forme au préalable.
Voici une méthode simple de cadrage, qui se base sur la taille des caractères composant le nombre à afficher. Cette méthode fonctionne quelque soit la police utilisée.
Préalable :
Dans une feuille de calcul, rentrez des données dans les 3 premières colonnes (une 20aine de lignes suffisent pour l'exemple).
Les colonnes 1 et 2 contiendront du texte. La colonne 3 des nombres (en négatif, en positif, petits et grands).
En VB :
Créer un UserForm (taille = moitié de l'écran)
Créer une ListBox (taille = un peu moins large que le formulaire)
Créer un Label sous la ListBox. Il servira pour le formatage
Créer un bouton de commande
Important : La police (font/taille/style) doit être identique pour le Label et pour la ListBox
Le code suivant charge la liste avec les données de la feuille de calcul.
Les montants sont alignés à droite.
Un test est fait sur le contenu de la cellule montant pour éviter d'entrer dans une boucle sans fin si celle-ci est vide (ou égale à un ou plusieurs espaces).
' Pour réaffecter les montants de la ListBox vers une feuille de calcul, il faudra supprimer les espaces.
' Exemple : Cells(1, 4) = Replace(ListBox1.Column(2, 0), " ", "")
Pour une présentation correcte, le texte se cadre en général à gauche et les nombres à droite. Les nombres doivent donc être mises en forme au préalable.
Voici une méthode simple de cadrage, qui se base sur la taille des caractères composant le nombre à afficher. Cette méthode fonctionne quelque soit la police utilisée.
Préalable :
Dans une feuille de calcul, rentrez des données dans les 3 premières colonnes (une 20aine de lignes suffisent pour l'exemple).
Les colonnes 1 et 2 contiendront du texte. La colonne 3 des nombres (en négatif, en positif, petits et grands).
En VB :
Créer un UserForm (taille = moitié de l'écran)
Créer une ListBox (taille = un peu moins large que le formulaire)
Créer un Label sous la ListBox. Il servira pour le formatage
Créer un bouton de commande
Important : La police (font/taille/style) doit être identique pour le Label et pour la ListBox
Le code suivant charge la liste avec les données de la feuille de calcul.
Les montants sont alignés à droite.
Un test est fait sur le contenu de la cellule montant pour éviter d'entrer dans une boucle sans fin si celle-ci est vide (ou égale à un ou plusieurs espaces).
Code:
Private Sub CommandButton1_Click()
ListBox1.Clear
ListBox1.ColumnCount = 4 ' Nombre de colonnes (la dernière servira pour visualiser les limites de la colonne 3)
ListBox1.ColumnWidths = "100;100;60;20" ' Taille des colonnes en points
Label1.Visible = False
i1 = 0 ' Nombre de ligne dans ListBox
a$ = "" ' Pour mise en forme des nombres
For i = 1 To 20 ' Charge 20 lignes de la feuille de calcul
ListBox1.AddItem "", i1 ' + 1 ligne en i1
ListBox1.Column(0, i1) = Cells(i, 1)
ListBox1.Column(1, i1) = Cells(i, 2)
' Mise en forme des montants
a$ = Format(Cells(i, 3), "# ### ##0.00") ' Met la valeur dans a$ avec un format spécifique
If a$<>"" then ' si a$=vide, on entre dans une boucle sans fin car Label.with renverra
' toujours la même valeur
Do
Label1.AutoSize = False ' Pas d'ajustement du label
Label1.Width = 300 ' largeur à 300 (pour les grands nombres)
Label1 = a$ ' Place le montant
Label1.AutoSize = True ' Taille du label=taille du texte
If Label1.Width < 50 Then ' Taille inférieure à la taille de la colonne ? (colonne de 60 mais teste sur 50 pour laisser une marge après)
a$ = " " & a$ ' Oui : Ajoute un espace devant et boucle
Else
Exit Do ' Non : Sort
End If
Loop
Else
a$=" " ' Force a$ à un espace
End If
ListBox1.Column(2, i1) = a$ ' Place le résultat dans la liste
ListBox1.Column(3, i1) = "|" ' Caractère droit en dernier pour voir les limites de la colonne précédente
i1 = i1 + 1 ' Incrémente le compteur de lignes
Next i
End Sub
' Pour réaffecter les montants de la ListBox vers une feuille de calcul, il faudra supprimer les espaces.
' Exemple : Cells(1, 4) = Replace(ListBox1.Column(2, 0), " ", "")
Dernière édition: