Bonjour,
Tout d'abord:
Plus sérieusement, j'ai 8 fichiers dans un répertoire, peu importe le nombre je récupère leurs noms dans un tableau de variables "TabFolder".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 If SupportBaseDeDonnees = Excel then UsineAGaz = True ProjetCritiquéParDev = True MsgBox ("Desolé mais dans mon service tout le monde n'a pas accès à ACCESS donc je fais avec les moyens du bord") Endif
Je souhaite, selon 3 critères (dans une colone particulière) récupèrer les lignes d'une feuille de ces classeurs et les compiler dans un seul tableau bien filtré, compact et utilisisable par la suite.
Au lieu de faire le filtre post-extraction (en important TOUTE la feuille et triant par la suite, engrangeant pas mal de boucles)
Je veux faire le filtre pre-extraction, c'est à dire simplement inclure un WHERE dans l'instruction SQL de récupération de données.
Cependant, (on en arrive au problème), en manipulant le compteur i j'ai testé mon code sur tout les fichiers, 3 sur 8 fonctionnent, je ne sais pas pourquoi...
L'arrêt d'exécution s'effectue ligne 30 dans le code ci dessous et renvoie le message d'erreur: "Erreur d'exécution' *METTEZ UN GROS NOMBRE ICI*: Type de données incompatibles dans l'expression du critère"
Debuts de recherche:
Réflexe, je regarde les différences présentes entre les fichiers qui marchent et qui ne marchent pas, il n'y en a pas de notables...
J'ai essayé de déclarer mes connections dans un tableau de variables pour bien les différentier entre elles et être sûr que ce n'était pas le fait d'utiliser la même variable qui gênait. (Même si Set Cn = Nothing)
Merci de votre lecture et potentielle aide,
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 For i = 1 To UBound(tabfolder, 1) ReDim Impor(21, 1) ReDim TabFiltre(1) Set Cn(i) = New ADODB.Connection Set oCat = New ADOX.Catalog 'Définit le classeur fermé servant de base de données Fichier = "\\sfptf1nas1\" & MonChemin & "\" & tabfolder(i) With Cn(i) .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _ & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;""" .Open End With Set oCat.ActiveConnection = Cn(i) 'Nom de la feuille dans le classeur fermé For Each Feuille In oCat.Tables NomFeuille = Feuille.Name Next Feuille 'ça récupère la feuille que je veux 'Définit la requête. texte_SQL = "SELECT frm.* FROM [" & NomFeuille & "] as frm WHERE frm.Statu='---' OR frm.Statu='3' OR frm.Statu='0';" Set Rst = New ADODB.Recordset Set Rst = Cn(i).Execute(texte_SQL) 'Stockage Impor = Rst.GetRows Rst.Close '--- Fermeture connexion --- Cn(i).Close Set Rst = Nothing '*******TRAITEMENT_IMPOR************ Next i
Bonne journée
J'ai trouvé une piste... Les fichiers qui possèdent un 3 dans la colonne testée plante, les autres marchent... problème de syntaxe SQL ?
merci
Avec le code suivant:
Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part texte_SQL = "SELECT frm.* FROM [" & NomFeuille & "] as frm WHERE NOT frm.Statu = 1;"
Les fichiers qui ne possèdent pas de "1" dans la colone Statu font planter, les autres fontionnent...
Des idées?
Partager