Remplir listbox avec des décimaux

Résolu
stick25 Messages postés 64 Date d'inscription jeudi 4 mars 2010 Statut Membre Dernière intervention 17 juin 2010 - 24 mars 2010 à 11:46
stick25 Messages postés 64 Date d'inscription jeudi 4 mars 2010 Statut Membre Dernière intervention 17 juin 2010 - 25 mars 2010 à 12:06
Bonjour, encore moi je sais mais ça vient bon !

J'ai besoin de votre aide car je rencontre un problème pour remplir une listbox. Il faudrait que celle-ci puisse contenir des décimaux (les données que j'y importent sont décimales et j'aimerais conserver ce format ; càd éviter de multiplier par 1000 pour avoir des entiers).
J'arrive à insérer des points sous la forme "12.054" mais il faudrait "12,054" car par la suite j'utilise les valeurs de la listbox dans différents calculs.

Mon code est le suivant :

CommonDialog1.ShowOpen
If CommonDialog1.FileName = "" Then MsgBox "Vous n'avez rien sélectionné": Exit Sub
Open CommonDialog1.FileName For Input As #1

Dim ligne As String
Dim i As Integer
Dim w As String
Dim valeurs As Variant
Dim sd As Variant
Input #1, ligne
w = InputBox("Quel est le séparateur des cordonnées ?" & VBA.Chr(13) & VBA.Chr(10) & "1ère coordonnées trouvées dans votre fichier :  " & VBA.Chr(10) & ligne)
valeurs = Split(ligne, w)                                              'on sépare selon le séparateur entré plus haut
Liste.Lstb_pts.AddItem (valeurs(0))
Liste.Lstb_pts.List(Liste.Lstb_pts.ListCount - 1, 1) = valeurs(1)
Liste.Lstb_pts.List(Liste.Lstb_pts.ListCount - 1, 2) = valeurs(2)
Liste.Lstb_pts.List(Liste.Lstb_pts.ListCount - 1, 3) = valeurs(3)

While Not EOF(1)                                                      
Input #1, ligne
                                    
valeurs = Split(ligne, w)
Liste.Lstb_pts.AddItem (valeurs(0))
Liste.Lstb_pts.List(Liste.Lstb_pts.ListCount - 1, 1) = valeurs(1)
Liste.Lstb_pts.List(Liste.Lstb_pts.ListCount - 1, 2) = valeurs(2)
Liste.Lstb_pts.List(Liste.Lstb_pts.ListCount - 1, 3) = valeurs(3)

Wend

Close #1

Si je suis obligé de séparer les données par un " " et supprimer la inputbox ça ne me dérange pas.
Il me semble que le problème est que dès qu'il rencontre une virgule le programme croit qu'il faut aller à la ligne.

J'espère que c'est possible est que vous allez pouvoir m'aider !
Merci par avance.

13 réponses

cs_pacadebord Messages postés 113 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 19 décembre 2011 2
24 mars 2010 à 12:20
Bonjour,
Tu es dans quoi ? du vb ou du vba ?
Je résume ce que je vois : tu ouvres un fichier qui contient des valeurs décimales qui sont insérées dans une listbox.
Utilise LineInput qui prend la ligne entière plutôt que input qui prend des valeurs séparées par une virgule. Dans ce cas, plus de problème pour entrer dans la listbox.

Pac
3
cs_pacadebord Messages postés 113 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 19 décembre 2011 2
24 mars 2010 à 12:25
Bon, et puis ton code (c'est le plus bô du monde parce que c'est toi qui l'a fait) est mal foutu. Si tu veux, on peut te le convertir en code plus académique vb.
Par exemple remplacer VBA.Chr(13) & VBA.Chr(10) par VbCrLf...

Pac
0
Profil bloqué
24 mars 2010 à 12:47
Salut stick25

Evite d'utiliser le type variant : dans ton cas valeurs est un tableau de string ( chaine de caractères)
Il serait plus que souhaitable pour ceux qui veulent t'aider de connaître comment est structuré ton fichier où tu vas chercher les valeurs : ainsi un code bien plus optimisé et bien plus clair pour toi pourrait t'être proposé

autre chose : les listbox, textbox et autres contrôles affichent des variables sous forme de String
Je suppose que tu as 4 valeurs par ligne (les fameuses X, Y, Z et t de nos précédents échanges) et que celles-ci sont séparées par un caractère bien défini

Dans ce cas LineInput est tout indiqué


La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
24 mars 2010 à 14:41
Bonjour,

Non, c'est l'instruction INPUT (INPUT est le pendant de WRITE) qui pose pb :
Input #1, ligne
lit un champ, les champs étant séparés par des virgules ...

Utilises plutot :
Line Input #1, ligne

Mon site
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
24 mars 2010 à 14:42
J'ai oublié de rafraichir la page ...

Galain est beaucoup plus complet que moi.
0
cs_pacadebord Messages postés 113 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 19 décembre 2011 2
24 mars 2010 à 14:47
Oh eh oh ! preums !



Pac
0
stick25 Messages postés 64 Date d'inscription jeudi 4 mars 2010 Statut Membre Dernière intervention 17 juin 2010
24 mars 2010 à 15:01
Merci beaucoup pour vos réponses et désolé pour mon style de programmation plutôt brouillon. Merci.

Grâce à line input, en effet, plus de problème.

Maintenant encore un petit problème, le dernier de la série j'espère. Le fichier de *.txt que j'importe dans ma listbox vient de calculs Matlab, et les séparateurs décimaux sont des points.
J'aimerais alors lors de l'import dans ma listbox convertir ces points en virgule.
Deux questions se posent alors :
- à quel moment de mon code faire cette conversion : avant l'écriture dans la listbox ou après. Peut-être mieux, si c'est réalisable, de le faire avant, pour éviter de remplir 2 fois la listbox.
- quel code écrire ? j'ai regarder dans l'aide la fonction replace mais pas évident encore une fois de m'en sortir seul ^^
J'ai écris après l'insertion dans la listbox
For i = 0 To Liste.Lstb_pts.ListCount - 1
Replace(Liste.Lstb_pts.List(i, 0), ".", ",")

Mais erreur : "attendu : ="

Encore une fois un énoooorme merci de votre aide.
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
24 mars 2010 à 15:19
Bonjour,

Liste.Lstb_pts.List(i, 0)=Replace(Liste.Lstb_pts.List(i, 0), ".", ",")
Plutôt, il me semble.

Mon site
0
cs_pacadebord Messages postés 113 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 19 décembre 2011 2
24 mars 2010 à 15:21
Ou juste avant l'insertion dans la listbox comme suit :

    valeurs(0) = Replace(valeurs(0),".",",")
    Liste.Lstb_pts.AddItem (valeurs(0))


Pac
0
stick25 Messages postés 64 Date d'inscription jeudi 4 mars 2010 Statut Membre Dernière intervention 17 juin 2010
24 mars 2010 à 15:25
Yes, ça marche, merci !!!!

Je résonne encore trop en français en non en programmation !

Merci à vous tous
0
cs_pacadebord Messages postés 113 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 19 décembre 2011 2
24 mars 2010 à 15:36
Ne pas oublier d'indiquer que ton problème est RESOLU.

Pac
0
Profil bloqué
24 mars 2010 à 15:42
Salut Stick25
J'ai comme l'impression que tu ne connais pas la différence entre une fonction et un sous-programme
- Replace étant une fonction elle demande un paramètre en sortie et des paramètres en entrée : a = f(x,y...) --> a est le paramètre de sortie, f est la fonction et x,y ... sont les paramètres d'entrée
- Un sous-programme a des paramètres d'entrée mais ne retourne aucune valeur en sortie
Notes que les paramètres d'entrée peuvent être optionnels ou inexistants dans un sous-programme

Autre chose : dans nos précédents postes on allait chercher des valeurs dans la listbox pour trier et rechercher des valeurs particulières: j'espère que le fait de modifier le point décimal en virgule ne va pas fausser le bon déroulement du programme. si dans les listbox le remplacement ne pose aucun problème c'est tout bon

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
stick25 Messages postés 64 Date d'inscription jeudi 4 mars 2010 Statut Membre Dernière intervention 17 juin 2010
25 mars 2010 à 12:06
Merci Alain pour ton aide et tes informations qui me permettent de progresser de jour en jour.
Le fait de modifier le point décimal en virgule change rien pour le bon fonctionnement du programme.
Encore merci pour tout
0
Rejoignez-nous