Remplir Flexgrid avec données formatées

Résolu
Malokoxis Messages postés 83 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 22 février 2021 - 4 oct. 2013 à 17:01
Malokoxis Messages postés 83 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 22 février 2021 - 8 oct. 2013 à 20:23
Bonjour,

Je souhaite intégrer un MSFlexGrid dans une application.
La liste des données à remplir existe déjà sous forme de texte : 150 lignes, 2 colonnes espacées par des tabulations et les ligne par des retours à la ligne.

Comment puis-je remplir mon flexgrid directement depuis ce format de tableau?

Merci de votre aide.

Malo

10 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 oct. 2013 à 22:49
Bonjour,
Tu ne nous dis rien sur l'origine/emplacement du texte en cause.
Or, la réponse dépend de cette précision.
0
Malokoxis Messages postés 83 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 22 février 2021 2
4 oct. 2013 à 22:56
bonsoir
merci pour ta réponse,

Le texte est dans un fichier texte.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 4/10/2013 à 23:08
Bien,
Il te faut donc commencer par apprendre (avant même de penser à ajouter à une grille) à lire, ligne par ligne, le fichier en cause.
Il te faut pour cela l'ouvrir (instruction Open, en mode lecture (for Input) ligne par ligne (Line Input)
Si tu ne sais pas encore faire cela, ouvre ton aide VB6 sur chacun des mots que j'ai soulignés et lis, ainsi que les exemples d'accompagnement. Cet aspect est par ailleurs l'un des plus récurrents sur ce forum, qui dispose d'un moteur de recherche qui te conduira à un nombre impressionnant de discussions résolues et de codes déposés.
Si tu as déjà passé ce "cap" : il te faudra, pour chaque ligne lue, distinguer les mots séparés par une tabulation. La fonction Split (à lire dans ton aide VB6) est là pour cela et est fort bien exposée dans ton aide.
Si tu rencontres encore une difficulté après ces lectures, reviens nous l'exposer, accompagnée du code tenté pour la résoudre.

Nous ne parlerons du reste (écriture dans la grille) qu'ensuite.
Bonne étude

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Malokoxis Messages postés 83 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 22 février 2021 2
5 oct. 2013 à 20:02
Bonsoir

Merci

J'utilise ce code pour ouvrir le fichier :

Dim Chaine As String
Open FichierBalise For Input As #1
Fichier.Text = ""
Do While Not EOF(1)
Line Input #1, Chaine
Fichier.Text = Fichier.Text & vbCrLf & Chaine
Loop
Close #1


Je n'ai pas encore réussi à utiliser la fonction Split pour résoudre mon problème, malgré l'aide VB6 et la lecture de plusieurs sujets.

J'imagine qu'il faudrait faire un boucle pour rechercher les tabulations et à chaque fois qu'on en trouve une, mettre le texte qui la précède dans le colonne 1 et lae texte qui la suit dans la colonne 2 ?
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 5/10/2013 à 20:24
te rends-tu compte, ai moins, de ce que cette ligne de code :
Fichier.Text = Fichier.Text & vbCrLf & Chaine

te ramène à la case départ ?
Le split est à faire sur chaque ligne, donc chaque variable chaine !
Relis-moi donc ... J'avais pourtant dit clairement :
"il te faudra, pour chaque ligne lue, distinguer les mots séparés par une tabulation" (le split, sur tabulation)
"Je n'ai pas encore réussi à utiliser la fonction Split pour résoudre mon problème, malgré l'aide VB6 et la lecture de plusieurs sujets "
l'aide VB6 suffit pourtant très largement ...
Montre au moins ce que tu en as fait.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 5/10/2013 à 21:00
Pour être encore plus clair :
A chaque ligne (chaine) lue :
"éclater" cette chaine sur la tabulation (par split) ===>> tu obtiens les deux valeurs à insérer dans ta grille
comment les insérer est un second aspect, que nous verrons ensuite.
écris pour l'instant le code qui :
- ouvre le fichier
- lit une ligne à la fois
a) --- pour cette ligne : lit la valeur valeura et la valeur valeurb obtenues par split
b) --- affiche par msgbox chacune de ces 2 valeurs
- passe à la ligne suivante, etc ...
Passé ce cap, nous verrons comment, en lieu et place du msgbox, écrire dans la grille valeura et valeurb
car, tu le vois bien, tu as dans cette discussion deux difficultés :
- savoir lire et traiter ligne par ligne
- savoir ajouter des valeurs (quelle qu'en soit le mode d'obtention ou l'origine) dans ta grille
DEUX questions, donc, dans cette discussion...
En d'autrres termes :
- savoir extraire ce que tu veux ajouter à ta grille est UN problème
- savoir ajouter à ta grille en est un AUTRE
0
Malokoxis Messages postés 83 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 22 février 2021 2
Modifié par Malokoxis le 6/10/2013 à 15:51
Quand on cherche : on trouve !
Merci UCFOUTU

   
    Dim pos As Integer
    Dim entry() As String
    Dim entry2() As String

    entry = Split(Fichier.Text, vbCrLf, , vbTextCompare)
    
    For i = 0 To UBound(entry)
        entry2 = Split(entry(i), vbTab, , vbTextCompare)
        
        With MSFlexGrid1
            .Col = 0
            .Row = i + 1
            .Text = entry2(1)
            
            .Col = 1
            .Row = i + 1
            .Text = entry2(0)
        End With
    Next
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 2
6 oct. 2013 à 16:09
Bonjour,
Cela fait un certain temps que je n'ai plus travaillé sur un FlexGrid mais il me semble qu'avec les renseignements que tu donne sur ton fichier texte ce serait possible de simplifier avec la fonction Clip.
A voir.
A+
0
Malokoxis Messages postés 83 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 22 février 2021 2
8 oct. 2013 à 18:55
Bonsoir lermitte222,

Merci pour l'astuce mais tout marche très bien avec ce code.
Quel sera les avantages de ta solution ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 oct. 2013 à 19:16
La solution de lermitte222 te permet d'insérer directement (sans boucle) le texte lu dans le fichier. Les tab et les vbcrlf provoqueront spontanément la répartitions entre cellyulmes et lignes de ta grille.

N'oublie pas de clore et ainsi libérer ce sujet (tag "résolu")
0
Malokoxis Messages postés 83 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 22 février 2021 2
8 oct. 2013 à 20:23
merci pour cette réponse ucfoutu
0
Rejoignez-nous