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 compilation excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2016
    Messages : 46
    Points : 15
    Points
    15
    Par défaut Macro compilation excel
    Salut la communauté,

    Bon voilà j'ai un petit problème qui est simple pour quelqu'un qui maîtrise Excel à mon avis.
    Mais qui me bloque depuis 3 jours, je cherche une macro que je ne trouve pas ...

    Je vous explique.

    J'ai sur un serveur un dossier dans lequel se trouve x fichiers.
    Tous ces fichiers ont exactement la même mise en page et ont tous une feuille (Export) qui contient 30-35 lignes.

    Je cherche tout simplement une macro qui me permette de synthétiser tous ces fichiers (sans Les ouvrir) en un seul Excel sur une seule feuille...

    Et cela me bloque depuis maintenant 3 jours... je fais donc appel à la communauté pour voir si une âme charitable serait prête à m'aider un peu.


    Merci à tous

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2016
    Messages : 46
    Points : 15
    Points
    15
    Par défaut Pas si simple que ça en fait ;)
    Ahah étant donnée l'absence de réponse je présume que c'est pas si simple que ça ce que je demande

    Si néanmoins un expert Excel à un peu de temps à me consacrer ça serait vraiment cool

    Merci, À tous et bonne soirée

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Salut.

    Pourquoi sans les ouvrir? La macro pourrait ouvrir chaque fichier, copier les données puis le fermer et passer au suivant.

    Sinon, tu peux créer une requête SQL sur fichier (en fonction de la mise en forme de tes données) pour récupérer uniquement les données, mais techniquement, ça ouvre quand même le fichier Excel.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Bonjour,
    Voici un tuto pour lire et écrire dans un classeur fermé.
    Ensuite y a plus qu'à copier les valeurs comme si les classeurs étaient ouverts

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2016
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Bonjour à tous les deux,

    Oui en fait je me suis mal exprimé je pense Pierre, je cherche une macro qui peux les ouvrir et les fermer cela ne me gènes pas du moment que les données sont reprises dans mon classeurs cible et que je ne me retrouve pas à la fin avec mes x classeurs d'ouverts (donc ce que tu dis est en fait ce que je cherche je pense, le but est elle reprendre les donnes des différents classeurs et Les remettes dans un seul et même).

    J'ai regardé ton lien riaolle mais je cherche plus simple à mon avis, ce que je cherche à faire en fait est de trouver une macro qui me permet de faire la manip expliqué dans mon premier message mais si elle ouvre et referme mes classeurs ça ne gêne pas.

    Le problème c'est que malgré les tests et recherches divers je n'ai rien trouvé qui fonctionne jusqu'à maintenant...

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Les classeurs à fusionner ont-ils la même structure? Même nombre de colonnes et un moyen de déterminer le nombre de lignes?

    Tu pourrais en tout cas utilement t'inspirer de ces codes que j'ai donné aujourd'hui dans une autre discussion. Il faut les adapter, notamment pour déterminer la plage à copier, et également en insérant le code depuis l'ouverture jusqu'à la fermeture du classeur dans une boucle dont il faudra déterminer le début et la fin...

    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
    Function RangeCopy(WorksheetName As String, RangeAddress As String, Optional wk As Workbook) As Range
      Dim sh As Worksheet
      Dim rng As Range
     
      If wk Is Nothing Then Set wk = ActiveWorkbook
      Set sh = wk.Worksheets(WorksheetName)
      Set RangeCopy = sh.Range(RangeAddress)
    End Function
     
    Sub TestCopy()
      Dim SourceWk As Workbook
      Dim WkName As String
      Dim ShName As String
      Dim RngName As String
     
      WkName = "c:\tests\source.xlsx"
      ShName = "Données"
      RngName = "A1:D10"
     
      Set SourceWk = Workbooks.Open(WkName)
      ThisWorkbook.Activate
      RangeCopy(ShName, RngName, SourceWk).Copy Range("a1")
      SourceWk.Close savechanges:=False
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    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
    Par défaut
    Salut, à tenter si tu es curieux : fusion fichiers xls*, txt d'un dossier
    Images attachées Images attachées  

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2016
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Oui pierre ils ont exactement le même nombre de colonne et le même nombre de ligne mais certaines lignes sont vides dans certains classeurs, je ne sais pas si cela est gênant ou non?

    En fait je pense que la macro est pas si compliqué si on est un peu (voir beaucoup ahaha) meilleur que moi.
    Mais pour répondre Les colonnes ont toutes la même taille de À à G
    Et Les lignes vont de 2 à 55 avec certaines lignes vides sur certaines feuilles

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Le code que je te propose fait cela sans souci. Ca ira pour l'inclure dans la boucle ou tu souhaites un coup de mains?

    Les fichiers sont repris dans une liste? Ce sont tous les fichiers d'un même dossier? Bref, qu'est-ce qui permet de les lister pour la boucle?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2016
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Honnêtement je veux bien un peu d'aide sur ton histoire de boucle.
    Les fichiers sont tous dans le meme dossiers mais on pas tous le même nom.
    Il n'y a pas de liste mais si c'est nécessaire et plus simple je peux en faire une avec Les noms des fichiers

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Voilà un code dont tu devras adapter certaines données...

    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
    Function getSourceRange(WorksheetName As String, RangeAddress As String, Optional wk As Workbook) As Range
      Dim sh As Worksheet
      Dim rng As Range
     
      If wk Is Nothing Then Set wk = ActiveWorkbook
      Set sh = wk.Worksheets(WorksheetName)
      Set getSourceRange = sh.Range(RangeAddress)
    End Function
     
    Sub CopyWorkbooks()
      Dim Path As String
      Dim ShName As String
      Dim SourceRangeAddress As String
      Dim SourceRange As Range
      Dim SourceWk As Workbook
      Dim TargetRange As Range
      Dim WkName As String
     
      ShName = "Datas"
      SourceRangeAddress = "a1:d55"
      Path = "e:\tests"
      Set TargetRange = Range("a2")
      WkName = Dir(Path & "\*.xlsx")
      Do While WkName <> ""
        Set SourceWk = Workbooks.Open(Path & "\" & WkName)
        ThisWorkbook.Activate
        Set SourceRange = getSourceRange(ShName, SourceRangeAddress, SourceWk)
        SourceRange.Copy TargetRange
        Set TargetRange = TargetRange.Offset(SourceRange.Rows.Count)
        SourceWk.Close savechanges:=False
        WkName = Dir()
      Loop
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2016
    Messages : 46
    Points : 15
    Points
    15
    Par défaut Merci ;)
    Merci pierre,
    J'essaie ça et je te dis si ça fonctionne.
    Merci en tout cas du temps que tu prends pour me répondre.

    Juste dans ShName = "Datas", le « datas » je dois le remplacer mais je vois pas trop par quoi ?

    Pareil là en tentant de comprendre
    Les "" il faut aussi Les remplacer ?
    Dans
    Merci encore

  13. #13
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Il faut remplacer Datas par le nom de la feuille qui contient la plage source. Quant au "" de la ligne DoWhile... il faut les laisser en l'état.

    Je commenterai le code demain matin pour que tu puisses comprendre plus aisément ce qu'il fait

    Ceci dit, je viens de vérifier et cela fonctionne bien chez moi. Néanmoins, tu peux te passer de la fonction qui détermine la plage. Je l'avais utilisée dans un autre exemple mais elle n'amène rien de mieux ici. Tu peux définir la plage directement dans la fonction de consolidation
    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
    Sub CopyWorkbooks()
      Dim Path As String
      Dim ShName As String
      Dim SourceRangeAddress As String
      Dim SourceRange As Range
      Dim SourceWk As Workbook
      Dim TargetRange As Range
      Dim WkName As String
     
      ShName = "Datas"
      SourceRangeAddress = "a1:d55"
      Path = "e:\tests"
      Set TargetRange = Range("a2")
      WkName = Dir(Path & "\*.xlsx")
      Do While WkName <> ""
        Set SourceWk = Workbooks.Open(Path & "\" & WkName)
        ThisWorkbook.Activate
        Set SourceRange = SourceWk.Worksheets(ShName).Range(SourceRangeAddress)
        SourceRange.Copy TargetRange
        Set TargetRange = TargetRange.Offset(SourceRange.Rows.Count)
        SourceWk.Close savechanges:=False
        WkName = Dir()
      Loop
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2016
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Dac, je te remercie vraiment.
    C'est cool de ta part.
    Bon je te laisse tranquille ce soir quand même
    Merci Pierre !

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2016
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Salut à Tous,

    je viens d'essayer ta macro Pierre, et elle ne fonctionne pas.

    A mon avis c'est juste parce que j'ai mal remplit quelque chose (un champ à remplacer dans la macro que je n'ai pas fait je pense).


    J'ai modifié comme suit le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ShName = "le nom de ma feuille"
      SourceRangeAddress = "a1:d55"
      Path = "le lien de mon dossier qui héberge toutes mes feuilles de données"
      Set TargetRange = Range("a2")
      WkName = Dir(Path & "\*.xlsx")
      Do While WkName <> ""
    Peux-tu si cela ne te gènes pas trop, mettre des petits commentaires à coté de ton code afin que je puisse faire fonctionner cette macro, ou me dire ou j'ai fait mon erreur

    A +

  16. #16
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Je vais faire cela.

    Mais... Que se passe-t-il qui te fait dire qu'elle ne fonctionne pas? Message d'erreur? Résultat erroné? Rien ne se passe?

    Dire "ça ne fonctionne pas" sas autre commentaire ne nous aide pas beaucoup...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  17. #17
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    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
    Sub CopyWorkbooks()
      Dim Path As String ' Nom complet, racine comprise, du chemin des fichiers à scanner
      Dim ShName As String ' Nom de la feuille source dont il faut copier les données. Doit être Identique dans tous les classeurs source
      Dim SourceRangeAddress As String ' Adresse de la plage à copier. Doit être identique sur toutes les feuilles source
      Dim SourceRange As Range ' sera utilisé pour définir la plage source à copier
      Dim SourceWk As Workbook ' Objet qui pointera vers chaque classeur source dans la boucle
      Dim TargetRange As Range ' Adresse de la première cellule de la plage d'arrivée. Sera recalculée à chaque boucle
      Dim WkName As String ' Nom du classeur source à ouvrir. Sera redéfini à chaque boucle
     
      ShName = "Datas" ' Nom de la feuille source qui contient les données. IDENTIQUE pour tous les classeurs source
      SourceRangeAddress = "a1:d55" ' Plage à copier dans le classeur source. IDENTIQUE à chaque classeur source
      Path = "e:\tests" ' Nom complet du dossier, sans \
      Set TargetRange = Range("a2") ' Première plage de collage. Sera "offsetée" en fonction des données copiées à chaque boucle
      WkName = Dir(Path & "\*.xlsx") ' Nom du premier classeur trouvé dans le dossier source
      Do While WkName <> "" ' Boucle tant qu'il y a un fichier non traité dans le dossier. DIR "épuise" les fichiers correspondant au pattern
        Set SourceWk = Workbooks.Open(Path & "\" & WkName) 'Ouverture du fichier source et attribution du fichier à SourceWk
        ThisWorkbook.Activate ' Activation du classeur de traitement (celui qui contient la macro) et, a priori, les plages d'arrivée
        Set SourceRange = SourceWk.Worksheets(ShName).Range(SourceRangeAddress) ' Instanciation de la plage source
        SourceRange.Copy TargetRange ' Copie de la plage source sur la plage d'arrivée, définie plus haut pas son coin supérieur gauche
        Set TargetRange = TargetRange.Offset(SourceRange.Rows.Count) ' Recalcul du nouveau coin supérieur gauche pour la prochaine copie (décalage du nombre de lignes copiées)
        SourceWk.Close savechanges:=False ' Fermeture du classeur d'origine sans sauvegarde
        WkName = Dir() ' Recherhce du nom du classeur suivant. Si DIR est passé sur tous les classeurs, renvoie "" pour sortir de la boucle
      Loop ' Boucle
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  18. #18
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2016
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Oups, oui ce n'est pas très explicite je te l'accorde

    En fait je n'ai pas de message d'erreur mais rien ne se passe du tout.

    C'est la traduction du 'ne fonctionne pas '

    Quand tu mets WkName = Dir(Path & "\*.xlsx"), il faut que je remplace le "\*.xlsx" par le nom exact du premier classeur en être "" ?

  19. #19
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Non, tu dois le remplacer par le modèle du nom de fichier que tu veux récupérer.

    • *.xlsx récupérera tous les fichiers xlsx;
    • semaine??.xlsx récupérera les fichiers qui commencent pas le mot semaine suivi de deux caractères puis de l'extension xlsx;
    • Ventes*.xlsx récupérera tous les fichiers de type xlsx qui commencent par ventes;
    • ??12*.xlsx récupérera les fichiers pour lesquels on a deux caractères puis 12 puis un nombre indéterminé de caractères puis l'extension xlsx;
    • ...



    En fait, * remplace un nombre indéterminé de caractères, et ? remplace n'importe quel caractère à l'endroit où tu le places dans le nom générique (le "pattern" ou patron du nom de fichiers). Ces caractères te permettent de définir une liste de fichiers sans devoir les citer tous nommément en définissant le masque (le pattern, en anglais) auquel doivent correspondre les noms de fichier. On retrouve ces caractères dans les filtres, la fonction RECHERCHEV, les fonctions SOMME.SI.ENS et apparentées, la fonction EQUIV...

    C'est un ancien truc qui nous vient du DOS...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  20. #20
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2016
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    OK,

    Donc dans mon cas, ça sera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WkName = Dir(Path & "S*.xlsx")
    Ce qui voudra dire tous les fichiers qui commence par un S, nous sommes bien d'accord ?

    Merci encore pour le temps que tu passes à m'aider

Discussions similaires

  1. Graphe et Macro et Excel et VBA
    Par life is magic dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 18/11/2005, 17h24
  2. Activation des macros sous Excel
    Par Igloobel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/10/2005, 11h44
  3. macro sous excel
    Par julien13200 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/02/2005, 15h49
  4. Macro dans excel permettant de voir si un fichier est ouvert
    Par VirginieGE dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/08/2004, 07h51
  5. [VBA-E] macro conversion excel vers csv
    Par baboune dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/07/2004, 09h23

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