Bonjour

Je dispose d'un dossier contenant n classeurs excel qui possèdent la même structure, mais dont les données diffèrent. Je souhaite extraire de tous ces classeurs (en les gardant fermés!) les lignes non vides d'une feuille particulière, et les coller les unes à la suite des autres dans une feuille d'un autre classeur.

Pour cela, je me suis basé sur le très bon tuto de Silkyroad qui permet d'extraire des données depuis des classeurs fermés.

Lorsque je cherche à faire l'extraction depuis un seul classeur fermé, et que je spécifie son nom dans le code, c'est OK. Par contre, lorsque je créé une boucle While pour faire cela sur tous les classeurs de mon dossier, là ça plante: j'ai une "automation error -2147217865" argghh!
Je ne vois pas du tout d'où peut venir le problème ...

Voici mon code:

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Sub RequeteClasseurFerme()
 
Dim Repertoire As String
Dim Cn As ADODB.Connection
Dim Fichier As String
Dim NomFeuille As String, texte_SQL As String
Dim Rst As ADODB.Recordset
Dim x As Integer
 
'empeche le scintillement de l'écran
Application.ScreenUpdating = False
 
'Définit le classeur fermé servant de base de données
Repertoire = "D:\Documents and Settings\stephen.durand\My Documents\Skills Assessment\Outil admin summary"
Fichier = Dir(Repertoire & "\*.xls")
 
    ' va parcourir le répertoire pour y trouver tous les fichiers excel,et pour chaque fichier trouvé, 
    'en extraire le contenu de la feuille "export input table" et le placer dans la feuille 
    '"global input table" du classeur actif
 
    Do While Fichier <> ""
 
        Set Cn = New ADODB.Connection
 
        'Etablit la connection
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Data Source=" & Fichier & _
             ";Extended Properties=Excel 8.0;"
            .Open
        End With
 
        'Nom de la feuille dans le classeur fermé
         NomFeuille = "export input table"
 
        'Définit la requête (Attention à ne pas oublier le symbole $ après le nom de la feuille).
 
         texte_SQL = "SELECT * FROM [" & NomFeuille & "$] WHERE Id_skill <> 0"
 
         Set Rst = New ADODB.Recordset
         Set Rst = Cn.Execute(texte_SQL)
 
         'Ecrit le résultat de la requête à partir de la première ligne du classeur actif 
        'qu'il trouve vide (dont la cellule Ai est vide)
 
         x = ThisWorkbook.Sheets("Global input table").Range("A65536").End(xlUp).Row + 1
 
        ThisWorkbook.Sheets("Global input table").Cells(x, 1).CopyFromRecordset Rst
 
        'Ferme la connection
 
        Rst.Close
        Set Rst = Nothing
        Cn.Close
        Set Cn = Nothing
 
    'passe au fichier suivant
    Fichier = Dir
    Loop
 
Application.ScreenUpdating = True
 
MsgBox "Opération terminée."
 
End Sub
Merci!