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 :

Exécuter macro sur X fichiers dans X dossiers [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2009
    Messages : 38
    Points : 37
    Points
    37
    Par défaut Exécuter macro sur X fichiers dans X dossiers
    Bonjour à toutes et à tous,

    Mon problème est simple à décrire mais me bloque depuis ce midi.

    J'ai créé une macro qui doit :

    * Ouvrir un fichier "1" ;
    * Copier certaines lignes du fichier "1" dans mon fichier "Cible" ;
    * Fermer le fichier "1".

    Pas de problème de ce côté.

    Ma problématique est :

    Je dois effectuer cette action "d'ouverture/copier/coller/fermeture" sur un nombre indéterminé de fichiers Excel, placés dans un nombre indéterminés de dossiers, tous placés dans un même dossier mère.

    Comment puis-je faire ?

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Ça te prendrait une function récursive (qui se rappelle elle-même) pour pouvoir lire tous les sous-répertoires.
    En cherchant sur ce site, tu devrais pouvoir trouver ton bonheur.

    Personnellement, j'utiliserais Dir() pour rechercher les répertoires et les fichiers.
    D'autres vont te suggérer le FileSystemObject...
    À toi de voir
    MPi²

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Voici un exemple que j'avais déjà fait pour quelqu'un.
    Tu vas devoir apporter les modifications nécessaires (ton chemin principal, le type de fichier que tu veux ouvrir, une vérification du nom ou du contenu si nécessaire,...)

    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
    38
    39
    40
    41
    42
    Sub SearchFiles()
        ImportFiles "C:"   'Change for the main folder
    End Sub
     
    Sub ImportFiles(varPath As Variant)
        Dim varFile As Variant
        Dim objColl As Collection
     
        On Error GoTo ErrTrap
     
        Set objColl = New Collection
     
        If Right(varPath, 1) <> "\" Then varPath = varPath & "\"
     
        varFile = Dir(varPath, vbDirectory + vbArchive)
        Do While varFile <> ""
            'Stock Folders
            If GetAttr(varPath & varFile) = vbDirectory Then
                If Left(varFile, 1) <> "." Then
                    objColl.Add varPath & varFile
                End If
     
            'Dealing with the files
            ElseIf LCase(Right(varFile, 3)) = "jpg" Or LCase(Right(varFile, 4)) = "jpeg" Then
                'Do what you want with the image
                MsgBox varPath & varFile
    '            Stop
            End If
            varFile = Dir
        Loop
     
        For Each varFile In objColl
            ImportFiles varFile
        Next
     
        Set objColl = Nothing
     
        Exit Sub
     
    ErrTrap:
        MsgBox Err.Number & vbCrLf & Err.Description
    End Sub
    MPi²

  4. #4
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2009
    Messages : 38
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    Tout d'abord, merci pour les réponses apportées.

    Hélas, celles-ci ne sont guère satisfaisantes dans mon cas, aucune ne fonctionne malgré les modifications nécessaires apportées.

    Je rencontre généralement l'erreur "1004 - Fichier.xls introuvable". Celle-ci s'affiche pour le 1er fichier xls de chaque dossier (et la macro ne semble même pas traiter le reste).

    Ci-dessous, mon code actuel.

    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
    38
    39
    40
    41
    42
    43
    44
    45
     
    Sub ImportFiles(varPath As Variant)
        Dim varFile As Variant
        Dim objColl As Collection
     
        On Error GoTo ErrTrap
     
        Set objColl = New Collection
     
        If Right(varPath, 1) <> "\" Then varPath = varPath & "\"
     
        varFile = Dir(varPath, vbDirectory)
        Do While varFile <> ""
            'Stock Folders
            If GetAttr(varPath & varFile) = vbDirectory Then
                If Left(varFile, 1) <> "." Then
                    objColl.Add varPath & varFile
                End If
     
            'Dealing with the files
            ElseIf LCase(Right(varFile, 3)) = "xls" Then
                'Do what you want with the image
                Set Wb = Workbooks.Open(varFile)
                Wb.Close False
                Set Wb = Nothing
    '            Stop
            End If
            varFile = Dir
        Loop
     
        For Each varFile In objColl
            ImportFiles varFile
        Next
     
        Set objColl = Nothing
     
        Exit Sub
     
    ErrTrap:
        MsgBox Err.Number & vbCrLf & Err.Description
    End Sub
     
    Sub Test()
        ImportFiles "\\Dossier Racine contenant deux autres dossiers qui, eux, contiennent les fichiers Excel ciblés\"   'Change for the main folder
    End Sub
    Merci d'avance pour vos prochaines réponses.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Peut-être en changeant cette ligne ?
    Set Wb = Workbooks.Open(varFile)
    pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Wb = Workbooks.Open(varPath & varFile)
    MPi²

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2009
    Messages : 38
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par parmi Voir le message
    Peut-être en changeant cette ligne ?
    Cher "Parmi",

    Faisons court, faisons bref, faisons efficace : je vous aime !

    Problème résolu, merci beaucoup !

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

Discussions similaires

  1. Macro recherche de fichiers dans un dossier et creation d hyperlink
    Par Elouan.pecheur dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/03/2013, 21h56
  2. [ASP.Net] Exécuter macro sur 2 fichiers Excel liéé
    Par neo_xnitro dans le forum ASP.NET
    Réponses: 3
    Dernier message: 29/03/2011, 14h16
  3. [XL-2003] Exécuter une macro sur 2 fichiers excel en même temps..
    Par visto94 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/07/2010, 14h09
  4. Copier un fichier dans un dossier sur le serveur avec PHP
    Par dotnet_kbma dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 31/01/2010, 21h27
  5. Réponses: 0
    Dernier message: 07/10/2009, 11h38

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