Copier coller à partir de plusieurs fichier

Bonjour,

j'ai 180 fichier appelé "diagramme __ du collecteur.xlsx" (le "__" c'est le chiffre du fichier)

Dans chacun de ces fichier seul la la colonne I m'intéresse

Objectif: créer une macro

ce que je veux que la macro fasse:

dans un nouveau fichier Excel il faut que :

1) choisir où se trouve les 180 fichiers

2) le titre de la colonne A (du nouveau fichier) soit le nom du 1er fichier (le titre de la colonne B soit le nom du 2ème fichier, etc...)

3) copier la colonne I du 1er fichier dans la colonne A dans notre nouveau fichier (copier la colonne I du 2ème fichier dans la colonne B du nouveau fichier, etc...)

Merci d'avance pour votre aide

Bonsoir,

Ci-joint une proposition.

Après sélection du répertoire :

> ouverture de tous les fichiers avec un nom "diagramme __ du collecteur.xlsx"

> copie de la colonne I (toute la colonne de la 1ère ligne à la dernière ligne de la colonne)

(non précisé : onglet à prendre en compte => premier onglet du fichier)

(non précisé : première ligne à prendre en compte => première ligne de la colonne I)

> colle dans l'onglet résultat, dans une nouvelle colonne pour chaque fichier

> titre de la colonne (onglet résultat) : nom du fichier

A tester

Bouben

Bonjour Bouben

je te remercie pour ton code, j'essaie de le comprendre mais j'ai beaucoup de mal

peut tu m'expliquer d'avantage le code que tu as fait stp,

Option Explicit

Public Sub Importer()

    Dim oFSO As FileSystemObject
    Dim oShR As Worksheet
    Dim sRep As String
    Dim oRep As Folder
    Dim oFic As File
    Dim oWBx As Workbook
    Dim oShx As Worksheet
    Dim iDerLig As Long
    Dim iColEcr As Integer 'colonne d'écriture
    Dim iAvanc As Integer 'avancement
  

ici tu met les variable jusqu'ici ok

cette partie là je ne vois pas sa fonction, sRep signifie que tu fais appel a la fonction ChoixDossier mais après...

    sRep = ChoixDossier()

    If sRep = "" Then
        Exit Sub
    End If

    Set oFSO = New FileSystemObject
    Set oRep = oFSO.GetFolder(sRep)
    Set oShR = Worksheets("Resultat")
    
    
    'efface le résultat
    oShR.Cells.ClearContents

    'parcours des fichiers
    iColEcr = 1
    iAvanc = 1

    Application.ScreenUpdating = False

ici tu nettoie le classeur avec clearcontents

dis moi si j'ai juste; "iColEcr' te permet de balayer l'ensemble des cellules de la colonne I

"IAvanc" te permet d'avancer dans le numéros de mon document

peut tu expliquer chaque terme de la boucle "For" stp

    For Each oFic In oRep.Files

de même cette fonction je ne comprend pas

        modProgress.ShowProgress iAvanc, oRep.Files.Count

est-ce ici que tu fait invoquer la fenêtre ou tu cherche le dossier ou ya tous les document appelé diagramme __ du collecteur?

"*" représente le chiffre

        If oFic.Name Like "diagramme * du collecteur.xlsx" Then
            'ouverture du fichier
            Set oWBx = Workbooks.Open(oFic.Path, , True)
            Set oShx = oWBx.Worksheets(1)  'premier onglet du fichier

la fonction iDerLig m'est aussi difficil, je connais la fonction range mais c'est la parite "End(xlUp).Row" que je ne comprend pas

            iDerLig = oShx.Range("I" & Rows.Count).End(xlUp).Row
            
            'nom du fichier
            oShR.Cells(1, iColEcr).Value = oWBx.Name

            'copie
            oShx.Range("I1:I" & iDerLig).Copy
            'colle
            oShR.Cells(2, iColEcr).PasteSpecial xlPasteAll

            'vide presse-papier
            Application.CutCopyMode = False

            Set oShx = Nothing
            'fermeture du fichier
            oWBx.Close
            Set oWBx = Nothing

            iColEcr = iColEcr + 1
        End If

        iAvanc = iAvanc + 1
    Next oFic

la fonction "Application.ScreeUpdating" signifie quoi?

    Application.ScreenUpdating = True

    Set oShR = Nothing
    Set oRep = Nothing
    Set oFSO = Nothing

End Sub

cette partie fait sortir le chemin du dossier, mais pourrais tu l'expliquer un stp

Private Function ChoixDossier() As String

    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = ActiveWorkbook.Path & "\"
        .Show
        If .SelectedItems.Count > 0 Then
           ChoixDossier = .SelectedItems(1)
        Else
           ChoixDossier = ""
        End If
    End With

End Function

merci encore pour toute ton aide

Bonjour,

Ci-joint le fichier avec toutes les lignes commentées (module "modMain"), ça devrait t'aider.

Le module "modProgress" et le Userform "ufProgress" servent uniquement pour la barre de progression, ne t'en préoccupe pas !

Utilisé par la ligne suivante :

modProgress.ShowProgress iAvanc, oRep.Files.Count

Bouben

merci bouben

malheureusement cela ne marche pas, il efface bien la feuille mais ne copie rien, la barre de progression s'arrète à 95% quand j'essaie avec 18 fichiers.

as tu une idée du blocage?

Bonsoir,

1 : vérifier le nom des fichiers :

nom attendu précisément : "diagramme xxx du collecteur.xlsx"

exemple : "diagramme 2 du collecteur.xlsx"

2 : pour chaque fichier, on copie les données du premier onglet

comme indiqué plus haut : préciser le nom de l'onglet à traiter

Et on copie la colonne I

En prenant en compte ces 2 points, cela doit fonctionner !

Bouben

j'ai trouvé le truc pour pouvoir rentrer dans la boucle if:

 If Left(oFic.Name, 9) = "diagramme" And Right(oFic.Name, 18) = "du collecteur.xlsx" Then

ceci est la solution pour rentrer dans la boucle

du coup le programme marche mais pas comme il faut

1) il ne colle pas dans l'ordre des fichiers, (j'ai un pas de 2°)

si je prend 30 fichiers voici ce que cela donne:

en colonne A il met "diagramme 02° du collecteur"

en colonne B il met "diagramme 04° du collecteur"

en colonne C il met "diagramme 06° du collecteur"

en colonne D il met "diagramme 08° du collecteur"

en colonne E il met "diagramme 0° du collecteur"

en colonne F il met "diagramme 10° du collecteur"

en colonne G il met "diagramme 12° du collecteur"

autrement dit il trie pas correctement, j'ai rajouter le "0" devant sinon il classait encore pire mes fichiers mais cela ne consernerait qu'un seul fichier si je m'arrêtait à 99 fichiers or ici je vais jusqu'à 180 donc il me les classes par de chiffre, il commence avec les fichiers avec un 0 puis avec les fichier avec des 1 (0,02,04,06,08,100,102,104,106,108,10,110,112,114,...1

2) quand je fais fonctionner la macro pour chaque fichier il me met 1 boite de dialogues:

voir l'image

erreur 2

alors que j'ai mis en plus cette ligne de code

Application.DisplayAlerts = False

comment supprimer cette boite de dialogue, cette fenêtre met juste à jour le graphique de chaque fichier

Pour le tri

en fait j'ai compris le pb mais j'ai pas trouvé la solution,

le pb vient du contenu chaque titre de cellule (normalement à trier) est sous format texte. en effet le titre des colonnes à trier est "diagramme 10° du collecteur" le chiffre qui normalement sert de référencement n'est pas compris comme un chiffre mais comme un caractère.

des idées?

le pb de la boite de dialogue persiste

Rechercher des sujets similaires à "copier coller partir fichier"