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 :

Automatiser un traitement sur plusieurs fichiers


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 48
    Par défaut Automatiser un traitement sur plusieurs fichiers
    Bonsoir à tous,

    Je sollicite votre aide pour m'aider à automatiser un traitement avec une macro VBA. La principale difficulté c'est que j'ai beaucoup de mal à comprendre les macros Excel, du coup je vais pas pouvoir faire grand chose tout seul. C'est pour cette raison que je me tourne vers vous.

    Ce que j'essai de faire c'est de pouvoir effectuer plusieurs tâches dans des classeurs Excel. Du coup, ma première étape consistera à parcourir un répertoire dans lequel se trouve plusieurs dossiers. Ainsi pour chaque dossier, j'ouvre les classeurs excel dans lequel je copie certaines lignes et colonnes, je supprimes, renommes certains onglets. La structure est identique pour chacun de mes classeurs, ce qui devrait aidé au traitement automatique. Une fois se traitement effectuer, j'enregistre le classeur dans un nouveau format et je supprime l'ancien format.

    Comme je vous ai expliqué, je pars de 0 donc si vous voulez bien prendre le temps de construire avec moi ce code, avec une explication ou de la documentation pour que ce traitement soit une source d'apprentissage pour moi, je vous en serait très reconnaissant.

    Merci beaucoup.

  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
    Citation Envoyé par sosoboss Voir le message
    Comme je vous ai expliqué, je pars de 0 donc si vous voulez bien prendre le temps de construire avec moi ce code, avec une explication ou de la documentation pour que ce traitement soit une source d'apprentissage pour moi, je vous en serait très reconnaissant.
    Dans ce cas, tu devrais commencer par là : http://bidou.developpez.com/article/VBA/

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 48
    Par défaut
    Merci beaucoup pour la documentation, je vais essayer de comprendre les fonctionnalités du VBA.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 48
    Par défaut
    Du coup, j'ai commencé à me pencher sur mon problème d'automatisation en regardant la documentation, malheureusement ça reste très flou dans ma tête pour utiliser toutes ces instructions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Dim Fso As Object, MonRepertoire As String
    Dim f1 As Object, f2 As Object, wb As Workbook
    Dim nom_fichier As String
    Set Fso = CreateObject("Scripting.FileSystemObject")
    MonRepertoire = "C:\Users\toto"
    For Each f1 In Fso.GetFolder(MonRepertoire).SubFolders
        For Each f2 In f1.Files
        Set wb = Workbooks.Open(f2)
    Si j'ai bien compris ce début de code, je récupère tous l'objet spécifiés par la variable MonRepertoire.

    Ensuite je boucle sur tous les dossiers présents dans le répertoire, et pour chaque fichiers j'ouvre le fichier Excel.
    Du coup à cette étape je bloque, car je voudrais spécifier uniquement quel type de classeur doit s'ouvrir. J'ai besoin uniquement des fichiers (.xlsx).

    Est-ce que vous pouvez m'aider pour savoir quel argument je dois spécifier pour uniquement prendre en compte les fichiers avec l'extension .xlsx ?

    Je vous remercie beaucoup de votre aide.

  5. #5
    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 sosoboss Voir le message
    Si j'ai bien compris ce début de code, je récupère tous l'objet spécifiés par la variable MonRepertoire.
    Pour scruter des fichiers et des répertoires, à ta place je passerais plutôt par la fonction Dir() plutôt que d'attaquer les objets du filesystem.
    C'est beaucoup plus simple.
    Lire ça : https://docs.microsoft.com/fr-fr/off...p/dir-function

    Pour des exemples d'application :
    https://excel.developpez.com/faq/?page=FichiersDir
    https://excel.developpez.com/sources/?page=Fichiers

    Du coup à cette étape je bloque, car je voudrais spécifier uniquement quel type de classeur doit s'ouvrir. J'ai besoin uniquement des fichiers (.xlsx).
    La fonction Dir() peut utiliser les alias * et ?.
    Par exemple, pour avoir les fichier xlsx : Dir(chemin & "*.xlsx"), en supposant que la variable "chemin" contient le chemin complet du fichier à scruter.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 48
    Par défaut
    Citation Envoyé par Menhir Voir le message


    La fonction Dir() peut utiliser les alias * et ?.
    Par exemple, pour avoir les fichier xlsx : Dir(chemin & "*.xlsx"), en supposant que la variable "chemin" contient le chemin complet du fichier à scruter.
    J'avais regardé l'instruction Dir et je ne comprenais pas comment l'utiliser, lorsque mon répertoire contient plusieurs sous-dossiers. C'est pour cette raison que j'ai utilisé les objets filesystem.

    Du coup, est-il possible de boucler sur tous les dossiers du répertoire avec la commande dir ?

    Par exemple le répertoire se trouve à cet emplacement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    repertoire = "C:\Users\destop\toto"

    Du coup, j'ai besoin de parcourir tous les dossiers qui vont se trouver dans le répertoire "toto" et pour lequel je ne prends en compte que l'extension .xls

Discussions similaires

  1. Bug d'un Loop sur traitement de plusieurs fichiers
    Par FloLLM dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/06/2018, 16h24
  2. idee pour traitement sur plusieurs fichier excel
    Par jumpman dans le forum VB.NET
    Réponses: 0
    Dernier message: 28/10/2009, 19h38
  3. Sed sur plusieurs fichiers
    Par gangsoleil dans le forum Linux
    Réponses: 4
    Dernier message: 21/02/2006, 11h55
  4. #define sur plusieurs fichiers
    Par [thebadskull] dans le forum C
    Réponses: 5
    Dernier message: 14/10/2005, 20h52
  5. Réponses: 4
    Dernier message: 03/12/2004, 11h18

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