Bonjour,
Illustration de mes propos :
1) Conversion de la plage de données incriminée en nombres (j'ai utilisé une petite proc. à lancer après sélection de la plage) :
Sub ConversionTexteNombre()
Dim c As Range
For Each c In Selection
c.Value = Val(Replace(c, ",", "."))
Next c
End Sub
2) ListBox (fenêtre Propriétés) : propriété TextAlign passée à 3-Alignement à droite.
(En ce qui concerne les problèmes de format ou apparentés, il ne faut jamais perdre de vue que les données affichées dans des contrôles sont par définition de type String : si lors d'affectations de ces données à une feuille de calcul, on peut généralement procéder directement et retrouver les types de données d'origine, c'est que soit VBA, soit le plus souvent Excel en opère spontanément la conversion... mais il peut arriver que ce ne soit pas le cas.)
3) Initialize :
Private Sub UserForm_Initialize()
Dim T(), dln%, i%, j%
With ActiveSheet
dln = .Range("E" & .Rows.Count).End(xlUp).Row
ReDim T(dln - 2, 6)
With .Range("E2:K" & dln)
For i = 1 To dln - 1
For j = 1 To 7
T(i - 1, j - 1) = .Cells(i, j).Text
Next j
Next i
End With
End With
With ListBox1
.Height = ((dln - 1) * 125 + 110) / 9
.List = T
For i = 1 To 2
Controls("TextBox" & i).Top = .Top + .Height + 9
Next i
End With
End Sub
Les valeurs à retrouver dans la ListBox sont affectées à un tableau (T) au moyen d'une boucle : on utilise la propriété Text des cellules au lieu de Value, ce qui permet aux données recueillies d'être formatées (telles qu'elles apparaissent dans la plage).
On affecte le tableau à la ListBox en utilisant sa propriété List.
Les dernières lignes ajustent la position des TextBox afin qu'ils ne soient pas masqués par l'extension de la ListBox.
Un point que je n'ai pas creusé : il semblerait que même si la propriété ColumnHeads est définie sur True, l'affectation avec List ne fait pas apparaître d'en-têtes (?) [A voir ! Je ne suis pas familier de cette utilisation...]
Cordialement.