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