Problème avec writeLine sous seven

Résolu
Messages postés
163
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
26 août 2014
-
 Utilisateur anonyme -
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


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

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
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
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)

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
Messages postés
163
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
26 août 2014

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
Messages postés
163
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
26 août 2014

dsl pour la première image

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
Messages postés
163
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
26 août 2014

sa marche mai je trouve aucun fichier dans l emplacement C:
Messages postés
163
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
26 août 2014

merci beaucoup
Messages postés
163
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
26 août 2014

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 ??
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
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.
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
15
@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
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
15
@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
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
@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
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
15
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

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