PROBLEME d'incrémentation avec Freefile()

Vince62290 Messages postés 18 Date d'inscription vendredi 19 décembre 2008 Statut Membre Dernière intervention 25 décembre 2010 - 19 déc. 2008 à 13:38
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 19 déc. 2008 à 19:33
Bonjour à tous, dans la cadre d'une programmation procédurale j'ai développé une appli où l'utilisateur enregistre les informations de cette appli dans un fichier texte.

Le fichier est en accès aléatoire. Le fichier n'est pas lu, il est simplement enregistré.

Par contre la fonction freefille() me renvoie toujours le même numéro pour tous les fichiers, il ne s'incrémente pas !

Voilà mon code concernant la partie intéressante de l'appli et concernent mon problème :

Private
Sub btndevisenr_Click(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)
Handles btndevisenr.Click

With SFDdevis

'répertoire sur lequel s'ouvrira la boite.InitialDirectory =

"Mes documents"

'titre de la barre .Title =

"Enregistrer le devis"

'filtre, seules les fichiers spécifiés apparaîtront.Filter =

"Fichiers txt(*.txt)|*.txt"

'enfin on ouvre la boite de dialogue enfin.ShowDialog()

'après la fermeture de la boite de dialogue, le bouton 'annuler' a-t-il été cliqué ?

If Err.Number = 32755
Then
Exit
Sub

'si aucun choix

If Len(.FileName) = 0
Then
Exit
Sub

'nom du fichier choisi(avec extension)devis = .FileName

End
With 

'créer un fichier

Dim No
As
IntegerNo = FreeFile()

 

 

FileOpen(No, devis, OpenMode.Output, OpenAccess.Write)

WriteLine(No,

"Commande du client " & prenom.ToUpper &
" " & nom.ToUpper)WriteLine(No,

"GENERAL : ")Write(No, lblchassisdevis.Text)

Write(No, lblmoteurdevis.Text)

Write(No, lbltransmissiondevis.Text)

Write(No, lblrouesdevis.Text)

WriteLine(No, lblinterieurdevis.Text)

WriteLine(No,

"OPTION (Design) : ")Write(No, lblcompeinturedevis.Text)

Write(No, lblcomcapotdevis.Text)

Write(No, lblcomperiscopesdevis.Text)

WriteLine(No, lblcompassagesrouedevis.Text)

WriteLine(No,

"OPTION (Moteur) : ")Write(No, lblcomhuiledevis.Text)

Write(No, lblcomculbudevis.Text)

Write(No, lblcomradiateurdevis.Text)

WriteLine(No, lblcomkitinjectiondevis.Text)

WriteLine(No,

"DEVIS (Importation) : ")Write(No, lbldevisachat.Text &

" " & txtdevisachat.Text)Write(No, lbldeviscontainer.Text &

" " & txtdeviscontainer.Text)Write(No, lbldevisassurance.Text &

" " & txtdevisassurance.Text)Write(No, lbldeviscif.Text &

" " & txtdeviscif.Text)WriteLine(No, lbldevisdouanes.Text &

" " & txtdevisdouanes.Text)WriteLine(No,

"DEVIS (Frais fixes inclus) : ")Write(No, lbltransterrestre.Text)

Write(No, lbldepotage.Text)

Write(No, lblpeageport.Text)

Write(No, lbldossier.Text)

WriteLine(No, lblcourrierexpress.Text)

WriteLine(No,

"DEVIS (TOTAL) : ")Write(No, lbldevismontantht.Text &

" " & txtdevisht.Text)Write(No, lbldevistva.Text &

" " & txtdevistva.Text)WriteLine(No, lbldevismontantttc.Text &

" " & txtdevisttc.Text)FileClose()

MessageBox.Show(

"Enregistrement de la commande N°" & No &
" terminé")

En espérant que vous pourrez m'aider, je vous remercie d'avance et félicitations pour le site

11 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
19 déc. 2008 à 15:32
Bonjour,

Utilises plutôt :
IO.File.Open(...)
Ensuite utilises le flux obtenu en n'oubliant pas de le fermer.

Ensuite, N'utilises plus Err (On Error Goto, ...) en .NET, utilises Try/catch.
Et pour les boites de dialogues, utilises le retour de la fonction ShowDialog de la boite de dialogue et contrôle si c'est une annulation.

http://nhen0039.chez-alice.fr/index.php
0
Vince62290 Messages postés 18 Date d'inscription vendredi 19 décembre 2008 Statut Membre Dernière intervention 25 décembre 2010
19 déc. 2008 à 16:00
Merci NHenri

je vais mettre en pratique tes conseils et je te dis quoi
0
Vince62290 Messages postés 18 Date d'inscription vendredi 19 décembre 2008 Statut Membre Dernière intervention 25 décembre 2010
19 déc. 2008 à 16:09
Au fait pour le "io.file.open" et les flux dont tu parles,

je dois utiliser les classe File et Stream si j'ai bien compris ??

Je demande juste confirmation histoire de ne pas m'engoufrer dans autre chose qui me ferait perdre du temps, merci à toi
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
19 déc. 2008 à 16:24
Bonjour,

Tout a fait, tu utilises "Open" de la classe "File" et celle-ci te retourne un "IO.Stream" (éventuellement dérivé, mais là n'est pas la question).

http://nhen0039.chez-alice.fr/index.php
0

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

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
19 déc. 2008 à 17:10
Pour info, il est normal que FreeFile te renvoie toujours la même valeur.

FreeFile le premier n° libre de fichier.
Tu ouvre ton fichier, tu fais tes écritures, puis tu ferme le fichier. Tu libère donc ce n° de fichier.
Donc lorsque tu rapelle FreeFile, si ce n° n'a pas été utilisé entre temps, il te renvoie le même.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
Vince62290 Messages postés 18 Date d'inscription vendredi 19 décembre 2008 Statut Membre Dernière intervention 25 décembre 2010
19 déc. 2008 à 17:22
Merci BEAUCOUP NHenri, ça marche à part une petit chose :
 
en ce qui concerne le fichier texte aucun problème (je déclare un StreamWriter qui reçoit la propriété Createtext de la classe File avec mon nom de fichier en paramètre).

pour le try/catch également, aucun problème, bien que j'ai du mettre à l'intérieur de mon try tout le code qui écrit dans le fichier texte (Writeline,etc....).

sinon j'ai un petit problème avec le retour de Showdialog(), il ne me l'accepte pas dans les cas suivants que j'ai essayé :

1 : Catch ex
As Exception
When ShowDialog.Cancel = Windows.Forms.DialogResult.Cancel

Exit
Sub
2 : Catch ex
As Exception
When ShowDialog.Cancel = True

Exit
Sub
3 : Catch ex
As Exception
When ShowDialog.Cancel = 2

Exit
Sub

Il me souligne comme avertissement à chauqe fois "SHOWDIALOG" en me disant que l'expression qualifiante ne sera pas évaluée....
0
Vince62290 Messages postés 18 Date d'inscription vendredi 19 décembre 2008 Statut Membre Dernière intervention 25 décembre 2010
19 déc. 2008 à 17:24
Merci pour l'info casy, dans ce cas là perso je ne trouve pas que FreeFile() soit d'un grand intérêt s'il faut laisser ouvert le fichier précédent pour qu'il s'incrémente.

A moins qu'il existe un bidoullage que je ne connait pas mais bon..

Merci pour l'info
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
19 déc. 2008 à 17:43
Il n'y a aucun intérêt particulier à ce que le n° de fichier augmente. Le but est d'obtenir un n° de fichier disponible afin de ne pas utiliser un n° déjà occuper et d'aller taper dans un autre fichier que celui que tu as ouvert.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
Vince62290 Messages postés 18 Date d'inscription vendredi 19 décembre 2008 Statut Membre Dernière intervention 25 décembre 2010
19 déc. 2008 à 17:57
Il y a un intérêt pour moi puisque celà était spécifié comme contrainte dans mon énoncé.

Merci
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
19 déc. 2008 à 19:11
Dans ce cas il ne faut pas te basé sur FreeFile pour calculer ton incrément de commande. Car d'une part, comme tu as pu le constater, non seulement, FreeFile ne te garantie pas un incrément, mais il ne te garantie pas non plus des numéros successifs. Tu peux même obtenir un n° inférieur au n° précédent si 2 fichiers ont été fermé successivement.

D'ailleurs généralement, comme tu n'ouvre qu'un seul fichier à la fois, FreeFile renvoie la pluspart du temps 1 comme numéro.
 

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
19 déc. 2008 à 19:33
Bonjour,

Pour l'histoire de l'annulation :

if CommonDialog.ShowDialog()=(Quelquechose).Cancel then exit sub
'CommonDialog est ta boite de dialogue
Ensuite, je ne connais pas la syntaxe : Catch Ex as exception When ...

http://nhen0039.chez-alice.fr/index.php
0
Rejoignez-nous