Bonjour le forum,

Je me retourne vers vous pour un petit problème.

Je cherche à consolider dans un classeur les données contenues dans d'autres classeurs.

Dans la faq excel, j'ai trouvé un code qui fonctionne très bien:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Comment fusionner tous les classeurs fermés d'un répertoire, à la suite dans une nouvelle feuille de calcul ?
 
http://excel.developpez.com/faq/index.php?page=Classeur#ClasseursFermes
 
'Nécessite d'activer la référence
    'Microsoft ActiveX Data Objects x.x Library
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim xConnect As String, Cible As String
Dim Fichier As String, Dossier As String, Feuille As String
Dim i As Long
 
'nom du répertoire contenant les classeurs à regrouper
Dossier = "C:\nom dossier"
'Nom de la feuille dans les classeurs fermés
'Ne pas oublier le symbole $ après le nom de la feuille
Feuille = "Feuil1$"
i = 2
 
Fichier = Dir(Dossier & "\*.xls")
'boucle sur les fichiers du repertoire
Do While Len(Fichier) > 0
    xConnect = "DRIVER={Microsoft Excel Driver (*.xls)};" & _
    "ReadOnly=1;DBQ=" & Dossier & "\" & Fichier
    'connection classeur
    Set Cn = New ADODB.Connection
    Cn.Open xConnect
 
    'Requete
    Cible = "SELECT * FROM [" & Feuille & "];"
 
    Set Rs = New ADODB.Recordset
    Rs.Open Cible, xConnect, adOpenStatic, adLockOptimistic, adCmdText
 
    'Ecriture dans la feuille de calcul
    If Not Rs.EOF Then Cells(i, 1).CopyFromRecordset Rs
    i = Cells(i, 1).End(xlDown).Row + 1
 
    Rs.Close
    Cn.Close
    Set Cn = Nothing
    Set Rs = Nothing
    Fichier = Dir()
Loop
 
MsgBox "Terminé"
Le seul problème c'est que ce code ne fonctionne que pour la version Excel 2003.

J'utilise la version 2007 et il m'arrive de recevoir et de travailler sur les deux versions.

Donc j'ai crée un fichier xlsm contenant le code ci-dessus en modifiant "xls" en "xlsx", en prenant soin d'activer différentes bibliothèques recommandées.

Mais cette manip génère des erreurs.

Je souhaite pouvoir consolider les données dans un fichier source et ce, quelque soit la version excel des fichiers reçus (xls, xlsx ou xlsm).

Pourriez-vous me dire comment faire pour améliorer le code ci-dessus afin de pouvoir lire les données des fichiers xls, xlsx et xlsm et les consolider dans un fichiers source ?