Remplir listbox avec des décimaux [Résolu]

Messages postés
64
Date d'inscription
jeudi 4 mars 2010
Statut
Membre
Dernière intervention
17 juin 2010
- - Dernière réponse : 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.
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
113
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2011
2
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 145 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_pacadebord
Messages postés
113
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2011
2
0
Merci
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
Commenter la réponse de cs_pacadebord
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
6
0
Merci
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
Commenter la réponse de cs_Galain
Messages postés
14457
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2019
130
0
Merci
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
Commenter la réponse de NHenry
Messages postés
14457
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2019
130
0
Merci
J'ai oublié de rafraichir la page ...

Galain est beaucoup plus complet que moi.
Commenter la réponse de NHenry
Messages postés
113
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2011
2
0
Merci
Oh eh oh ! preums !



Pac
Commenter la réponse de cs_pacadebord
Messages postés
64
Date d'inscription
jeudi 4 mars 2010
Statut
Membre
Dernière intervention
17 juin 2010
0
Merci
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.
Commenter la réponse de stick25
Messages postés
14457
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2019
130
0
Merci
Bonjour,

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

Mon site
Commenter la réponse de NHenry
Messages postés
113
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2011
2
0
Merci
Ou juste avant l'insertion dans la listbox comme suit :

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


Pac
Commenter la réponse de cs_pacadebord
Messages postés
64
Date d'inscription
jeudi 4 mars 2010
Statut
Membre
Dernière intervention
17 juin 2010
0
Merci
Yes, ça marche, merci !!!!

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

Merci à vous tous
Commenter la réponse de stick25
Messages postés
113
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2011
2
0
Merci
Ne pas oublier d'indiquer que ton problème est RESOLU.

Pac
Commenter la réponse de cs_pacadebord
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
6
0
Merci
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
Commenter la réponse de cs_Galain
Messages postés
64
Date d'inscription
jeudi 4 mars 2010
Statut
Membre
Dernière intervention
17 juin 2010
0
Merci
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
Commenter la réponse de stick25