Bonjour,
je fais appel à une base de données access depuis excel à l'aide d'une requete sql dans un code vba.
En gros j'ai une feuille excel contenant une liste de codes article à analyser, déterminée à l'avance par une macro.
Puis je cherche par la requete SQL à récupérer la liste des données de ces articles en interrogeant une table dans la base access, pour ces codes article.
Le problème est que j'obtiens le message "erreur d' execution 3360 - la requete est trop complexe" à partir d'un certain nombre de codes article (environ 100 valeurs)
En effet cette requete est construite en utilisant la clause WHERE en parcourant la liste des codes articles à analyser.
Voici le code correspondant vous comprendrez mieux:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 requete = "SELECT * FROM donnees_article WHERE id_article like" & " '" & Sheets("perimetre_analyse_article").Cells(i, 1).Value & "*'" While Sheets("perimetre_analyse_article").Cells(i + 1, 1).Value <> "" requete = requete & " OR id_article=" & "'" & Sheets("perimetre_analyse_article").Cells(i + 1, 1).Value & "'" i = i + 1 Wend Set db = DAO.OpenDatabase(DB_Path, False, False) Set rec = db.OpenRecordset(requete, DAO.dbOpenSnapshot) Worksheets("import_articles").Range("A2").CopyFromRecordset rec
Evidemment la requete peut vite devenir trop complexe puisqu'elle contient autant de OR que de codes articles et j'ai alors le message d'erreur cité précédemment.
J'imagine qu'il y a un moyen plus simple de faire en indiquant dans la requete qu'on souhaite récupérer les données de tous les codes articles de la liste,
sans avoir à les indiquer 1 par 1 avec la clause WHERE, mais je ne sais pas comment faire..(sauf à tout faire dans access, mais mon fichier de départ est sous excel donc je souhaiterais continuer d'utiliser cette méthode de requête si cela est possible).
Avez-vous une idée?
merci par avance
Partager