Créer un fichier ouvrir

Résolu
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005 - 20 juil. 2005 à 12:37
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005 - 21 juil. 2005 à 12:25
Voilà comment j'ai fait (VB6) :
donc j'ai été chercher la un controle comment dialogue que j'ai nommé dlgText1.
Voilà le code :

Private Sub cmdChargerTableau_Click()
On Error GoTo OuvrirGestErr 'active le gestionnaire d'erreurs
dlgouvrir.CancelError = True 'traite le bouton Annuler comme une erreur
dlgouvrir.Flags = cdlOFNFileMustExist 'accepte seulement un nom de fichier existant
dlgouvrir.Filter = "Data (*.dat)|*.dat" 'affiche seulement les fichiers se terminant par .dat
dlgouvrir.FileName = "" 'efface le nom de fichier de la boîte de dialogue
dlgouvrir.ShowOpen 'affiche la boite de dialogue Ouvrir
Close #1
Open dlgouvrir.FileName For Random As #1

For numérolotto = 0 To 72
Text1(numérolotto).Visible = True 'affiche la place dans la feuille
Get #1, numérolotto + 1, tabl(1, numérolotto)
Next numérolotto
Exit Sub 'empêche le passage au Gestionnaire d'erreurs
'si aucune erreur ne se produit
OuvrirGestErr:

AfficheEnregistrementActuelNUMLOTTO (numérolotto)

End Sub

donc chaque nombre ce trouvant dans le fichier .dat que j'ai charger est sous la forme : tabl(numérolotto, 1), tabl(numérolotto, 2), ... et pour l'afficher dans les cases se nommant 'Text1(0, ....). C'est le rôle de AfficheEnregistrementActuelNUMLOTTO (numérolotto).

Alors la boite de dialogue ouvrir s'ouvre bien mais je n'arrive pas à traiter les données ? Est ce que je fais quelque chose qu'il ne faut pas ? Je crois que c'est la fonction Get#1 que je n'utilise pas bien ?

Merci d'avance pour l'aide que vous m'octroyé.

Luca62.

19 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
20 juil. 2005 à 15:17
Le On Error sert justement à intercepter les erreurs.

Au lieu de mettre 2 On Error tu peut tester un numéro d'erreur particulier.

pour le FreeFile voir les exemples ci dessus --> variable = FreeFile

si tu veux réouvrir le même fichier ou un autre il faut utiliser un
numéro disponible, #1 est libre puisqu'il a été fermé, et FreeFile te
renverra 1 dans ce cas.



On Error GoTo Cancelled

dlgouvrir.CancelError = True

dlgouvrir.Flags = cdlOFNFileMustExist

dlgouvrir.Filter = "Data (*.dat)|*.dat"

dlgouvrir.ShowOpen

- - - - - - - - - -

- - - - - - - - - -

- - - - - - - - - -

Exit Sub



Cancelled:

If Err = 32755 Then

MsgBox "Opération Annulée"

Exit Sub

End If

MsgBox Err.Description & " (" & Err & ")", vbExclamation, "Open Erreur"



Daniel
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
20 juil. 2005 à 16:02
c'est presque la même chose.









Private Sub Sauver()

dlgsauve.InitDir = "c:\windows"

dlgsauve.Filter = "Data (*.dat)|*.dat

dlgsauve.FilterIndex = 1

dlgsauve.CancelError = True

dlgsauve.Flags = cdlOFNOverwritePrompt + cdlOFNNoReadOnlyReturn

On Error GoTo Error

dlgsauve.ShowSave

Open dlgsauve.FileName For Binary As #1

Put #1, , Buffer

Close #1

Exit Sub

Error:

If Err = 32755 Then Exit Sub

MsgBox Err.Description & " (" & Err & ")", vbExclamation, "Save Erreur"

End Sub


Daniel
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
20 juil. 2005 à 22:08
Open dlgsauver.FileName For Output As #1

Daniel
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
20 juil. 2005 à 13:05
il manque une Longueur pour ton fichier en Random

t'es sûr que les enregistrements ont tous la même longueur ?







Open dlgouvrir.FileName For Random As #1 Len = ???



d'autre part pour lire en séquence, inutile de mettre le numéro

Get #1, , tabl(1, numérolotto)


Daniel
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
20 juil. 2005 à 13:08
J'ai du mal a saisir la logiue de l'algoritme...

voici ce que je proposerai ..


<HR>
Private Sub cmdChargerTableau_Click()
Dim iFile as Byte
Dim numerolotto As Integer
dlgouvrir.CancelError = True
dlgouvrir.Flags = cdlOFNFileMustExist
dlgouvrir.Filter = "Data (*.dat)|*.dat"
On Error GoTo Cancelled
dlgouvrir.ShowOpen

On Error Goto OuvrirGestErr
iFile = FreeFile
Open dlgouvrir.FileName For Random As #iFile
For numerolotto = 0 To Text1.Count -1
Text1(numerolotto ).Visible = True
Get #iFile, , tabl(1, Text1(numerolotto ).Text
Next numerolotto
Close #iFile
Exit Sub
OuvrirGestErr:
'# Vérifies la nature de l'erreur (Err.Description)
AfficheEnregistrementActuelNUMLOTTO (numerolotto )
Close #iFile
Cancelled:
End Sub

<HR>

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
20 juil. 2005 à 13:17
Erreur n°59 : Longueur d'enregistrement incorrecte


Daniel
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
20 juil. 2005 à 13:45
Je pense que vous avez bien compris ce que je voulais faire cependant, j'ai toujours le même problème, est ce que vous pouvez m'expliquer la phaséologie de la fonction get ? Ce qu'on doit mettre après ??


Je pense aussi que le faite que je n'ai pas fermé l'ancier fichier avant d'ouvir un nouveau, cela aurait comme conséquence que le programme s'embrouille ? C'est possible ?


Merci,
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
20 juil. 2005 à 13:59
vaut mieux fermer ses fichiers quand on en a plus besoin.

en utilisant #1 si le fichier est déjà ouvert ça va planter.

avec la méthode FreeFile comme indiqué par Renfield il n'y a pas d'embrouille.



Le problème est qu'il faut indiquer une Longueur quand tu vas lire un numéro de Lotto.

donc question les numéros de lotto font combien de longueur ?

les fichiers .dat ont ils toujours la même structure ?

pas sûr que tu retombes sur un fichier de structure et de longueur compatible,

faudrait peut être vérifier la validité du fichier .dat et comme il n'y
a pas de test de fin de fichier à la lecture, tu risques aussi d'avoir
des surprises.

Daniel
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
20 juil. 2005 à 14:06
Les numéro de lotto on tous une longueur de 6 nombres fois 12 combinaison. Et chaque fichier contient un nom.
Donc ça me fait 73 enregistrement par formulaire (=>0 to 72).
Et même si on ne remplit pas toute les cases, il inscrira des blancs. ==> les fichiers dat on tous la même stucure, un multiple de 73...

Mais avant d'ouvir un fichier, est ce qu'il ne sera pas judicieux de fermer celui en cour ?
il suffit de mettre close#1 ?? Ou quand on ouvre un nouveau fichier, il écrase le précédent ?

Luca62
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
20 juil. 2005 à 14:25
pour fermer un fichier, quand on a fini de le lire ou de l'écrire, il
suffit de mettre Close #numfichier ou Close tout seul pour fermer tous
les fichiers, ou Reset.



le fait d'ouvrir un fichier ne l'efface pas forcément, pour cela il
faut l'ouvrir en Output, ou écrire dessus. en Binary ou Random on ne
peut pas supprimer, seulement écrire par dessus.



tu dis que chaque fichier contient un nom, où se trouve ce nom ?

peut on utiliser ce nom pour vérifier la validité du fichier .dat ?





Dim numero As String * 6

iFile = FreeFile

Open dlgouvrir.FileName For Random As #iFile Len=6

For numerolotto = 0 To Text1.Count -1

Get #iFile, , numero

Text1(numerolotto ).Visible = True

Text1(numerolotto ).Text = numero

Next numerolotto

Close #iFile


Daniel
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
20 juil. 2005 à 14:28
Tu ouvres, tu lit, tu ferme

pas besoin de laisser ouvert les fichiers inutilement

pour tes enregistrements, il est possible de faire une structure :

Type LottoType
Titre As String * 25
Nombre(72) As String *6
End Type
(a toi de régler les tailles)

ensuite

Dim Lotto as LottoType
Open dlgouvrir.FileName For Random As #iFile Len = len ( Lotto )
Get #iFile, , Lotto
Close #iFile

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
20 juil. 2005 à 14:55
Voilà comment j'ai fais, cela fonctionne :

dlgouvrir.CancelError = True
dlgouvrir.Flags = cdlOFNFileMustExist
dlgouvrir.Filter = "Data (*.dat)|*.dat"
'On Error GoTo Cancelled
dlgouvrir.ShowOpen

'On Error GoTo OuvrirGestErr
'1 = FreeFile
Open dlgouvrir.FileName For Input As #1

Do While Not EOF(1)
numérolotto = numérolotto + 1
Line Input #1, tabl(numérolotto, 1)
Line Input #1, tabl(numérolotto, 2)
Line Input #1, tabl(numérolotto, 3)

etc jusqu'a 72 = > car 72 num à mettre dans 72 cases différentes.

Loop
Close #1

Le seul problème c'est quand il m'ouvre la fenêtre ouvrir, le bouton annuler me fait une erreur, et quand le met les lignes en rouges, jai aussi une erreur ?
Comment cela ce fait-il ?
Maintenant pour enregistrer sur le fichier.dat que j'ai ouvert je fait comme si il se nommait #1 c'est ça ?

Luca62.
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
20 juil. 2005 à 15:38
Ok ça fonctionne correctement .... J'ai compris !! Enfin ... C'est pas toujours facile quand on ne connait pas la fonction.....

Enfin, dans cette continuité, est ce que quelqu'un me montrer un exemple d'un code pour faire le enregistrer sous ? Lors d'une nouvelle fiche et que l'on veut enregistrer sous un nouveau nom ?

ENCORE MERCI POUR VOTRE AIDE !!!!!

Luca62.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
20 juil. 2005 à 17:44
Attention Daniel a ne pas confondre '+' et 'Or'

dlgsauve.Flags = cdlOFNOverwritePrompt + cdlOFNNoReadOnlyReturn
ne signifie pas la même chose que dlgsauve.Flags = cdlOFNOverwritePrompt Or cdlOFNNoReadOnlyReturn
je rappelle que 3 + 1 > 4 et 3 Or 1 > 3

bien sur, vues les valeurs des flags incriminés, il n'y a pas de superposition des valeurs, mais autant prendre le pli...

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
20 juil. 2005 à 18:54
J'ai pas compris la différence entre le prompt et le return dans l'expression ci-dessus, mais j'ai donc mis un Or au lieu du + et tout fonctionne correctement.

J'aimerais également savoir si il existe un fonction qui me permetterai de retourner à une page d'accueil en ayant les mêmes caractérisques que lorsqu'on démare le programme.

> comme si on quittait et réexécutait le programme ? > fermer tout ce qui était en cours et réinitialiser le programme ?

J'aimerais aussi savoir comme on affiche une image ou icone à côté des noms dans les menus : dans fichier => ouvrir
=> enregistrer sous

Merci. Luca62.
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
20 juil. 2005 à 22:02
En plus de la question ci-dessus, j'ai encore un petit problème avec le SAVE AS,
Voici comment j'ai écrit le code :

Private Sub Mnu_Saveas_Click()

If Flg_AjoutNewFile Then ' Enregistrement d'une nouvelle fiche

tabl(numérolotto, 1) = Text1(0).Text
tabl(numérolotto, 2) = Text1(1).Text
tabl(numérolotto, 3) = Text1(2).Text
.......................................................
tabl(numérolotto, 72) = Text1(71).Text
tabl(numérolotto, 73) = Text1(72).Text
End If

dlgsauver.InitDir = "C:\Documents and Settings\Francois\Mes documents\F R A N C O I S\Lotto\Mon Lotto"
dlgsauver.Filter = "Data (*.dat)|*.dat"
dlgsauver.FilterIndex = 1
dlgsauver.CancelError = True
dlgsauver.Flags = cdlOFNOverwritePrompt + cdlOFNNoReadOnlyReturn
On Error GoTo Error
dlgsauver.ShowSave

Open dlgsauver.FileName For Binary As #1
For i = 1 To numérolotto
Print #1, tabl(i, 1)
Print #1, tabl(i, 2)
Print #1, tabl(i, 3)
..........................
Print #1, tabl(i, 72)
Print #1, tabl(i, 73)

Next
Close #1
Exit Sub


Error:
If Err = 32755 Then Exit Sub
MsgBox Err.Description & " (" & Err & ")", vbExclamation, "Save Erreur"
mYMESS = MsgBox("Le fichier à été corectement sauvegardé", 0)
txtBénéfice_Perte.Visible = True
numérolotto = 1
AfficheEnregistrementActuelNUMLOTTO (numérolotto)
End Sub

Le problème est qu'il me cré bien un nouveau fichier portant le nom que je lui ai demander, mais je n'y retrouve pas les nombres, aucuns.
j'ai cependant avec le mYMESS, un message d'erreur que voici : Bad file mode (54 ) ?????

Est ce que vous savez ce que j'ai mal écrit ?

Merci. Fr.
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
20 juil. 2005 à 22:15
Logique, j'avais même pas fait tilt ! J'ai pas encore une logique parfaite VB.....

J'aimerais également savoir si il existe un fonction qui me permetterai de retourner à une page d'accueil en ayant les mêmes caractérisques que lorsqu'on démare le programme.

> comme si on quittait et réexécutait le programme ? > fermer tout ce qui était en cours et réinitialiser le programme ?

J'aimerais aussi savoir comme on affiche une image ou icone à côté des noms dans les menus : dans fichier => ouvrir
=> enregistrer sous

Encore merci pour l'attention que vous me portez !!!

Luca62.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
21 juil. 2005 à 09:41
Pose ces questions séparement sur l Forum. Merci
pour les icones dans les menus, tu dois pouvoir trouver ca sur le site...

pour le coté redemarrage de l'appli, il te suffit de décharger (Unload) tes Forms ouvertes, et de rouvrir celle que tu veux..

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
21 juil. 2005 à 12:25
Ok, merci pour tout ces conseils....

Luca62.
0