Tableau et fichier - VB [Résolu]

Théo - 15 juin 2015 à 12:47 - Dernière réponse : cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention
- 16 juin 2015 à 10:29
Bonjour,
En Visual Basic, j'ai un problème.
J'ai crée un tableau où lorsque l'application est lancée, le tableau se remplis avec des formulaires à remplir par l'utilisateur.
j'aimerais enregistrer ce tableau de manière à ce qu'au prochain lancement, toutes les informations entrées à l'ouverture précédentes soient enregistrées. Comme sur une base de donnée.
Y à t'il un moyen d'enregistrer le tableau rapidement sous forme de fichier et de le relire rapidement ?

PS : C'est un tableau à 2 dimentions
Afficher la suite 

Votre réponse

17 réponses

Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 15/06/2015 à 16:04
1
Merci
Bonjour,
Le code que tu montres ne modifie que la première ligne de la première colonne d'un tableau. Il ne le "remplit" pas.
Montre ta boucle de remplissage.

De toutes manières, en admettant que ton tableau soit rempli :
il te faut boucler sur ses valeurs et les écrire dans un fichier texte, lequel devra comporter 40 lignes, chaque ligne contenant 5 valeurs (tes 5 colonnes)
Cela se fait par utilisation de l'instruction Open (la voir dans l'aide VB6, accompagnée d'exemple) ... For output ...
La lecture (à l'ouverture d'une nouvelle session) se fera également par utilisation de l'instruction Open ... mais cette fois-ci : For Input.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.

Merci ucfoutu 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 124 internautes ce mois-ci

Commenter la réponse de ucfoutu
Whismeril 11622 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 juin 2018 Dernière intervention - 15 juin 2015 à 13:14
0
Merci
Bonjour,
Quelle version de VB?
VBA, VB6, VBS, VB.NET?
Commenter la réponse de Whismeril
Commenter la réponse de Théo
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 15 juin 2015 à 14:40
0
Merci
Bonjour,
1) j'ai donc déplacé cette discussion vers le forum VB6
2)
le tableau se remplis avec des formulaires à remplir par l'utilisateur
.
se "remplit" de quoi, exactement ? Le code de "remplissage" nous en dira plus long ===>>> montre-le.
Commenter la réponse de ucfoutu
0
Merci
J'ai
Dim MAIL0(40, 5) As String
Dim MAIL(40, 5) As String

Pour déclarer mes tableaux.

J'en les remplis 1 et lorsque je clique sur valider, il me remplis l'autre (le bon)
MAIL0(0, 0) = Umail1a.Text

MAIL = MAIL0
Umail1.Text = MAIL(0, 0)


Seulement, je souhaite {enregistrer les valeurs du tableau MAIL} afin de pouvoir les relire directement au lancement de l'application.

Je modifie dans l'app.
A la fermeture : enregistrement ou lors d'un clik sur "valider"
A l'ouverture : le tableau à toujours les anciennes valeurs
Commenter la réponse de Théo
0
Merci
Oui effectivement, j'ai utilisé le mot remplir, mais je veux dire que j'affectais une valeur à une case dans le tableau.
Cela plusieurs fois.

Je me dirige donc vers "For output" dans l'aide VB6.

Si jamais je ne trouve pas, je reviens ici :)
Commenter la réponse de Théo
0
Merci
Je suis parvenu à écrire le contenu de mon tableau dans un fichier texte !
Mais je ne parviens pas à le reformuler sous forme de tableau VB ...
J'ai pour chaque ligne du tableau une ligne dans le fichier texte et pour chaque colone du tableau un séparateur "|" ;)
Donc :
aaa|BBB|ccc|ddd|eee
etc.|etc2.| .....
Comment récupérer chaque valeur entre les "|" et les disposer dans un tableau sans écrire le code pour chaque ligne (40 lignes ... )
merci de ton aide ! :)
Commenter la réponse de Théo
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 15 juin 2015 à 17:52
0
Merci
Montre par quel code tu as écrit ce fichier (toute la boucle). Car la lecture dépend de l'écriture.
Commenter la réponse de ucfoutu
0
Merci
Dim file As System.IO.StreamWriter
Dim mywriteline As String
Dim i As Integer
'Ouverture du fichier en écriture, en effaçant les lignes existantes.
file = My.Computer.FileSystem.OpenTextFileWriter(My.Computer.FileSystem.CurrentDirectory & "\tarif.txt", False)
'écriture ligne par ligne
ligne = ""
Do Until i > 38
ligne = MAIL(i, 0) & "|" & MAIL(i, 1) & "|" & MAIL(i, 2) & "|" & MAIL(i, 3) & "|" & MAIL(i, 4)
file.WriteLine(ligne)
i = i + 1
Loop
file.Close()

Et si il y à un moyen de faire un double boucle pour écrire le fichier, je vous écoute :)
Whismeril 11622 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 juin 2018 Dernière intervention - 15 juin 2015 à 21:28
Bonsoir, on ne fait une boucle à compteur avec Do (Until ou While), mais avec For.

Et oui tu peux faire une boucle dans une boucle

For i = 0 to n
  For j = 0 to m
    'code à faire
   next j
next i
Commenter la réponse de Théo
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 15/06/2015 à 18:12
0
Merci
Tu t'embarrases beaucoup pour peu. Et ta manière t'obligerait à faire un split !

Regarde ce petit test vite fait (bâclé)

un form et deux boutons (le 1er pour écrire, le second pour lire) ===>>

Dim toto(2, 2) As String

Private Sub Command1_Click()
' juste pour se faire un petit tableau de test
For i = 0 To 2
For j = 0 To 2
toto(i, j) = "a" & i & j
Next
Next


'on l'écrit
Open "d:\essai.txt" For Output As #1
For i = LBound(toto) To UBound(toto)
Write #1, toto(i, 0), toto(i, 1), toto(i, 2)
Next
Close #1

End Sub

Private Sub Command2_Click()

'preuve =====
Erase toto ' pas nécessaire. Juste pour prouver
Open "d:\essai.txt" For Input As #1
For i = LBound(toto) To UBound(toto)
Input #1, toto(i, 0), toto(i, 1), toto(i, 2)
Next
Close #1

'preuve
For i = 0 To 2
For j = 0 To 2
MsgBox toto(i, j)
Next
Next

End Sub


Voilà une méthode parmi d'autres. Prends déjà celle-ci

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Commenter la réponse de ucfoutu
Ptitfils 9 Messages postés vendredi 24 janvier 2014Date d'inscription 17 juin 2015 Dernière intervention - 15 juin 2015 à 18:41
0
Merci
J'ai réussis à trouver une solution !
        Dim filer As System.IO.StreamReader
Dim myreadline As String
Dim j As Integer
Dim col(4) As String
Dim k As Integer

filer = My.Computer.FileSystem.OpenTextFileReader(My.Computer.FileSystem.CurrentDirectory & "\tarif.txt")
Do Until k > 38
myreadline = filer.ReadLine
col = Split(myreadline, "|")
Do Until j > 4
MAIL(k, j) = col(j)
j = j + 1
Loop
k = k + 1
Loop

J'utilisais déjà i pour l'écriture, je n'ai pas osé le réutiliser :)
En gros j'ai récupéré tout le fichier texte en un seul bloc et j'ai lu ligne par ligne dedans.

Merci pour ton aide :)
Bonne soirée ! Sujet Résolut :)
Commenter la réponse de Ptitfils
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 15/06/2015 à 19:02
0
Merci
Hep là !!!!
Quand je lis :
filer = My.Computer.FileSystem.OpenTextFileReader(My.Computer.FileSystem.CurrentDirectory & "\tarif.txt")

Je me dis qu'il y a un sacré problème et que tu ne développes pas dans le langage correspondant à ce forum (VB6), mais en VB.Net !!!!
On peut savoir sous quoi tu développes, finalement ?
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Commenter la réponse de ucfoutu
Whismeril 11622 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 juin 2018 Dernière intervention - 15 juin 2015 à 21:24
0
Merci
Bonsoir Uc, cette ligne c'est du VB.Net c'est certain.
Commenter la réponse de Whismeril
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 15 juin 2015 à 22:36
0
Merci
Bonsoir, Whismeril,
Et cela ne l'a pas empêché de répondre (plus haut) à ta question par :
Théo 15 juin 2015 à 14:34
Je suis en VB6 :)

Bah ... Il existait une solution VB6 avec double boucle For to Next, mais plus la peine, donc ...
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 15/06/2015 à 23:06
0
Merci
Voilà quand même une autre solution VB6 (elle doit être facilement transposable en VB.Net)
celle-ci utilise Print et non Write et est valable quelles que soient les deux dimensions du tableau. L'astuce est dans la multiplication de la première dimension par la seconde, puis un step de la seconde et enfin une division de i par la seconde (arithmétique pure) ==>> exemple
Dim toto(4, 3) As String

Private Sub Command1_Click()
' juste pour se faire un petit tableau de test
For i = 0 To UBound(toto, 1)
For j = 0 To UBound(toto, 2)
toto(i, j) = "a" & i & j
Next
Next

'on l'écrit
Open "d:\essai.txt" For Output As #1
For i = LBound(toto, 1) To UBound(toto, 1)
For j = LBound(toto, 2) To UBound(toto, 2)
Print #1, toto(i, j) '====>> ici : le Print et plus le Write
Next
Next
Close #1

End Sub

Private Sub Command2_Click()

'preuve =====
Erase toto ' pas nécessaire. Juste pour prouver
Open "d:\essai.txt" For Input As #1
' et maintenant : de l'arithmétique +++>>
For i = 0 To UBound(toto, 1) * UBound(toto, 2) Step UBound(toto, 2)
For j = 0 To UBound(toto, 2)
Input #1, toto(i / UBound(toto, 2), j) ' ah ! cette belle division (MDR)
Next
Next
Close #1

'preuve
For i = 0 To UBound(toto, 1)
For j = 0 To UBound(toto, 2)
MsgBox toto(i, j)
Next
Next

End Sub

Pas de split. Pas d'ajout de séparateur.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Commenter la réponse de ucfoutu
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 16 juin 2015 à 10:29
0
Merci
Bonjour

Si c'est en vb.net tu as le settings

Commenter la réponse de cs_ShayW

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.