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

Excel Discussion :

Copier/coller dans un fichier unique des données de plusieurs centaines de fichiers [XL-2013]


Sujet :

Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Cadre dans l'industrie pharmaceutique
    Inscrit en
    Septembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Cadre dans l'industrie pharmaceutique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 6
    Points : 8
    Points
    8
    Par défaut Copier/coller dans un fichier unique des données de plusieurs centaines de fichiers
    J'ai un fichier Excel qui compile toutes les demandes de formation des salariés pour une année. Appelons-le "Formation_2018.xlsm".
    Dans ce fichier, sont copiées/collées des données d'autres fichiers Excel correspondant aux demandes de formation individuelles, par salarié. Ces fichiers Excel individuels ont une trame identiques et les cellules de ces fichiers collées dans "Formation_2018.xlsm" sont les mêmes pour tous les fichiers individuels.
    Dans "Formation_2018.xlsm", il y a autant de lignes que de formations demandées pour un même salarié (3 maximum). Les lignes se succèdent ainsi, par ex.: 3 lignes de formation pour le salarié A, puis 1 ligne de formation pour le salarié B, puis 2 lignes de formation pour le salarié C, etc (plusieurs centaines de salariés).
    Pour copier les cellules du fichier Salarié X dans "Formation_2018.xlsm", il y a plusieurs "va-et-vient" entre les fichiers car les cellules à copier ne sont pas contiguës.
    Pour le moment, j'ai rédigé une macro dans "Formation_2018.xlsm"qui fonctionne mais elle insère les demandes de formation d'un seul salarié à la fois. La voici:
    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 InsérerFormation()
        Dim Cel as Range
        Dim FinFichier As String
        Dim SiteParaphe As String
        FinFichier = "_Fiche besoin de formation  2018.xlsx"
        SiteParaphe = InputBox("Saisir 'Site_Paraphe' du salarié", "Site et paraphe du salarié")
            Workbooks.Open ("Z:\Documents\Excel\Formation\" & SiteParaphe & FinFichier)
            Application.CutCopyMode = False
            Range("A16", [A16].End(xlDown)).Resize(, 8).Copy
            Windows("Formations_2018.xlsm").Activate
                If Range("G3") = "" Then
                    Range("G3").Select
                Else
                    Range("G2").End(xlDown).Offset(1, 0).Select
                End If
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
            For Each Cel In Range("A3:A" & ActiveSheet.UsedRange.Rows.Count)
                If Cel.Value = "" And Cel.Offset(0, 9) <> "" Then
                    Windows(SiteParaphe & FinFichier).Activate
                    Range("B8:B10").Copy
                    Windows("Formation_2018.xlsm").Activate
                    Cel.Select
                    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=True
                    Windows(SiteParaphe & FinFichier).Activate
                    Range("D8:D10").Copy
                    Windows("Formations_2018.xlsm").Activate
                    Cel.Offset(0, 3).Select
                    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=True
                End If
            Next Cel
            Windows(SiteParaphe & FinFichier).Close savechanges:=False
    End Sub
    Mon souhait est le suivant:
    Si tous les fichiers Excel individuels (par salarié) sont rangés dans un même dossier, j'aimerais que la macro copie/colle les demandes de formation de tous les salariés, les unes après les autres, en une seule fois.

    Merci beaucoup pour votre aide.

  2. #2
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Faire une boucle en utilisant la fonction Dir().
    https://msdn.microsoft.com/fr-fr/VBA...s/dir-function

    Pour des exemples d'utilisation de cette fonction, tu peux fouiller dans les FAQ, Tutoriels et Sources Excel de Developpez.net, entre autres :
    https://excel.developpez.com/faq/?page=FichiersDir
    https://excel.developpez.com/sources/?page=Fichiers
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Candidat au Club Avatar de aurelien.kay
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Inclure un tableau (liste de tous les fichiers à ouvrir) et faire une boucle
    Bonjour
    Sur le Fichier de "Formation_2018.xlsm"
    Moi, je ferai fait un tableau de récapitulatif en colonne A ce que tu dois entrer dans l'inputbox (Début de nom de fichier). On nommera le tableau, Par exemple "TabNOM" dans une feuille nommé "PARAM" qui a autant de ligne que tu as de fichiers (par exemple 400).

    Ensuite faire une boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub macro()
    for = x to sheets("PARAM").Range("TabNOM").Rows.Count   'Normalement = 400
     
    SiteParaphe = sheets("PARAM").Range("TabNOM").Cells(x,1)
     
    *** mettre ici le code InsérerFormation ***
     
    Next x
    end sub
    j'espère que ça t'aidera !
    tiens moi au courant et si tu veux plus de détails, joints une pièce jointe

    ps : pour lister le contenu du dossier si tu as beaucoup de fichier je te joints un fichier avec un petit code qui répertorie et mets un hypertexte en même temps

    Cordialement,
    Fichiers attachés Fichiers attachés

  4. #4
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut CC/Coller +eurs fichiers XL
    Voir les commetaires dans le code ci-dessous:
    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
    46
    47
    48
    49
    50
    51
    52
    53
    Sub InsérerFormation()
        Dim Cel As Range
        Dim FinFichier As String
        Dim SiteParaphe As String
        Dim fichierChoisi, SelectedBook as String
        'fichier de consolidation: "Formation_2018.xlsm"
     
        FinFichier = "_Fiche besoin de formation 2018.xlsx"
        'Créer une liste de 'Site_Paraphe' dans une zone quelconque dans "Formation_2018.xlsm"
        'InputBox serait donc inutile, voir le pourquoi plus loin.
        'SiteParaphe = InputBox("Saisir 'Site_Paraphe' du salarié", "Site et paraphe du salarié")
        'Il suffira de lire la liste (via un do while ... loop).
        'Supposons que ta liste est créée dans la feuille "Sheet1", en zone "A2:A150",
        'Dans ce cas, on construit la 1ère occurence pour le 1er fichier ainsi:
     
        fichierChoisi = "Z:\Documents\Excel\Formation\" & Sheets("Sheet1").Range("A2") & FinFichier
        'SelectedBook = "Z:\Documents\Excel\Formation\" & SiteParaphe & FinFichier
        Workbooks.Open (fichierChoisi )
    '    Workbooks.Open ("Z:\Documents\Excel\Formation\" & SiteParaphe & FinFichier)
     
        'garder la séquence du traitement, puis aller à la cellule suivante: Sheets("Sheet1").Range("A3")
        'et recommencer. Ne pas oublier de sortir du loop à la fin de la liste.
        'Il faudra également jongler entre les feuilles au cas où Sheet1 n'est pas l'ActiveSheet
     
        Application.CutCopyMode = False
        Range("A16", [A16].End(xlDown)).Resize(, 8).Copy
        Windows("Formations_2018.xlsm").Activate
        If Range("G3") = "" Then
            Range("G3").Select
        Else
            Range("G2").End(xlDown).Offset(1, 0).Select
        End If
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
     
        For Each Cel In Range("A3:A" & ActiveSheet.UsedRange.Rows.Count)
            If Cel.Value = "" And Cel.Offset(0, 9) <> "" Then
                Windows(SiteParaphe & FinFichier).Activate
                Range("B8:B10").Copy
                Windows("Formation_2018.xlsm").Activate
                Cel.Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=True
                Windows(SiteParaphe & FinFichier).Activate
                Range("D810").Copy
                Windows("Formations_2018.xlsm").Activate
                Cel.Offset(0, 3).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=True
            End If
        Next Cel
        Windows(SiteParaphe & FinFichier).Close savechanges:=False
     End Sub

  5. #5
    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

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Cadre dans l'industrie pharmaceutique
    Inscrit en
    Septembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Cadre dans l'industrie pharmaceutique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup pour vos différentes propositions.
    Je vais les étudier dès que possible et reviendrai vers vous pour vous dire si mon problème est résolu.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/05/2017, 06h31
  2. Réponses: 1
    Dernier message: 06/02/2009, 17h58
  3. Réponses: 3
    Dernier message: 10/06/2007, 14h59
  4. Réponses: 3
    Dernier message: 09/09/2006, 13h24
  5. Réponses: 2
    Dernier message: 21/02/2006, 10h36

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