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 :

Commandes DOS en VBA / Concaténation de fichier sous Dos


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2007
    Messages : 78
    Par défaut Commandes DOS en VBA / Concaténation de fichier sous Dos
    Bonjour,

    J'ai une petite question toute bête mais qui me tracasse :

    Quelqu'un peut-il me dire ce qui cloche dans la macro écrite avec Excel 2003 sous Windows XP ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test1()
        lerep = CurDir
        file1 = lerep & "\LoyersBruts1003.CSV"
        file2 = lerep & "\Foncier1003.CSV"
        file3 = lerep & "\complet1003.CSV"
        lacommande = "file1 + file2  file3"
        Shell "command.com /c copy" & lacommande
     
    End Sub
    Quand je la fais tourner, je n'ai pas de message d'erreur mais le fichier "complet1003.csv" est introuvable...

    Si j'enlève le commutateur /c, dans la fenêtre d'invite de commandes, j'ai le message suivant :

    Mauvais répertoire de recherche de COMMAND.COM
    Format de paramètre incorrect
    Trop de paramètres
    Trop de paramètres

    Merci pour votre aide.

    Christian

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Bonjour,

    Que veux-tu avoir AU FINAL dans ta variable "lacommande " ? Que doit-elle donner ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2007
    Messages : 78
    Par défaut
    Merci pour la réponse rapide.

    En fait je cherche à concatener deux fichiers csv en un. J'utilise pour cela la commande DOS copy file1 + file2 file3.

    Mais ça marche pô !

    A bientôt.

  4. #4
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Déja est ce que Lerep est le bon repertoire ?

    ensuite vérifie la commande que tu vas passer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test1()
    lerep = CurDir
    file1 = lerep & "\LoyersBruts1003.CSV"
    file2 = lerep & "\Foncier1003.CSV"
    file3 = lerep & "\complet1003.CSV"
    lacommande = "file1 + file2 file3"
    msgbox  "command.com /c copy" & lacommande
     
    End Sub
    Vérifie que le code marche en direct dans la boite de commande

    sans tout faire mais en regardant d'un peu plus près :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lacommande = "file1 + file2 file3"
    te donne pour la commande une chaine de caractères "file1 + file2 file3"
    a mon avis c'est pas ça que tu veux.

    De plus aucun espace entre copy et macommande

    En fait je cherche à concatener deux fichiers csv en un. J'utilise pour cela la commande DOS copy file1 + file2 file3.
    en fait je ne connais pas cette utilisation de la commande, ça marche ?

    edit : ok ça existe

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2007
    Messages : 78
    Par défaut
    C'est vrai qu'il manque un espace !!

    J'essaye tout de suite et reviens vers vous !

    merci encore !

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2007
    Messages : 78
    Par défaut
    Non ! Rien à faire !

    J'ai toujours des messages d'erreurs sous DOS.

    lerep doit être le bon répertoire puisque je vais le chercher avec CurDir.

    En fait, je suis sous ma partition d: et mon windows est sous c:. Cela peut-il avoir un effet ?

  7. #7
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Je viens de faire le test sous dos pour que ça fonctionne tu dois avoir dans ta variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    copy "D:\...\1.csv" + "D:\AGR\VBA Excel\2.csv" "D:\..\3.csv"

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 683
    Par défaut
    salut,
    la concaténation que tu tentes n'est-elle pas un peu bancale ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lacommande = file1 & " "  & file2 & " " & file3
    serait déjà moins aléatoire
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel (3e édition)
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  9. #9
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    LA but c'est déja que tu obtienne la bonne commande, montres nous ce que tu obtiens quand tu fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox  "command.com /c copy" & lacommande
    En fait, je suis sous ma partition d: et mon windows est sous c:. Cela peut-il avoir un effet ?
    Moi aussi et pas de soucis.

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2007
    Messages : 78
    Par défaut
    C'est ce que me donne la variable lerep

    Au début du code j'ai :

    lerep= CurDir

    qui me donne le chemin complet des fichiers à concatener ...

    Bizarre, n'est-ce-pas ?

    Bien sûr ! Suis-je bête !!

    si je mets de guillemets entre file1 + file2 file3, j'obtiens file1 + file2 file3

    Merci de m'avoir ouvert les yeux !!!

    Mais il faut encore que j'essaye ...

    A tout de suite !

  11. #11
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    C'est ce que me donne la variable lerep

    Au début du code j'ai :

    lerep= CurDir

    qui me donne le chemin complet des fichiers à concatener ...

    Bizarre, n'est-ce-pas ?
    Je ne comprend pas

    Je te laisse regarder, si tu as un problème tu dis.

    Nb : Ma prochaine connection demain matin

  12. #12
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2007
    Messages : 78
    Par défaut
    Bon, j'ai un peu avancé mais cela ne marche toujours pas.

    J'ai fait un test sur l'invite de commande : en fait, le nom du chemin est trop long (=d:\machin\chose\truc\....). Comme je dois le rentrer pour les trois fichiers (file1, file2 et file3), au bout d'un certain nombre de caractères, ça bloque, je ne peux pas rentrer le reste de la commande ... Il y a longtemps que je n'ai plus bidouiller en DOS.

    Par contre, si je fais la même commande en omettant le chemin pour le file3, ça fonctionne. Sauf qu'il va me créer mon nouveau fichier dans le répertoire c:\docume~1\.... et je ne peux pas changer de répertoire avec la commande CHDIR ???


  13. #13
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 133
    Par défaut Pas d'espaces
    Bonjour

    Pour concatener plusieurs fichiers pas d'espaces entre les fichiers sources et un seule cible

    Donc la commande est sous dos copy fichier1.txt+fichier2.txt fichier3.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub test1()
    lerep = ThisWorkBook.Path
    file1 = lerep & "\LoyersBruts1003.CSV"
    file2 = lerep & "\Foncier1003.CSV"
    file3 = lerep & "\complet1003.CSV"
    lacommande = file1 & "+" & file2 & " " &  file3
    msgbox  "command.com /c copy " & lacommande
     
    End Sub
    Voila la syntaxe correcte



  14. #14
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2007
    Messages : 78
    Par défaut
    Bonjour Lynk92260,

    Merci pour ta contribution. Malheureusement, cela ne fonctionne toujours pas.

    Je n'y comprends rien : quand je tape directement la commande dans l'invite de commande, c'est maintenant impeccable (j'ai mis les fichiers directement sous d: ).

    Quand je le fais par VBA, avec la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shell "COMMAND.com copy " & lacommande
    rien à faire ! Dans la fenêtre d'invite de commande, il me dit : Mauvais répertoire de recherche de COMMAND.COM ...

    Il y a un blème quelque part, mais où ?

    Re-Bonjour,

    Pour répondre à aalex_38, en VBA, la commande CurDir renvoie une valeur indiquant le chemin en cours :

    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyPath = CurDir    ' Renvoie "C:\WINDOWS\SYSTEM".
    Merci de vous intéresser à mon problème.

    Christian

  15. #15
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 133
    Par défaut Autre methode
    bon il faut utiliser la bibliothèque filesystem sous vba.

    Procedure du code ci dessous devrait fonctionner .


    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
     
    Sub Joindre2Fichiers(sFichierSource as string, sFichierCible as string)
        Const ForReading = 1, ForWriting = 2, ForAppending = 8
        ' fCible fichier dans lequel on va rajouter f2
        Dim fs, fCible,fSource 
        Dim txtf2 as String 'Pour récupérer tout le fichier 2
     
        Set fs = CreateObject("Scripting.FileSystemObject")
     
        Set fSource = fs.OpenTextFile(sFichierSource , ForReading,TristateFalse)    
     
        Set fCible= fs.OpenTextFile(sFichierCible, ForAppending,TristateFalse)
     
        txtf2=fSource.ReadAll
     
        fCible.Write(txtf2) 
     
        ' ou 
        ' fCible.Write(fSource.ReadAll)
     
        fSource .Close
     
        fCible.Close
     
    End Sub
    Je pense avec cette approche cela marche mieux en appelant autant de fois cette procédure qu'il y a des fichiers à ajouter.


  16. #16
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2007
    Messages : 78
    Par défaut
    Bonjour Lynk92260,

    Merci pour ton conseil.

    J'avais aussi vu cette méthode quelque part dans les forums mais je n'osais l'utiliser ... Je n'en comprends pas tous les finesses

    Juste une petite question subsidiaire : sous quelle forme faut-il passer les variables sFichierSource et sFichierCible ? Je présume qu'il faut aussi donner le chemin complet des fichiers à concaténer. De plus, est-ce que le fichier cible doit être créé avant ou sera-t-il créé automatiquenent ?

    Grand merci pour le coup de main !

  17. #17
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 133
    Par défaut
    Effectivement le nom du fichier complet pour les deux variables

    donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    file1 = lerep & "\LoyersBruts1003.CSV"
    file2 = lerep & "\Foncier1003.CSV"
     
    file3 = lerep & "\complet1003.CSV"
     
    Joindre2Fichiers file1, file3
    Joindre2Fichiers file2, file3
    En principe le fichier cible est crée si ça n'existe pas .

    bon courage on est presque au bout du tunnel !!!!!

  18. #18
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2007
    Messages : 78
    Par défaut
    J'ai honte mais il doit encore avoir un problème quelque part.

    Quand je lance la macro suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test1()
        lerep = ThisWorkbook.Path
        file1 = lerep & "\Foncier1003.CSV"
        file3 = lerep & "\complet1003.CSV"
        Joindre2Fichiers file1, file3
     
    End Sub
    il me donne un message d'erreur : Erreur de compilation Type d'argument ByRef incompatible !

    Vois-tu d'où cela peut provenir ?

  19. #19
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 133
    Par défaut modif
    remplace


    ces lignes

    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
     
        Set Fs = CreateObject("Scripting.FileSystemObject")
     
        Set fSource = Fs.OpenTextFile(sFichierSource, ForReading, False, TristateFalse)
     
        Set fCible = Fs.OpenTextFile(sFichierCible, ForAppending, True, TristateFalse)
     
        'txtf2 = fSource.ReadAll
     
        'fCible.Write txtf2
     
        ' ou
        fCible.Write (fSource.ReadAll)
     
        fSource.Close
     
        fCible.Close
    Je dois partir cherche l 'aide sur FilesSystemObject il y en plein sur le site


  20. #20
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    T'oublies que file1, 2 et 3 sont des variables. Teste ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        lacommande = "cmd /c copy " & file1 & " + " & file2 & " " & file3
        Shell lacommande

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Modification contenu d'un fichier sous dos
    Par bhe dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 05/06/2008, 20h01
  2. supprimer des fichiers sous dos en fonction de leur date
    Par nikoko dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 28/04/2008, 17h37
  3. fonction copy fichier sous Dos et net use
    Par bml dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 06/09/2007, 11h36
  4. commande d'execution d'une classe java sous dos
    Par sirine1 dans le forum Langage
    Réponses: 1
    Dernier message: 11/08/2007, 15h48
  5. Suppression de lignes dans un fichier sous dos
    Par ducho dans le forum Windows
    Réponses: 2
    Dernier message: 16/05/2005, 11h20

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