Problème avec writeLine sous seven

Résolu
le1scorpion1noir Messages postés 163 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 26 août 2014 - 23 déc. 2012 à 04:37
 Utilisateur anonyme - 25 déc. 2012 à 03:05
bonjour a tous

j'ai un petit problème avec vb6 sous windows Seven 32
je veux crée un fichier sur mon bureaux dans le quel j'écrit quelque donner
Private Sub Command1_Click()
'Pour creer le fichier texte
Set FSys = CreateObject("Scripting.FileSystemObject")
Set MonFic = FSys.CreateTextFile("C:\Users\%user%\Desktop\fichier.txt")
With MonFic 'Pour écrire dans le fichier texte
.writeLine ""
.writeLine "ma phrase" & (A1.Text)
.writeLine "mot" & (B.Text) & "mot"
End With
End Sub


avant (quelque mois) sa fonctionne sans aucun problème mai maintenant sa me fait une erreur "method or data member not found"
.writeLine "mon phrase" & (A1.Text)
ya til un problème avec le système ??

17 réponses

Utilisateur anonyme
23 déc. 2012 à 13:13
Bonjour,

Je suis du même avis que Jack, ton erreur doit venir de ton A1 et B, dont on ne sait pas ce que c'est. Il faut donc les contrôler.

Tu peux faire un test sans les utiliser pour être sur d'où provient l'erreur.

Calade dit:
Tu mets ton chemin en dur (à éviter)

Oui... car (par exemple) si le PC utilise le disque D: tu auras une erreur.
Pour récupérer correctement le chemin du bureau de l'utilisateur, tu créés (ajoutes) un Module dans ton projet (Projet >> Ajouter un module >> Module1), et tu mets ça:
'Module1:
Public Const CSIDL_DESKTOPDIRECTORY = 16 ' Desktop folder ([user] profile)
Public Type shiEMID
    cb As Long
    abID As Byte
End Type
Public Type ITEMIDLIST
    mkid As shiEMID
End Type
Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As ITEMIDLIST) As Long
Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Public Function GetSpecialfolder(CSIDL As Long) As String
    Dim IDL As ITEMIDLIST
    Dim sPath As String
    Dim iReturn As Long
    iReturn = SHGetSpecialFolderLocation(100, CSIDL, IDL)
    If iReturn = NOERROR Then
        sPath = Space(512)
        iReturn = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal sPath)
        GetSpecialfolder = sPath
        Exit Function
    End If
    GetSpecialfolder = ""
End Function



En suite sur ton Command1, sans "alourdir" le projet avec le FSO:
Private Sub Command1_Click()
Me.Caption = GetSpecialfolder(CSIDL_DESKTOPDIRECTORY)
Me.Caption = Me.Caption & "\Fichier.txt"

'Crée et inscrit des données dans le fichier.txt sur le bureau de l'utilisateur actuel
'Si le Fichier.txt existe déjà il écrit les données à la suite
Open Form1.Caption For Append As #1
   Print #1, "Ligne de texte 1"
   Print #1, "Ligne de texte 2"
   'etc...
Close
End Sub


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
3
Utilisateur anonyme
23 déc. 2012 à 15:59
Re:

Open "C:\Sujet.txt" For Append As #1
   Print #1, "origine du film: " & text1.text
   Print #1, "durée: " & A2.text
   'etc...
Close




Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
3
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
23 déc. 2012 à 10:09
Bonjour,

Avant de se focaliser sur le message lui-même, vérifies:

- L'existence et l'enregistrement de la bibliothèque FSO
- Tu mets ton chemin en dur (à éviter). De plus cela ferait référence à un système anglais, sur un système français tu n'aurais pas la même chose (Users devient Utilisateurs et Desktop devient Bureau).
- Enfin le "%users%" ne sera pas "développé" car il est inclus dans ta chaîne de caractères, il faut d'abord trouver sa valeur (le nom de login).



Calade
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 déc. 2012 à 11:30
Salut

Comme tu n'as pas nommé clairement tes objets, on ne sait pas ce que sont "A1" et "B"; donc impossible de te dire si cette erreur est normale ou pas.
Puisque l'erreur semble cibler les propriétés de ces objets, tu aurais pu le préciser dans ta question.

Nommer des objets ou variables en rappelant leurs types n'est pas un luxe : c'est une nécessité si le code doit être lu par d'autres + un gain de temps pour toi, lors de la programmation.
Exemples :
Un Label pourrait s'appeler lblTitre
Une TextBox, txtDescriptif
Un bouton, cmdEcritFichier
...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0

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

Posez votre question
Utilisateur anonyme
23 déc. 2012 à 13:17
Open Me.Caption For Append As #1
   Print #1, "Ligne de texte 1"
   Print #1, "Ligne de texte 2"
   'etc...
Close


Pardon...

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
le1scorpion1noir Messages postés 163 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 26 août 2014
23 déc. 2012 à 15:39
merci a vous de me répondre
pour les nom A1 et B sont les nom des textbox
merci aussi pour ta solution acive mai c'est la même erreur
0
le1scorpion1noir Messages postés 163 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 26 août 2014
23 déc. 2012 à 15:40
dsl pour la première image
0
Utilisateur anonyme
23 déc. 2012 à 15:47
Oui parce que ton A1 ne doit pas être un textbox...
Pour le test ajoute un textbox tout neuf et tu remplaces A1.Text par text1.text.



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
le1scorpion1noir Messages postés 163 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 26 août 2014
23 déc. 2012 à 15:51
sa marche mai je trouve aucun fichier dans l emplacement C:
0
le1scorpion1noir Messages postés 163 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 26 août 2014
23 déc. 2012 à 17:43
merci beaucoup
0
le1scorpion1noir Messages postés 163 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 26 août 2014
23 déc. 2012 à 18:37
grrrrrrrrrrrrr

j'ai eu un autre probléme tout fonctionne bien j'ai changer
Open "C:\Sujet.txt" For Append As #1
   Print #1, "origine du film: " & text1.text

par
Open aslam.Caption For Output As 1
Write #1, "origine du film: " & text1.text

pour quil écrase les donnés existant sa fonctionne mai le problème est quil maffiche les ("")
du genre
"Origine du film: francais"

comment je peux les enlever ??
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 déc. 2012 à 22:18
Parce que Write# ajoute des ", alors que Print# ne le fait pas.
C'est normal, c'est l'instruction qui veut ça.

Si tu veux qu'un fichier neuf soit créé à chaque fois, il suffit de remplace Append par Output, mais c'est tout; il faut conserver le Print#.

Si tu changes 3 choses en même temps, ne t'étonne pas que cela donne des résultats étranges ...
Notamment, il ne faut pas supprimer le # pour le nom de fichier.

Pense aussi à lire l'aide avant de poser tes questions.
0
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
23 déc. 2012 à 22:20
@Calade : t'es sûr de ton coup pour le nom différent du dossier de profils sur une version francophone de Se7en ? Pourtant, quand je teste :

'fin c'est pas pour autant que je suis contre ton idée, loin de là, même...
Mais on sait bien que ça gênera sous XP et antérieurs avec Mes Documents, etc.


Pour ton problème de guillements, utilise simplement Print avec For Output :
Dim FID As Integer: FID = FreeFile
Open "c:\temp\fichier.txt" For Output As #FID
Print #FID, "hello world"
Close #FID


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
23 déc. 2012 à 22:22
@jack : Aheum, je crois que j'ai été un peu lent

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
24 déc. 2012 à 07:55
@ghuysmans99,
Oui je suis sur, j'ai même vérifié sur mon portable avant de poster. Mon poste de travail étant et restant sous XP.


Calade
0
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
24 déc. 2012 à 23:43
Users devient Utilisateurs et Desktop devient Bureau

C'est faux sous Win7 (c'est pour ça que j'ai réagi, en fait - de plus, Win7 est bien le sujet de cette discussion). Le bureau se trouve (par défaut) dans C:\Users\qq1\Desktop. Mais pourquoi ont-ils fait ça ? Peut-être pour ennuyer les bourrins qui mettaient des chemins en dur, who knows...

'tite explication pour l'instruction Write# : elle ajoute des guillemets pour qu'Input# soit ensuite capable de récupérer la chaine dans le fichier texte qu'on a écrit (sinon cette chaine n'est pas délimitée et VB ne sait pas où arrêter sa lecture).

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
Utilisateur anonyme
25 déc. 2012 à 03:05
Re:
Les gars... je ne voulais pas prendre partie de la discussion mais...

Windows ne fait que traduire.
Depuis le temps du windows 95, quand vous ouvrez l'explorateur windows vous voyez "c:\utilisateurs" (dans la version française), mais vous allez voir "c:\Utilisadores" dans la version portugaise et ainsi de suite...
Mais si vous passez sous DOS ce sera toujours "c:\users" et ce sera le vrai chemin correctement écrit. (ce n'est qu'une traduction)

Le vrai de vrai (en vb6) c'est quand o fait "app.path" et la on est sur qu'on est dans le dossier de notre application.

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Rejoignez-nous