IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Créer un fichier texte d'après feuille Excel [XL-2000]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut Créer un fichier texte d'après feuille Excel
    Bonsoir,
    A la fin d'un code produisant une variable string, je voudrais la transfromer en fichier .txt.
    J'ai noté quelques indications de l'aide VBA:

    La syntaxe de la méthode Write comprend les éléments suivants :
    object.Write(string)
    object Correspond toujours au nom d'un objet TextStream.
    string Le texte à écrire dans le fichier.
    L 'objet TextStream est remplacé par un espace réservé de variable
    représentant l'objet TextStream renvoyé par l'objet FileSystemObject.
    Dans le code [donné comme exemple] suivant, a correspond à l'objet TextStream renvoyé par la méthode CreateTextFile sur l'objet FileSystem.

    Je crois avoir suivi ces indications dans le bout de code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set fich_texte = CreateObject("Scripting.FileSystemObject")
        Set mon_txt = fich_texte.CreateTextFile("e:\fichiertGED.txt", True)
        mon_txt.Write (mes_gedcoms)
        mon_txt.Close
    Cependant j'ai le message d'erreur à propos de la ligne 3: "Argument ou appel de procédure incorrect".
    Précisions: fich_texte et mon_txt sont déclarées comme objets. Selon l'aide de VBA on peut initialiser (set variable = ...) une variable objet avec à peu près n'importe quel objet. J'ai choisi 2 des WorkSheets de mon classeur, c'est peut-être l'origine de l'erreur ?
    Je me réfère à cette note s.v. "objet, type de variable": "Une variable déclarée comme Object est suffisamment flexible pour contenir une référence à n'importe quel type d'objet, mais la liaison à l'objet désigné par la variable est toujours tardif (liaison au moment de l'exécution). Pour obtenir une liaison précoce (liaison au moment de la compilation), attribuez la référence d'objet à une variable déclarée avec un nom de classe spécifique."
    J'avoue que j'ignore cette distinction sur la liaison et la notion de classe.
    Merci de vos éclaircisssements.
    Cordialement
    Pierre

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonsoir,
    Enlève les parenthéses en ligne 3...

  3. #3
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut [Excel 2000¨] Créer un fichier texte d'après feuille Excel
    Bonsoir,
    Merci.
    J'ai fait la correction mais j'ai obtenu le même message d'erreur. Que se passe-t-il ?
    Merci d'avance.
    Cordialement
    Pierre

  4. #4
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, à lire et assimiler : Manipulation des fichiers en VBA

  5. #5
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut [Excel 2000¨] Créer un fichier texte d'après feuille Excel
    Bonsoir,
    J'ai lu mais ça dépasse ma capacité d'assimilation, désolé. Avant ce soir je ne connaissais aucun des éléments mis en jeu dans ce tutoriel.
    Merci tout de même
    Cordialement
    Pierre

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je me réfère à cette note s.v. "objet, type de variable": "Une variable déclarée comme Object est suffisamment flexible pour contenir une référence à n'importe quel type d'objet, mais la liaison à l'objet désigné par la variable est toujours tardif (liaison au moment de l'exécution). Pour obtenir une liaison précoce (liaison au moment de la compilation), attribuez la référence d'objet à une variable déclarée avec un nom de classe spécifique."
    J'avoue que j'ignore cette distinction sur la liaison et la notion de classe.
    A lire Early ou Late Binding
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    j'avais pas vu cela :
    Citation Envoyé par pierruel Voir le message
    ...
    Précisions: fich_texte et mon_txt sont déclarées comme objets. Selon l'aide de VBA on peut initialiser (set variable = ...) une variable objet avec à peu près n'importe quel objet. J'ai choisi 2 des WorkSheets de mon classeur, c'est peut-être l'origine de l'erreur ?
    ...

    comment nous déclare tu ces variables ... ? pense à mettre des codes plus complets les déclarations de variables font parties du code...!


    tu parle de WorkSheet ?

    Selon l'aide de VBA on peut initialiser (set variable = ...) une variable objet avec à peu près n'importe quel objet
    n'interprète tu pas mal cela ? si par exemple l'on parle de véhicule cela veut dire que l'on peu écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set Vehicule = voiture
    ou 
    set Vehicule = moto
    mais l'on ne peu pas faire ce que tu semble faire :
    donc pour déclarer tes objets tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim fich_texte as object

  8. #8
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut
    Bonjour et merci à bbil,
    J'avais effectivement le sentiment d'avoir une "interprétation très libre" de l'aide de VBA et depuis j'ai décidé de fabriquer, pour m'y référer, 2 petits fichiers texte que je place dans le même répertoire que le classeur Excel contenant le code.
    Ces 2 variables sont déclarées comme "object" puis on a, juste après la ligne sub..., les affectations:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Public GED As String, ligne As Integer, fich_texte As Object
    Public mon_txt As Object
     
    Set fich_texte = essaitxt1.txt
    Set mon_txt = essaitxt2.txt
    .

    Mais VBA considère ces deux noms de fichiers comme des variables non déclarées et si je les fais précéder du path, VBA réagit au backslash et dénonce une erreur de syntaxe. J'ai toujours eu des problèmes avec les pathnames complets (mais c'est une deuxième question; on ouvre une nouvelle discussion ?). Si on les met entre parenthèses, c'est le deux-points qui déclenche le message d'erreur.
    Depuis, j'ai lu le doc Manipulation des fichiers en VBA plein d'exemples de déclarations de variables objets mais je vois mal comment les appliquer dans mon cas. Bref je patauge. Alors que je m'efforce de réviser tout mon code en fonction de la vingtaine de conseils que j'ai reçus dans la discussion précédente; je suis mal récompensé
    Encore merci et cordiales salutations
    Pierre

    Merci Philippe Tulliez.
    je vais tester ces diverses possibilités dans mon code et donnerai des nouvelles.
    Cordialement
    Pierre

  9. #9
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    kiki29 ta donné une adresse de tutoriel à étudier.

    tu as dans le chapitre : II-B-2. Ecriture

    L'écriture dans un fichier ouvert en mode Output ou Append est assurée par la fonction Print #.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim intFic As Integer
     
    intFic = FreeFile
    Open "D:\essai\monfichier.txt" For Output As intFic
    Print #intFic, "Une ligne"
    Close intFic
    L'appel de Print # place automatiquement VbCrLf à la fin de la ligne à chaque appel.

    Rappel : En mode Output, le contenu du fichier est écrasé. Si vous souhaitez ajouter votre texte en fin de fichier, utilisez le mode Append.
    Je pense que c'est possible à appréhender et à adapter

    Bonne journée

  10. #10
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par pierruel Voir le message
    Bonjour et merci à bbil,
    J'avais effectivement le sentiment d'avoir une "interprétation très libre" de l'aide de VBA et depuis j'ai décidé de fabriquer, pour m'y référer, 2 petits fichiers texte que je place dans le même répertoire que le classeur Excel contenant le code.
    Ces 2 variables sont déclarées comme "object" puis on a, juste après la ligne sub..., les affectations:...
    ton premier code était bon il manquait juste la déclaration des variables objects...

    reprends ton premier code avec les déclaration de ton dernier code ...

  11. #11
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut [XL-2000] Créer un fichier texte d'après feuille Excel
    Bonjour,
    Je vous remercie tous de vos contributions que j'ai presque toutes examinées de près mais j'ai une question. comment dire, préalable: Comment fait-on pour clore une discussion qui n'a pas résolu le problème posé ?
    Car je sais très bien comment créer un fichier texte à partir d'une feuille Excel: j'en tire un fichier Word (que je dois de toute manière retoucher pour en faire un gedcom aux normes) et je le sauvegarde au format texte seul. Donc pourquoi me colleter avec des processus qui me dépassent ?
    Pour moi, le débat est clos. Je suis reconnaissant à ce forum et admiratif devant la qualité de ses intervenants. Je reviendrai si l'occasion se présente.
    Cordialement
    Pierre

  12. #12
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
     SaveAsName = "allged" & Time & ".doc"
    FichierTxt "C:\MyTxt\" & Replace(SaveAsName, ":", "-"), GED
    End Sub
     
    Sub FichierTxt(Fichier, TXT)
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set NewFichier = Fso.OpenTextFile(Fichier, 2, True)
    NewFichier.Write TXT
    NewFichier.Close
    Set NewFichier = Nothing
    Set Fso = Nothing
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer un fichier texte contenant des ; sans les " imposés par Excel
    Par man_coef dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/12/2012, 21h22
  2. Créer un fichier texte à partir de données Excel
    Par Olorin56 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/01/2008, 13h56
  3. Créer un fichier texte à partir d'Excel ?
    Par kiliky dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/11/2007, 08h00
  4. [VBA-E]Créer un fichier txt depuis une feuille Excel
    Par marie10 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 20/02/2006, 17h36
  5. Instruction pour créer un fichier text ???
    Par Soulsurfer dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo