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 :

commande shell pour créer un fichier


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Par défaut commande shell pour créer un fichier
    Bonjour à tous et toutes. voilà mon problème:

    à partir d'excel, je dois créer un fichier avec notepad puis l'enregistrer.
    j'ai écrit ce bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ReturnValue = Shell("C:\Windows\Notepad.exe c:\vbatelier\Progression\travail du " & Format(Date, "dd mm yyyy") ".txt", 1)  
    AppActivate ReturnValue    
    SendKeys " il est: " & Time ' je marque une phrase simple
    Application.SendKeys "^{s}", True  ' pour enregistrer le fichier
    Application.SendKeys "%{F}{Q}", True ' pour quitter notepad
    ça fonctionne mais 2 points ne donnent pas satisfaction:

    1) il a un "dong" à chaque création de message car le fichier est créé et appelé en même temps, je reconnais que ce n'est pas trés logique.

    2) plus embêtant, si notepad sert à enregister un texte quelques part sur le disque, le dernier chemin d'accés reste mémorisé et donc qaund VBA execute le code, il y a un message d'erreur car il ne peut pas créér ce nouveau fichier à l'emplacement prévu (changement de disque ou de repertoire).


    je ne doute pas que les pro de VBA me donneront les indications necessaires pour corriger ces imperfections.

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Pourquoi ne pas créer un classeur et l'enregistrer au format texte ?

  3. #3
    Membre confirmé
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Par défaut re
    Bonjour,

    La solution de Daniel.C pour moi c'est l'idéal mais pour répondre à ta question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Sub NotePad()
     
     AppActivate Shell("Notepad.exe", vbNormalFocus)
      SendKeys "abc" ' Ecrire
    Sleep 1000
      SendKeys "^s" ' Pour enregistrer
    Sleep 1000
      SendKeys "C:\Mes documents\travail du " & Format(Date, "dd mm yyyy") & ".txt", 1
    Sleep 1000
      SendKeys "{ENTER}" ' valide le chemin
    Sleep 1000
      Application.SendKeys "%{F}{Q}", True ' pour quitter notepad
    End Sub
    Au plaisir.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Par défaut
    merci tout d'abord à tous les 2 pour vos réponses rapides.

    je vais tester les 2 pour l'experience.

    j'ai deux questions:

    suis-je obligé de créér un classeur ou puis-je utiliser une feuille de mon classeur actuel? je mettrais donc dans une cellule le texte voulu; serait-ce génant si le texte comporte des retous chariots, 300 ou 400 mots dans une seule cellule?

    si j'ai compris la solution que j'avais ébauchée, sendkeys envoi des sequences de touches dans la zone texte et application.sendkeys envoi des sequences de touches dans la barre des menus?

    merci encore pour vos explications.

    Luc

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Tu peux enregistrer la feuille en tant que fichier texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.SaveAs "c:\temp\toto", xlTextWindows

  6. #6
    Membre confirmé
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Par défaut re
    Pour gérer des fichiers textes à la racine de mon classeur j'utilise ceci:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Option Explicit
    Public erreur As Long
    Public FTXT, NUM As Variant
    Sub Fichier_Txt()
    ' Vérification de la présence des fichiers texte
     
    FTXT = ThisWorkbook.Path & "\creation_fichier_txt.txt"
     
    FichierExiste FTXT
    If erreur = 1 Then
    FTXT = ThisWorkbook.Path & "\creation_fichier_txt.txt"
    NUM = FreeFile
    Open FTXT For Output As #NUM
     
    Write #NUM, "Ton texte a ajouter"
     
    Close #NUM
    End If
     
    End Sub
    Public Function FichierExiste(ByVal nom As String) As Boolean
    On Error Resume Next
        Dim attrib As Integer
     
    attrib = GetAttr(nom)
        If (Err <> 0) Then
            FichierExiste = False
            erreur = 1
        Else
            If ((attrib And vbDirectory) = vbDirectory) Then
                FichierExiste = False
            erreur = 1
            Else
                FichierExiste = True
            End If
        End If
    End Function
    Ce code me permet de gérer mes fichiers textes et de noter ce que j'ai besoin dedans un peu comme un journal!!

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

Discussions similaires

  1. [Débutant] Créer sorties dans le Command Window pour enregistrer des fichiers
    Par clem3900 dans le forum MATLAB
    Réponses: 4
    Dernier message: 02/08/2012, 16h04
  2. utiliser une seule commande pour créer plusieur fichier
    Par waldomania dans le forum Administration système
    Réponses: 1
    Dernier message: 13/12/2009, 16h43
  3. [Java] Quel solution pour créer un fichier XML dans mon cas?
    Par petozak dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 23/08/2006, 12h10
  4. [CR] Version nécessaire pour créer des fichiers DSR ?
    Par aysse dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 17/11/2003, 09h01
  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