Les décimales dans listbox

Bonjour à tous,

Je suis confronté à une listbox rendu automatique avec un code, ne laisse pas apparaître les décimales =00

exmp 12.50=12.5 ou 12.00 =12

voir fichier ci joint

Voir également le code VBA

Merci pour votre aide

Amicalement

noel

43classeur1.zip (7.41 Ko)

Bonjour,

comment remplit tu ton listbox ... , tu devrais regarder le fonctionnement de la fonction FORMAT ..

Bonjour

Je ne vois pas où est le problème : ta listbox est bien le reflet de ton tableau sur la feuille, décimales comprises. Non ?

Bye !

capture

Bonjour GMB,

Si je pose cette question c'est que j'ai regardé le problème sans rien trouver.

C'est vrai ce que tu me dis mais il y a quand même un véritable problème pour les décimales avec les "0" n'apparaissent pas

exp : j'ai bien 4,00 dans la feuille mais pas dans la ListBox.

Certains chiffres pas de problème mais d'autre il un phénomène je pense qui viendrai du code d'agrandissement de la ListBox

Merci

@+

Amicalement

Noel

Ok !

Je n'ai pas d'explication.

Mais, si pour la beauté de la chose tu veux que les données soient présentées au bon format, j'ai un remède. Il consiste à les formater une à une avec une double boucle.

Bye !

92classeur1-v1.zip (22.57 Ko)

Bonjour,

tous tes nombres (sauf 2) sont du texte et non des numériques.

Forcer l'alignement à droite ne résout rien et masque le problème.

Ceux alignés à gauche sont des textes, et ressortent donc tels que tu les vois.

Ils devraient tous être numériques et mis en forme avec format(), fonction qui t'a été indiquée par pierre.jy tout au début.

eric

Bonjour,

Après avoir basculé les valeurs de la plage en numérique, tu peux aussi affecter les données à un tableau en utilisant la propriété Text (ce qui prendra en compte le format), puis affecter ce tableau à la ListBox avec List.

(Cadrer l'alignement du texte à droite dans la ListBox).

Cordialement.

Bonjour à tous,

Gmd m'a donné la solution qui me va.

Un grand merci à vous trois.

Je m'adresse particulièrement à MFerrand qui m'apporte également une solution que je ne comprends pas.

pourrais-tu me donner un exemple sur le fichier.

Merci d'avance

Eric, malheureusement je cerne pas bien les listbox, car je pense qu' je ne peux pas aligner les Textes à gauches et le chiffres à droite.

Parce que quand tu détermines la position des items dans le propriétés c'est valable pour toutes les colonnes ou sinon j'ai rien compris, à moins que j'ai loupé quelque chose surtout de Pierre.jy que je n'ai vraiment pas aperçu sur ce fil.

En tous cas merci de votre aide et bon dimanche

Amicalement

Noel

Je te parlais des données sur ta feuille.

Tu as mal importé les données, tes nombres ne sont pas des nombres (à 2 exceptions près) mais du texte. 2 est un nombre, "2" est un texte

Ca risque de te poser des problèmes par la suite.

Re

Ok Eric. j'ai assimilé.

Ceci est du au format que j'ai déterminé. Parfois le format "#.00" je ne l'ai pas fait. Pour essayer j'ai retaper les chiffres dans la feuille malgré tout il considérait que c'était du texte.

Merci de ton aide

Amicalement

Noel

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.

Bonjour MFerrand,

J'ai essayé le fichier il me semble que si je rajoute voir 2 lignes dans le feuille l'espace entre la dernière ligne et la base de la ListBox s'agrandit également

Est ce normal?

Pour la procèdure suivante :
Sub ConversionTexteNombre()
    Dim c As Range
    For Each c In Selection
        c.Value = Val(Replace(c, ",", "."))
    Next c
End Sub

Si j'ai bien compris cette procédure se trouve dans le module mais à quel moment tu fais appel à elle? pour la plage concernée.

Car je ne vois pas où cela se passe.

Merci

Amicalement

Noel

Comme l'a dit Eric à plusieurs reprises, tes données numériques doivent être des nombres et non du texte !

S'il se trouve que ces données sont textuelles, il convient de les convertir. Donc les sélectionner et lancer cette petite procédure d'appoint qui les convertira, sinon le faire manuellement en éditant chaque cellule pour revalider (Excel identifiera alors un nombre...)

Cette procédure ne sert que s'il y en a besoin, c'est à dire si tes données ne sont pas conformes à ce qu'elles devraient être.

Cordialement

Re

Merci MFerrand.

Je le laisse sous le coude pour utiliser au cas où.

Amicalement

Noel

Rechercher des sujets similaires à "decimales listbox"