Besoin d'aide sur l'instruction Open.

Résolu
cs_zedude33 Messages postés 38 Date d'inscription mardi 1 août 2006 Statut Membre Dernière intervention 9 juillet 2013 - 19 août 2006 à 16:43
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 19 août 2006 à 23:03
Bonjour,
Je voulais savoir s'il est possible (et si oui comment) d'ajouter des variables dans l'instruction Open. Je m'explique :
Admettons :
Open "c:/nini.txt" For Output Shared As #1

Je voudrais remplacer nini par une variableNmeFile et .txt par une variableNmeExt.

Qu'en pensez-vous ?

@+ Thierry

11 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
19 août 2006 à 16:48
Open "c:" & NmeFile & NmeExt For Output Shared As #1 par exemple

Sevyc64  (alias Casy)
<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
19 août 2006 à 16:50
Salut,

essaie ceci :
_______________________________________________________________________________
Dim sFichier As String

sFichier = "C:" & CStr(NmeFile) & "." & CStr(NmeExt)
'** si le point est dans l'extension, ^ enleve le point entre guillemet

Open sFichier For Output Shared As #1
_______________________________________________________________________________

@++

mortalino
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
19 août 2006 à 17:54
Salut Thierry,

Bah en fait je ne sais pas comment tu as déclaré ta variable NmeExt, donc si tu as fait Dim NmeExt As String, il n'y en a pas besoin.
Si tu ne l'a pas déclaré, c'est nécessaire.

CStr est une fonction, pour convertir ta variable en String (si elle est d'un type différent).
Tu peux faire la même chose avec les autres types :

Exemple

MaVar = "19/08/2006"
MaVarEnDate = CDate(MaVar)

++
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
19 août 2006 à 17:57
Arf, tu as étais plus rapide que moi mortalino, j'étais justement en train de réfléchir à comment répondre.

Bon ben voici ma version alors : Pas mieux que mortalino

Sevyc64  (alias Casy)
<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3

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

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
19 août 2006 à 19:02
Bah en fait dès fois tu peux te passer de variable !

Exemple :
tu souhaites récupérer la valeur d'un TextBox pour lui additionner 10, toi tu ferai :

Dim MaVal As Long, MaNewVal As Long

MaVal = TextBox1.Text
MaNewVal = MaVal + 10
MsgBox MaNewVal

Moi je ferai ça :
Dim MaVal As Long

MaVal = CLng(TextBox1.Text) + 10
MsgBox MaNewVal
(j'économise une variable)

Mais tu verras par toi même, qu'il y a mille et une raison de transformer des variables.
Sache que certaine fonction, style Mid, Len, Val, etc... n'accèptent qu'un type bien précis.

++
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
19 août 2006 à 19:03
Ouhhh làlàlàlà. STOP.

Non tu ne convertie pas ta variable. Si ta variable est un numérique, elle reste un numérique

Dans le cas de ton exemple, admettons que NmeFile est un numérique (ce qui est absurde ici, j'en conviens).
L'instruction Open attend une chaine de caractère, pas un numérique, donc Open NmeFile ne doit pas marcher théoriquement.

Il faut donc faire Open Cstr(NmeFile), ça s'appele un cast (très utilisé en C) ou conversion explicite. Dans ce cas NmeFile est un numérique et reste un numérique. Cstr renvoi une variable (généré automatiquement en mémoire) de type string qui contient la représentation sous forme texte de ta variable numérique. C'est ce texte qui est transmis à la fonction Open.

Subtilité de VB6, si tu ne fais pas la conversion, VB6 sait faire certaines conversions de lui même. On appelle cela convertion implicite. Dans le cas présent, Open NmeFile qui ne devrait pas marcher, marchera car vb6 sait automatiquement la conversion en string.
Mais comme il n'est pas parfait, je te recommende de faire des convertions explicites, ça limite les bugs, et le code est plus clair lorsque tu dois le reprendre plusieurs mois voire plusieurs années après.

Sevyc64  (alias Casy)
<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
cs_zedude33 Messages postés 38 Date d'inscription mardi 1 août 2006 Statut Membre Dernière intervention 9 juillet 2013
19 août 2006 à 17:32
Ok Merci !


Mais Quelle difference y a-t-il entre & NmeExt et & CStr(NmeExt) par exemple ?

@+ Thierry
0
cs_zedude33 Messages postés 38 Date d'inscription mardi 1 août 2006 Statut Membre Dernière intervention 9 juillet 2013
19 août 2006 à 18:49
Hello,

Ok, j'ai saisi.

Je déclare toujours mes variables comme ça (depuis pas longtems puisque ça fait quelques semaines que je bricolle):


Dim MaVariable  (Quand je ne sais pas)
ou
Dim MaVariable As String  (Quand je veux du Texte)
ou
Dim MaVariable As Long (ou As Integer) (Quand je veux du numérique)
ou
Dim MaVariable As Boolean (Quand je veux du deux états)

Je ne sais pas si c'est top mais ça fonctionne pour l'instant.
Je ne savais pas non plus que l'on pouvais transformer une variable par une simple fonction au beau milieu d'un programme. Le Basic semble très puissant et souple comparé au ASM (utilisé pour la programmation des microcontrôleurs PIC). Remarque tout est relatif.... Je suppose qu'il y a plus puissant.

Mais alors encore une question :
Quel est l'ineret de convertir les variables en plein milieu d'un programme ? A quoi cela peut-il bien servir. D'autant plus que la limite du nombre de variable semble de taille, non? Bizarre...

@+ Thierry
0
cs_zedude33 Messages postés 38 Date d'inscription mardi 1 août 2006 Statut Membre Dernière intervention 9 juillet 2013
19 août 2006 à 19:22
Donc grosso-modo, si j'ai bien compris, la convertion sert à l'interprétation de VB6:
1234 Integer sera interprété numérique
alors que
1234 String sera interprété comme une simple chaine de caractères.
D'où l'intéret defaire les convertions dans certains cas de figure. 

Pour ceci :
MaVal = TextBox1.Text
MaNewVal = MaVal + 10
MsgBox MaNewVal

Moi je ferai ça :
Dim MaVal As Long

MaVal = CLng(TextBox1.Text) + 10
MsgBox MaNewVal
(j'économise une variable)

Ben oui effectivement ! C'est mieux.

@+Thierry
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
19 août 2006 à 22:52
And the winner is Mortalino
Casy vient en 2nd position à quelques secondes prêts à chaque fois :)

Zedude33 pense à valider la ou les réponse(s) te convenant.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
19 août 2006 à 23:03
Mais je l'aurais un jours, je l'aurais

Sevyc64  (alias Casy)
<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
Rejoignez-nous