Remplir Flexgrid avec données formatées [Résolu]

Messages postés
78
Date d'inscription
lundi 3 janvier 2011
Statut
Membre
Dernière intervention
11 août 2019
- - Dernière réponse : Malokoxis
Messages postés
78
Date d'inscription
lundi 3 janvier 2011
Statut
Membre
Dernière intervention
11 août 2019
- 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
Afficher la suite 

10 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
Bonjour,
Tu ne nous dis rien sur l'origine/emplacement du texte en cause.
Or, la réponse dépend de cette précision.
Commenter la réponse de ucfoutu
Messages postés
78
Date d'inscription
lundi 3 janvier 2011
Statut
Membre
Dernière intervention
11 août 2019
1
0
Merci
bonsoir
merci pour ta réponse,

Le texte est dans un fichier texte.
Commenter la réponse de Malokoxis
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
78
Date d'inscription
lundi 3 janvier 2011
Statut
Membre
Dernière intervention
11 août 2019
1
0
Merci
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 ?
Commenter la réponse de Malokoxis
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
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.
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215 -
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
Commenter la réponse de ucfoutu
Messages postés
78
Date d'inscription
lundi 3 janvier 2011
Statut
Membre
Dernière intervention
11 août 2019
1
0
Merci
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
Commenter la réponse de Malokoxis
Messages postés
8714
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
24 novembre 2019
2
0
Merci
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+
Commenter la réponse de lermite222
Messages postés
78
Date d'inscription
lundi 3 janvier 2011
Statut
Membre
Dernière intervention
11 août 2019
1
0
Merci
Bonsoir lermitte222,

Merci pour l'astuce mais tout marche très bien avec ce code.
Quel sera les avantages de ta solution ?
Commenter la réponse de Malokoxis
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
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")
Commenter la réponse de ucfoutu
Messages postés
78
Date d'inscription
lundi 3 janvier 2011
Statut
Membre
Dernière intervention
11 août 2019
1
0
Merci
merci pour cette réponse ucfoutu
Commenter la réponse de Malokoxis