Récupérer le nom de classeurs ouverts avec GetOpenFilename dans un tableau
Bonjour à tous et à toutes,
Je cherche à récupérer dans un tableau le nom des classeurs que mon utilisateur va choisir d'ouvrir avec la macro afin de faciliter le codage des actions à effectuer sur chaque classeur par la suite.
Pour cela, j'utilise le code suivant :
ChDrive DASHB
ChDir DASHB
Tables = Application.GetOpenFilename(MultiSelect:=True)
ReDim DataTableName(UBound(Tables), 1)
For i = LBound(Tables, 1) To UBound(Tables, 1)
Workbooks.Open (Tables(i))
' C'est ici que je compte récupérer le nom des classeurs dans mon tableau
DataTableName(i, 1) = ActiveWorkbook.Name
Next
Workbooks(DataSetName).Activate
ActiveWorkbook.Sheets.Add
ActiveSheet.Name = "Testi"
Range(Cells(1, 1), Cells(UBound(Tables), 1)).Value = DataTableName
MsgBox ("Done")
End SubToutefois, lorsque je vais vérifier les résultats dans la feuille "Testi", elle est totalement vide. J'en déduis que mon tableau ne s'incrémente pas dans la boucle For, mais je ne comprends pas pourquoi...
L'un d'entre vous a une idée?
Merci d'avance
Mateo
Bonjour,
je ne suis pas sûr que ce soit exactement ce que tu recherches.
Le problème vient de l'accès au valeur du tableau qui était mal écrit.
Tables = Application.GetOpenFilename(MultiSelect:=True)
ReDim datatablename(UBound(Tables))
For i = LBound(Tables) To UBound(Tables)
Workbooks.Open (Tables(i))
' C'est ici que je compte récupérer le nom des classeurs dans mon tableau
datatablename(i) = ActiveWorkbook.Name
ActiveWorkbook.Close
Next
ThisWorkbook.Activate
ActiveWorkbook.Sheets.Add
ActiveSheet.Name = "Testi"
For i = 1 To UBound(datatablename)
Cells(i, 1).Value = datatablename(i)
Next i
MsgBox ("Done")Cordialement.
Bonjour Vince1512 et merci pour ta réponse,
Par contre, il y a quelques détails que je ne comprends pas dans ta réponse :
For i = LBound(Tables) To UBound(Tables)
Workbooks.Open (Tables(i))
' C'est ici que je compte récupérer le nom des classeurs dans mon tableau
datatablename(i) = ActiveWorkbook.Name
ActiveWorkbook.Close
NextPar exemple, je ne comprends pas pourquoi tu fermes les classeurs une fois ouvert... Justement si je les ouvre, c'est pour les utiliser ensuite
Ensuite, je ne comprends pas pourquoi tu as reformulé avec cette syntaxe :
ThisWorkbook.Activate
ActiveWorkbook.Sheets.Add
ActiveSheet.Name = "Testi"Peux-tu m'expliquer?
Merci à toi
Mateo
pour la fermeture, c'est juste un oublie j'en avais marre que tout les fichiers s'ouvre pendant que je teste
La suite était également pour les tests tu peux faire comme bon te semble.
Ce n'est pas les parties que je voulais mettre en évidence dans ton code.
C'est cette partie qui doit t’intéresser :
For i = 1 To UBound(datatablename)
Cells(i, 1).Value = datatablename(i)
Next iCordialement
Haha d'acc merci !
Au final, j'ai changé de technique et j'ai adopté un autre approche :
'On ouvre chaque fichier indiqué, puis, on sélectionne la feuille "DATA" sur chaque fichier et on vient y coller les nouvelles données à la place des anciennes
For i = LBound(Tables, 1) To UBound(Tables, 1)
Workbooks.Open (Tables(i))
ActiveWorkbook.Sheets("DATA").Select
Range(Cells(1, 1), Cells(UBound(DataSet), 1)).Value = DataSet
ActiveWorkbook.Close
NextEt comme tu peux le voir, j'ai adopté ton code pour fermer le classeur, parce que mon PC n'appréciait pas vraiment pédaler sur 12 classeurs en même temps