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 Sub

Toutefois, 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
Next

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

Cordialement

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
Next

Et 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

Rechercher des sujets similaires à "recuperer nom classeurs ouverts getopenfilename tableau"