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 :

Macro VBA - Manipulation de 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
    Profil pro
    Inscrit en
    Février 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 19
    Par défaut Macro VBA - Manipulation de plusieurs fichiers
    Bonjour,


    j'ai une macro à développer qui doit effectuer les actions suivantes:


    ouvrir un fichier excel, appelons le a.xls
    copier les infos présentes dans a.xls
    les coller dans un fichier synthétique
    Fermer le fichier a.xls
    passer au fichier suivant, b.xls
    ainsi de suite, la macro refaire les mêmes actions sur tous les fichiers présents dans le répertoire.



    Voila, donc la macro "récolte" des informations dans différents fichiers, tous de même format, et les réunit dans un fichier de synthèse.


    Pour le code "copier coller", mise en forme etc, pas de pb, l'enregistreur de macro est là



    Par contre, j'aurais besoin du code et/ou de la syntaxe, qui permettraient à la macro, une fois les infos copiées/collées du 1er fichier, de la faire passer au fichier suivant, et ce ainsi de suite jusqu'au dernier fichier présent dans le dossier, sachant que le nombre total de fichier varie selon les jours ?




    Je sais que je demande beaucoup, mais je débute (de toute évidence!), et ce sont des questions pour lesquelles je n'ai pas trouvé de réponse dans mon livre !!!



    merci d'avance pour votre aide !!!

  2. #2
    Membre éprouvé Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Par défaut
    Bonjour

    tu peux utiliser la fonction rechercher du forum... il y a plein de cas qui ressemble au tien

    http://www.developpez.net/forums/sho...erer+donn%E9es
    http://www.developpez.net/forums/sho...fichier+fermer

    Si tu cherche bien il y a meme un guide réalisé pour récupérer des données d'un fichier sans l'ouvrir (ce qui te feras gagné énormément de temps crois moi)

  3. #3
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,
    Essaye 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
    Sub FileOpen()
    Dim Fichier$, Chemin$
    Dim Wb As Workbook
     
    Chemin = "D:\Divers\Temp\" '<-- adapter le chemin du répertoire
    Fichier = Dir(Chemin & "*.xls")
     
    Do While Fichier <> ""
    Set Wb = Workbooks.Open(Chemin & Fichier)
    'suite de la procedure
    '....
    '....
    '....
    '....
    MsgBox "voulez-vous poursuivre"
    Wb.Close True
    Set Wb = Nothing
    Fichier = Dir
    Loop
     
    End Sub
    Ce qui ouvrira un par un tous les fichiers *.xls du répertoire désigné, peu importe le nom des fichiers

    (ah nos messages se sont croisés, pas vu que Many avait déjà répondu)

  4. #4
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Le principe de base est simple, il s’agit de parcourir une liste d’objets classeur.
    De ce côté-là il faut voir du côté de : For Each…Next ou de Do While…loop, Do Loop …Until etc…

    Ce qui faciliterait de beaucoup les réponses et augmenterait leurs pertinence serait de savoir de quelle liste il s’agit :

    1) Si tous les fichiers concernés sont déjà ouverts
    2) Si la liste est finie dans ce cas tu crée une variable tableau avec leurs noms et chemins et c’est elle que tu scanne via les instructions de boucle ci-dessus.
    3) Si la liste n’est pas dénombrée, mais dans un seul dossier, tu scannes tout le dossier..
    4) Etc..

    Donc ce qu’il faut savoir c’est si :
    tes classeurs sont ouverts avant ?
    s’il faut aller les chercher et les ouvrir
    dans un seul répertoire ?
    ce répertoire ne contient-il que des classeurs à traiter ou faut-il ajouter un filtre ?
    dans divers répertoires ?
    ces répertoire ne contiennent-ils que des classeurs à traiter ou faut-il ajouter un filtre ?

    D’autre part quel est ton environnement, tes classeurs sont sur ton micro ou sur un serveur, y-a-t-il un risque qu’un classeur soit déjà ouvert par un autre etc…

    Donc continuer ta démarche avec un papier –crayon, te faire un mini cahier des charges ce qui te permettra un recherche ciblée sur le forum et l’obtention de réponses en pleine cible.

    cordialement,

    Ormonth

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 19
    Par défaut
    Merci à Ormonth, Many31 et fring pour vos réponses ! Je suis en train de lire le forum pour chercher les informations qui me manquent



    Pour Ormonth en particulier:


    Les fichiers, au format .csv, sont importés de manière quotidienne dans ce répertoire. Leur quantité peut varier d'un jour à l'autre. Leur nom est impossible à déterminer au préalable.


    Il faudrait donc que la macro, pour chacun de ces fichiers:

    1 l'ouvre

    2 choisisse la première (et unique) feuille du classeur (cette feuille porte le même nom que le fichier, histoire de compliquer la tâche !! donc pour le fichier a.csv, il faudra que la macro aille sur la feuille a, fichier b.csv sur la feuille b, etc...)

    3 Copie le contenu de cette feuille

    4 Le colle dans un document excel préalablement vierge, appelons-le "synthèse", situé dans un autre classeur

    5 Ferme le fichier .csv

    5 ouvre le 2nd fichier .csv, copie le contenu de sa page, le colle dans "synthèse" en dessous des données précédemment collées, referme le .csv, et ainsi de suite pour tous les fichiers .csv du dossier.


    6 à la fin la macro ferme le fichier "synthèse" et le sauvegarde à la date du jour


    Donc d'après ce que tu indiques dans ton message, la liste n'étant pas dénombrée et les fichiers étant au préalable fermés, il faudrait effectivement que je "scanne" le dossier, en boucle ?


    ce dossier est sur un disque partagé auquel j'ai pleinement accès. Pas de risque que les fichiers soient ouverts par quelqu'un d'autre.


    Idéalement, il faudrait que, une fois que les fichiers .csv sont importés dans le dossier, j'ouvre un classeur dans lequel se trouve un bouton relié à ma macro, et qu'en cliquant dessus, la macro exécute le retraitement des données, crée le fichier de synthèse, et le sauvegarde à la fin. Je ne vous demande pas de tout me dire évidemment, mais je suis preneuse de toute information qui me permettrait de progresser, et surtout de comprendre comment excel fonctionne derrière, merci d'avance !!!

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 19
    Par défaut
    ok je crois avoir trouvé un sujet qui pourrait m'aider:


    pour info, c'est le sujet:

    http://www.developpez.net/forums/sho...d.php?t=442352



    l'enquête continue !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 19
    Par défaut
    Je travaille sur l'exemple donné dans le sujet

    http://www.developpez.net/forums/sho...d.php?t=442352


    En exécutant ce code:

    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
    
    Sub Test1()
    
    Dim RepFich As Variant
    Dim CL1 As Workbook, i As Byte, Rep$
    Dim FL1 As Worksheet
        Set CL1 = ThisWorkbook
     
        'Ajoute une feuille au classeur destiné à recevoir les données des autres classeurs
        CL1.Sheets.Add
        CL1.ActiveSheet.Name = "FeuilCumul"
        Set FL1 = CL1.ActiveSheet 'Instance de la feuille
        
        'Répertoire des fichiers à copier
        Rep = "C:\Documents and Settings\sfrancin\Desktop\VBA\Projet Merging\dossier brouillon"
        
        'Crée le tableau des fichiers du répertoire
        Set RepFich = Application.FileSearch
        
        'Ouverture des fichiers du répertoire
        With RepFich
            .LookIn = Rep
            .FileType = msoFileTypeExcelWorkbooks
            If .Execute(SortBy:=msoSortByFileName, _
                SortOrder:=msoSortOrderAscending) > 0 Then
                For i = 1 To .FoundFiles.Count
                    DoEvents
                     Copy FL1, .FoundFiles(i)
                Next
              Else
                MsgBox "Aucun fichier dans le répertoire " & Rep
            End If
        End With
    End Sub

    VBA bloque sur Copy FL1, en me répondant "sub ou fonction non définie"


    cela m'étonne qu'il y ait une erreur etant donné que c'est un programme développé par un membre expérimenté du forum, serait-ce une incompatibilité avec ma configuration de fichiers ? Sachant que J'ai mis dans le répertoire-cible différents fichiers qui pourraient être consultés par la macro à titre d'exemple

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

Discussions similaires

  1. [XL-2010] Macro Modification multiple sur plusieurs fichiers
    Par tbuhagiar dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/10/2013, 12h58
  2. manipulation de plusieurs fichiers excel + tracer des courbes ?
    Par abdelkarim_1987 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/09/2013, 12h07
  3. [XL-2003] Comment rendre une macro VBA accessible à tous les fichiers .xls
    Par Toto_le_héros38 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/01/2011, 21h23
  4. macro vba manipuler 2 feuilles
    Par jeanahmed dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/06/2010, 08h33
  5. Réponses: 1
    Dernier message: 19/03/2008, 09h51

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