Boucle plusieurs fichiers puis plusieurs onglets

Bonjour,

J’aurai une nouvelle fois besoin de l’aide du forum pour m’aider dans ma problématique.

J’aurai besoin de créer une boucle afin de me permettre d’aller chercher les données d’un onglet « RESUME » dans plusieurs fichiers (un ou deux par gestionnaire de paie) réparti dans un même dossier.

Une fois le fichier du gestionnaire ouvert, je prends les données à partir de la ligne 5 pour les copier dans mon fichier de synthèse où je vais compiler les différentes données – avec à chaque fois un onglet par nom de gestionnaire.

Le but étant d’avoir une synthèse des données du mois de paie en cours par gestionnaire – pour ensuite synthétiser tout ça (une macro existe déjà et fonctionne nickel).

Je débute sur les macros et je ne vois pas trop comment faire une boucle pour lui dire d’ouvrir chaque fichier puis copier les données de l’onglet RESUME dans l’onglet au nom du gestionnaire.

J’ai synthétiser toutes les informations dans l’onglet « Param »

Pourriez-vous m’aider à débuter ?

Voici la macro actuelle (que je vais répéter ... lol)

Sub Importer()

Dim Chemin As String

Chemin = Range("C2")

Fichier = Range("C5")

Workbooks.Open Filename:=Chemin & Fichier

Sheets("RESUME").Select

Range("A5:BE100").Copy

Windows("Matrices Prev.xlsm").Activate

Sheets("Sylvie.P").Select

Range("A5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Windows("Matrice Prev Inval RT SAS, ARQUUS - Sylvie P.xlsm").Activate

ActiveWindow.Close

End Sub

et le lien vers le fichier excel

Un grand merci pour votre aide.

Cédric

Bonjour,

Ci-dessous une proposition à tester/adapter.

Principe :

boucle sur tous les fichiers (onglet param)

pour chaque fichier (reprise du fonctionnement existant)

> ouverture du fichier

> copie des données

> colle les données dans l'onglet qu'il faut (lu dans l'onglet param)

> fermeture du fichier

Testé très partiellement, avec reconstitution d'un fichier de test "Matrice Prev Inval RT SAS, ARQUUS - Sylvie P", fait manuellement.

Bonne soirée

Bouben

Public Sub Importer2()

    Dim oShParam As Worksheet
    Dim sFicSource As String
    Dim oWBSource As Workbook
    Dim oShSource As Worksheet
    Dim sOngletPersonne As String
    Dim oShPersonne As Worksheet
    Dim sRep As String
    Dim iDerLig As Integer
    Dim iLig As Integer

    Set oShParam = Worksheets("Param")

    'répertoire principal
    sRep = oShParam.Range("C2").Value

    iDerLig = oShParam.Range("C" & Rows.Count).End(xlUp).Row

    'boucle sur l'onglet paramètre
    For iLig = 5 To iDerLig

        sFicSource = sRep & oShParam.Range("C" & iLig).Value
        'ouvre le fichier source
        Set oWBSource = Workbooks.Open(sFicSource, , True)
        Set oShSource = oWBSource.Worksheets("RESUME")
        'copie les données
        oShSource.Range("A5:BE100").Copy
        'onglet cible
        sOngletPersonne = oShParam.Range("D" & iLig).Value
        Set oShPersonne = ThisWorkbook.Worksheets(sOngletPersonne)
        'colle les données
        oShPersonne.Range("A5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                            :=False, Transpose:=False
        'vide le presse-papier
        Application.CutCopyMode = False

        Set oShPersonne = Nothing
        Set oShSource = Nothing

        'ferme le fichier source
        oWBSource.Close False
        Set oWBSource = Nothing

    Next iLig

    Set oShParam = Nothing

End Sub

Hello Bouben,

Franchement top, cela marche a merveille - exactement mon besoin.

Cependant, juste un souci lorsqu'un fichier d'un gestionnaire est ouvert - la macro plante forcement car le fichier demande a être ouvert en "lecture seule / read only".

Peux-t-on force pour que les fichiers s'ouvrent en read only par défaut si quelqu'un sur le fichier ?

J'aurai également besoin de supprimer les données des différents onglets lorque je fais un refresh pour un nouveau mois de paie - mais je vais essayer de gérer moi-même je pense enfin je vais essayer

Merci d'avance.

Cédric

Bonjour,

Dans l'exemple, les fichiers sont déjà ouverts en lecture seule. Si le fichier est déjà ouvert, cela ne doit pas poser de souci.

A voir si le problème ne vient pas d'ailleurs.

Pour la remise à blanc des onglets, une proposition à tester.

Même principe : boucle sur l'onglet paramètre, et efface les lignes pour chacun des onglets.

Public Sub RAZ()

    Dim oShParam As Worksheet
    Dim oShPersonne As Worksheet
    Dim iDerLig As Integer
    Dim iLig As Integer
    Dim iDerPers As Integer 'dernière ligne de l'onglet personne

    If MsgBox("Voulez-vous effacer les données ?", vbYesNo + vbExclamation) <> vbYes Then
        Exit Sub
    End If

    Set oShParam = Worksheets("Param")

    Application.ScreenUpdating = False

    'boucle sur l'onglet paramètre
    iDerLig = oShParam.Range("C" & Rows.Count).End(xlUp).Row

    For iLig = 5 To iDerLig
        'onglet cible
        sOngletPersonne = oShParam.Range("D" & iLig).Value

        Set oShPersonne = ThisWorkbook.Worksheets(sOngletPersonne)

        'dernière ligne de l'onglet personne
        iDerPers = oShPersonne.Range("C" & Rows.Count).End(xlUp).Row

        If iDerPers >= 5 Then
            'efface
            oShPersonne.Rows("5:" & iDerPers).ClearContents
        End If

        Set oShPersonne = Nothing

    Next iLig

    Application.ScreenUpdating = True

    Set oShParam = Nothing

    MsgBox "RAZ terminé !", vbExclamation

End Sub

Bouben

Hello again,

Nickel maintenant, ca marche bien.

Je vais tester pour voir pourquoi cela a planté maintenant.

un grand merci encore une fois

et bonne journée.

Cédric

Rechercher des sujets similaires à "boucle fichiers puis onglets"