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 :

Sauvegarde d'une variable dans un fichier texte


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 573
    Par défaut Sauvegarde d'une variable dans un fichier texte
    Bonjour,

    Dans mon code VBA, j'ai une variable qui contient des chaines de caractère (string classique) et je souhaiterai sauvegarder ces données dans un fichier .txt
    Mon soucis est que ce code doit être cross plateforme et pouvoir tourner aussi bien sous windows que sous mac .... et la ca se complique

    Une petite piste ?

    Merci d'avance

    Thais

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Le plus simple :
    Tu crées un nouveau classeur avec Workbooks.Add
    Tu copies tes données dans la feuille de ce classeur
    Tu sauvegardes au format xlTextWindows ou xlTextMac avec un SaveAs.
    Tu fermes le fichier avec un Close.

    Bien sûr tu pourrais faire ça avec un traitement séquentiel mais ça ne sera pas plus simple.
    Mon soucis est que ce code doit être cross plateforme et pouvoir tourner aussi bien sous windows que sous mac
    Tu mets le SaveAs dans une structure If qui vérifie la propriété OperatingSystem. https://msdn.microsoft.com/fr-fr/VBA...property-excel
    En fait, tu fais un SaveAs pour Mac et un pour Windows en modifiant le format et le chemin.

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Citation Envoyé par thais781 Voir le message
    Mon soucis est que ce code doit être cross plateforme et pouvoir tourner aussi bien sous windows que sous mac
    Merci alors d'indiquer précisément et techniquement l'attendu après avoir comparé les deux plateformes …
    L'instruction pour créer un fichier texte étant unique en VBA et ce, peu importe MAC ou PC.

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 573
    Par défaut
    Bonjour,

    Merci pour votre aide
    Effectivement marche pas mal .... sauf un truc bizarre ....
    Le code qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Sheets("Feuil1").Select
        Sheets("Feuil1").Copy
        ActiveWorkbook.SaveAs FileName:="/Users/testuser/Desktop/toto.txt", _
            FileFormat:=xlUnicodeText, CreateBackup:=False
        ActiveWindow.Close
    Mais dès que j'essaye de modifier le nom du fichier cible dans la macro, je me retrouve avec une erreur d'execution 1004, "Nous ne pouvons pas accéder au fichier tata.txt"
    Alors que la seule modification faite est le remplacement de toto.txt par tata.txt

    Curieux .....

    J'ai loupé quelque chose ?

    Thais

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut RE
    Bonjour
    une autre methode non conventionnelle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub test()
        Dim plage As Range, EXT As String, chemin As String
        Set plage = Range("A1:C10")' preciser la plage ici (activesheet.usedrange pour tout la partie utilisée) 
        chemin = "C:\Users\" & Environ("username") & "\Desktop\" & Replace(plage.Address, ":", "-")
        EXT = ".csv"
        RangeToFichierTexT plage    , ";", chemin, EXT'si pas de chemin precisé c'est le desktop de l'user par defaut 
       'RangeToFichierTexT plage    , separateur de colonne , chemin, EXTENTION 
    End Sub
    Function RangeToFichierTexT(Rng, Optional separateur As String = ";", Optional chemin As String = "", Optional EXT As String = ".csv")
        Dim T, clearall, fichier As String
        If chemin = "" Then chemin = "C:\Users\" & Environ("username") & "\Desktop\" & Replace(Rng.Address, ":", "-")
        With CreateObject("htmlfile")
            clearall = .parentwindow.clipboardData.setData("Text", "")    'on vide le clipboard au cas ou il y aurait quelque chose
            Rng.Copy    'on copy la plage tout simplement
            'on recupere le texte de la plage dans le cliboard on fait un replace vbtab par le separateur en parametre injecté dans la fonction";" par defaut
            T = Replace(Replace(.parentwindow.clipboardData.GetData("TEXT"), vbTab, separateur), vbCrLf, separateur & vbCrLf): End With
        Application.CutCopyMode = False    'on relache la plage copiée
        'on créé le ficher avec open for....
        fichier = chemin & EXT
        x = FreeFile
        Open fichier For Output As #x
        Print #x, T
        Close #x
    End Function
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par thais781 Voir le message
    Le code qui fonctionne :
    Petite remarque qui ne répond pas à ta question mais qui me gratouille :
    La ligne Sheets("Feuil1").Select ne sert absolument à rien.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 573
    Par défaut
    Merci patricktoulon, mais les ActiveX ne sont pas possible sur Mac, uniquement Windows
    @Menhir, oui, ok avec toi, cette ligne n'est pas utile


    D'autres idées ?
    Le premier code devrait fonctionner mais je ne comprend pas pourquoi modifier la ligne de code change quelque chose ????
    Est ce que la modification peut intégrer un caractère special non visible ?

    Thais

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Tu n'aurais pas mis dans ton codes des trucs pour masquer les messages, du genre DisplayAlerts = False ou autres joyeusetés du genre ?

    Citation Envoyé par thais781 Voir le message
    Mais dès que j'essaye de modifier le nom du fichier cible dans la macro, je me retrouve avec une erreur d'execution 1004, "Nous ne pouvons pas accéder au fichier tata.txt"
    Le libellé de ce message d'erreur parait très étrange.
    D'où est-il issu ? Tu n'aurais pas de On Error dans ton code ?

Discussions similaires

  1. Ecrire nom d'une variable dans un fichier texte
    Par julien41 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 19/07/2012, 11h03
  2. [XL-2003] Insérer une variable dans un fichier texte
    Par harisman87 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/07/2010, 10h01
  3. Enregistrer une variable dans un fichier texte
    Par xunil2003 dans le forum Langage
    Réponses: 5
    Dernier message: 19/10/2009, 15h59
  4. Sauvegarde d'une matrice dans un fichier text
    Par Christinita dans le forum MATLAB
    Réponses: 5
    Dernier message: 01/12/2008, 10h27
  5. Réponses: 2
    Dernier message: 08/06/2006, 13h48

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