Ouvrir plusieurs classuers avec GetOpenFilename

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

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

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

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

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 !

Merci beaucoup

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 !

Merci beaucoup

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 je préfère m'inspirer des autres membres du forum si c'est nécessaire

de rien en tout cas, de ton côté, merci d'avoir passé le sujet en résolu

Rechercher des sujets similaires à "ouvrir classuers getopenfilename"