Ouvrir plusieurs classuers avec GetOpenFilename Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
M
Mateo MNH
Jeune membre
Jeune membre
Messages : 46
Inscrit le : 4 avril 2017
Version d'Excel : 2013

Message par Mateo MNH » 25 juillet 2019, 15:39

Bonjour à tous et à toutes,

Après un moment loin d'Excel, je me relance dans une macro VBA, mais j'ai un peu de mal à redémarrer.
Je chercha à automatiser la mise à jour de plusieurs classeurs, et pour celà, j'ai besoin que la macro puisse les ouvrir tous en même temps.

Pour celà, j'utilise la fonction GetOpenFilename de la façon suivante :
Sub New_Data()

Dim Tableau() As String
Const DATA As String = "C:\Users\rojmat\..."
Const DASHB As String = "C:\Users\rojmat\..."

'ChDrive DATA
'ChDir DATA
'Application.Workbooks.Open Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx")


ChDrive DASHB
ChDir DASHB
Application.Workbooks.Open Application.GetOpenFilename(, , , , True)


End Sub
Si le passage commenté sur cet exemple fonctionne très bien, le passage du dessous ne fonctionne pas du tout et me génère le message d'erreur suivant : Run-time error '13', Type mismatch. Et ce, que je choisisse d'ouvrir un fichier de la liste ou tous...

Pouvez-vous m'expliquer pourquoi j'ai ce message d'erreur, et comment je pourrais faire pour arriver à mes fins?

Merci d'avance

Mateo
Avatar du membre
Ausecour
Passionné d'Excel
Passionné d'Excel
Messages : 3'120
Appréciations reçues : 346
Inscrit le : 31 mai 2018
Version d'Excel : 2010 FR, 2013 FR

Message par Ausecour » 25 juillet 2019, 16:51

Bonjour,

C'est tout à fait normal, comme tu as mis oui pour MultiSelect, la fonction renvoie un tableau Variant peu importe le nombre de fichiers que tu sélectionnes, il faut donc procéder comme ceci:
Sub New_Data()

Dim Tableau() As String
dim tabNoms
Const DATA As String = "C:\Users\rojmat\..."
Const DASHB As String = "C:\Users\rojmat\..."

'ChDrive DATA
'ChDir DATA
'Application.Workbooks.Open Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx")


ChDrive DASHB
ChDir DASHB

tabNoms = Application.GetOpenFilename(, , , , True)

for i = lbound(tabnoms,1) to ubound(tabnoms,1)
    Application.Workbooks.Open tabnoms(i)
next i
End Sub
Plus un sujet a un titre précis, des explications claires, et un fichier Excel bien préparé, plus il a de chances d'avoir une réponse qui répond au besoin, mettez toutes les chances de votre côté :bien:
"100% des gagnants auront tenté leur chance" :trfl:
M
Mateo MNH
Jeune membre
Jeune membre
Messages : 46
Inscrit le : 4 avril 2017
Version d'Excel : 2013

Message par Mateo MNH » 25 juillet 2019, 16:56

Bonjour Ausecour,

Merci pour ta réponse !

En effet, ta solution fonctionne car je n'ai plus le message d'erreur. Toutefois, les fichiers ne s'ouvrent pas...

Sais-tu pourquoi?

J'ai essayé ces deux codes, sans succès :
Test = Application.GetOpenFilename(, , , , True)

For i = LBound(Test, 1) To UBound(Test, 1)
    Application.Workbooks.Open Test(i)
Next
Test = Application.GetOpenFilename(, , , , True)

For i = LBound(Test, 1) To UBound(Test, 1)
    Application.Workbooks(Test(i)).Open 
Next
Avatar du membre
Ausecour
Passionné d'Excel
Passionné d'Excel
Messages : 3'120
Appréciations reçues : 346
Inscrit le : 31 mai 2018
Version d'Excel : 2010 FR, 2013 FR

Message par Ausecour » 26 juillet 2019, 08:27

Bonjour,

Je dois avouer ne pas trop comprendre pourquoi tes codes ne fonctionnent pas, j'ai essayé avec celui là:
Sub test()
Dim tabNoms
tabNoms = Application.GetOpenFilename(MultiSelect:=True)

For i = LBound(tabNoms, 1) To UBound(tabNoms, 1)
    Workbooks.Open (tabNoms(i))
Next i
End Sub
et ça marche de mon côté, essaye le à ton tour :)
Plus un sujet a un titre précis, des explications claires, et un fichier Excel bien préparé, plus il a de chances d'avoir une réponse qui répond au besoin, mettez toutes les chances de votre côté :bien:
"100% des gagnants auront tenté leur chance" :trfl:
M
Mateo MNH
Jeune membre
Jeune membre
Messages : 46
Inscrit le : 4 avril 2017
Version d'Excel : 2013

Message par Mateo MNH » 26 juillet 2019, 10:57

Top !

C'est bon c'est résolu, le code de ton dernier message est le bon.
Par contre, je me demande comment il peut marcher parce qu'il n'est pas vraiment rédigé comme l'indique Microsoft sur sa doc officielle, mais bon... Le principal c'est que ça marche ! :good:

Merci beaucoup :sp:
Avatar du membre
Ausecour
Passionné d'Excel
Passionné d'Excel
Messages : 3'120
Appréciations reçues : 346
Inscrit le : 31 mai 2018
Version d'Excel : 2010 FR, 2013 FR

Message par Ausecour » 26 juillet 2019, 11:48

Mateo MNH a écrit :
26 juillet 2019, 10:57
Top !

C'est bon c'est résolu, le code de ton dernier message est le bon.
Par contre, je me demande comment il peut marcher parce qu'il n'est pas vraiment rédigé comme l'indique Microsoft sur sa doc officielle, mais bon... Le principal c'est que ça marche ! :good:

Merci beaucoup :sp:
Re,

Aucune idée, je ne copie que très rarement la façon dont les macros sont codées sur leur documentation de toute façon :lole: je préfère m'inspirer des autres membres du forum si c'est nécessaire :wink:

de rien en tout cas, de ton côté, merci d'avoir passé le sujet en résolu :bien:
Plus un sujet a un titre précis, des explications claires, et un fichier Excel bien préparé, plus il a de chances d'avoir une réponse qui répond au besoin, mettez toutes les chances de votre côté :bien:
"100% des gagnants auront tenté leur chance" :trfl:
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message