Macro Base de donnée(tableau) + boucle

Bonjour à tous,

Je début en VBA, depuis hier pour tout vous dire.

Je souhaite récupérer des données qui sont positionné de manière identique dans une série de fichier excel et les rassembler dans un tableau .

J'ai réussi à le faire avec une méthode assez barbare... Vous l'aurez compris, je répète l'action en modifiant le nom des classeurSource et classeurDestination en rajoutant un chiffre. Je modifie également le nom du fichier (le chemin est le même). Quelques sois les fichiers source, les données sont aux même endroit . Et A chaque nouveau fichier, je modifie le numéro de ligne pour les cellules de destinations. (j'ai surligner les modifications)

Sub miseajour()
'FICHIER numéro 1
    Dim classeurSource1 As Workbook, classeurDestination1 As Workbook

    'ouvrir le classeur source (en lecture seule)
    Set classeurSource1 = Workbooks.Open("CHEMIN\Pilotage_AZE_2015.xlsx", , True)
    'définir le classeur destination
    Set classeurDestination1 = ThisWorkbook

    'Début de l'instruction avec With
    With classeurDestination1

    'Selection Taux de prod et TJM => CIBLE

        .Sheets("Personnel_T1").Range("B7") = classeurSource1.Sheets("Dashboard").Range("E7")
        .Sheets("Personnel_T1").Range("C7") = classeurSource1.Sheets("Dashboard").Range("E8")

    'Fin de l'instruction avec With
    End With

    classeurSource1.Close False

    'FICHIER numéro 2
    Dim classeurSource2 As Workbook, classeurDestination2 As Workbook

    'ouvrir le classeur source (en lecture seule)
    Set classeurSource2 = Workbooks.Open("Chemin\Pilotage_TRE_2015.xlsx", , True)
    'définir le classeur destination
    Set classeurDestination2 = ThisWorkbook

    'Début de l'instruction avec With
    With classeurDestination2

    'Selection Taux de prod et TJM => CIBLE

        .Sheets("Personnel_T1").Range("B8") = classeurSource2.Sheets("Dashboard").Range("E7")
        .Sheets("Personnel_T1").Range("C8") = classeurSource2.Sheets("Dashboard").Range("E8")

       'Fin de l'instruction avec With
    End With

    classeurSource2.Close False
End Sub

Ça marche, mais ce n'est pas terrible. La tache est vite fastidieuse et non dynamique. j'ai vu un exercice qui pourrait répondre, mais je vous avoue que je ne vois pas du tout comment l'adapter/utiliser pour répondre à mon besoin.

https://www.excel-pratique.com/fr/vba/tableaux_vba_exercice.php

Suite à cet exemple, j'ai créer une base de donnée :

ID Fichier Ligne

1 Pilotage_AZE_2015.xlsx 7

2 Pilotage_TRE_2015.xlsx 8

Maintenant, il faudrait utiliser cette base pour l'utiliser dans le cadre de boucle (Facile à dire, mais je ne sais pas le faire...). c'est à dire que l'on utilise la 1er ligne avec l'ID( que l'on retrouve sur classeurSource et classeurDestination) puis le fichier qui est associé que l'on indique dans le chemin et ensuite le numéro de ligne.

Ainsi je n'aurais plus que la base de donnée à modifier

Ce n'est peut être pas très claire tout cela, c'est compliqué à expliquer...

En tout cas, je remercie d'avance toute personne qui pourra m'aider

Cordialement,

Chattam

Bonjour,

à tester, la macro s'attend à trouver dans le classeur de destination, un onglet nommé fichiers_sources où l'on retrouve en colonne A à partir de la ligne 1 la liste des fichiers sources.

Sub miseajour()
'définir le classeur destination
    Set classeurDestination1 = ThisWorkbook
    'definir la feuille qui contient le nom des fichiers
    Set wsf = classeurDestination1.Sheets("fichiers_sources")
    i = 1 'numéro de ligne du premier fichier à  ouvrir
    ctr = 6 ' ctr de position pour recevoir les données en fonction du fichier source
    While wsf.Cells(i, 1) <> ""
        nomfichier = wsf.Cells(i, 1)
        'ouvrir le classeur source (en lecture seule)
        Set classeurSource1 = Workbooks.Open(nomfichier, , True)
        'Début de l'instruction avec With
        With classeurDestination1

            'Selection Taux de prod et TJM => CIBLE
            ctr = ctr + 1
            .Sheets("Personnel_T1").Range("B" & ctr) = classeurSource1.Sheets("Dashboard").Range("E7")
            .Sheets("Personnel_T1").Range("C" & ctr) = classeurSource1.Sheets("Dashboard").Range("E8")
            'Fin de l'instruction avec With
        End With
        classeurSource1.Close False
        i = i + 1
    Wend
End Sub

Bonjour,

J'ai fait quelques tests et cela fonctionne bien apparemment.

Par contre en terme de vitesse d’exécution, j'ai l'impression que c'est beaucoup plus long qu'avant.

En tout cas, merci beaucoup

Rechercher des sujets similaires à "macro base donnee tableau boucle"