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:
Merci!
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
Partager