Bonjour,

Je souhaite exécuter une requête SQL sous VBA et récupérer le résultat dans une feuille Excel. L'intérêt étant de générer de manière dynamique la requête en fonction des besoins.

Voici le 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
 
 
DBEngine.DefaultType = dbUseODBC
Set Database = DBEngine.OpenDatabase(guide_methodo, dbNoDriverPrompt, True, "ODBC;DATABASE=guide_methodo;DSN=guide_methodo")
 
Dim texte_SQL As String
texte_SQL = "SELECT methodo_arbo_0.id FROM guide_methodo.methodo_arbo methodo_arbo_0 WHERE methodo_arbo_0.pere = 0)"
 
Set enregistrement = Database.OpenRecordset(texte_SQL, dbOpenSnapshot)
 
Dim cpt As Integer
cpt = 0
 
' On teste que la requête n'est pas vide
If Not (enregistrement.BOF And enregistrement.EOF) Then
   ' On retourne la première ligne de l'enregistrement.
   enregistrement.MoveFirst
 
   ' On parcours l'enregistrement d'un bout à l'autre
   Do While Not enregistrement.EOF
      enregistrement.MoveNext
      cpt = cpt + 1
   Loop
 
   ' On retourne à la première ligne
   enregistrement.MoveFirst
End If
 
'Ecrit le résultat de la requête dans la feuille Excel
toto = Worksheets("Test").Range("A2").CopyFromRecordset(enregistrement, cpt, enregistrement.Fields.Count)

Pour l'exemple j'ai grandement simplifié la requête SQL.
Le problème est qu'une partie des champs retournés par la requete sont des champs définis de type "ENUM" dans ma base SQL. Ces champs sont retournées sous Excel avec des caractères "?" à la place de certains caractères valides. Par exemple :
Au lieu de "URL" j'ai "?L"
Au lieu de "URA" j'ai "?A"
Au lieu de "REPARABLE" j'ai "????E"
Etc...

Est-ce que quelqu'un a déja rencontré ce problème ou sait d'ou cela pourrait provenir ?
Merci.