Besoin d'aide sur l'instruction Open.

Résolu
Messages postés
38
Date d'inscription
mardi 1 août 2006
Statut
Membre
Dernière intervention
9 juillet 2013
-
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
-
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

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Open "c:" & NmeFile & NmeExt For Output Shared As #1 par exemple

Sevyc64  (alias Casy)
<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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)

++
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
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 #
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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.

++
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
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 #
Messages postés
38
Date d'inscription
mardi 1 août 2006
Statut
Membre
Dernière intervention
9 juillet 2013

Ok Merci !


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

@+ Thierry
Messages postés
38
Date d'inscription
mardi 1 août 2006
Statut
Membre
Dernière intervention
9 juillet 2013

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
Messages postés
38
Date d'inscription
mardi 1 août 2006
Statut
Membre
Dernière intervention
9 juillet 2013

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
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
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.
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Mais je l'aurais un jours, je l'aurais

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