Salut _Thierry, Michel_m, et tout les autres,
1. Si j'ai bien compris ton problème concernant le passage d'un argument qui serait un champs directement dans ta requête:
Tu as 2 possibilités:
Tu fais un SELECT * FROM MaTable, puis tu parcours les champs jusqu'à ce que tu trouves le champs qui t'intéresse
Tu reconstruis ta requête, sSQL='SELECT' & monChamp & ' FROM...'.
L'avantage de la seconde méthode est que tu n'as pas à parcourir tous les champs....
2. Concernant la syntaxe des requêtes ma préférence va vers:
Code:
Set oRec = New ADODB.Recordset
oRec.Open Source:='SELECT * FROM toto'
mais bon ce n'est que ma préférence
3. Petits trucs pour les requêtes:
Si ton champs comprend des espaces il faut le mettre entre crochet:
Citation:
|
SELECT [Mon Champs] FROM ...
|
Si tu n'as qu'une table, pas besoin de l'ajouter aux champs:
Citation:
|
SELECT MonChamps FROM MaTable
|
et non
Citation:
|
SELECT MaTable.MonChamps FROM MaTable
|
Par contre cela est nécessaire si tu fais des jointures
4. Si tu utilises toujours les mêmes requêtes, tu peux les mettre dans Access et les appeler directement de ton programme pour ne récupérer que son résultat. Avantage, tu modifies ta requête dans Access uniquement sans avoir à vérifier tout ton code où il y a des requêtes.
5. Je n'ai pas la réponse mais à ce que je vois tu n'utilises pas les jointures dans tes requêtes! Or c'est particulièrement pratique pour faire le lien entre un enregistrement d'une table avec ceux d'une autre. Bon, il faut que je regarde ton code bien plus en profondeur pour savoir si cela est nécessaire (mais ca l'est souvent :lol

.
6. Un autre truc que personnellement j'adore dans le couple Access/Excel. Je rapatrie ma (partie de) table dans une feuille masquée et je la manipule avec Excel (via les noms). Ca évite de se torturer l'esprit avec les requêtes Access (genre écrire une requête avec jointure, condition WHERE avec des AND ou des OR, etc). C'est plus facile à débuguer. Bref cela donne quelquechose qui ressemble à cela:
Code:
With oRec
.Open Source:='MA REQUETE'
'Pour récupérer les noms des champs
For i = 1 To .Fields.Count
Feuil7.Cells(1, i) = .Fields(i - 1).Name
Next
'Pour recopier le recrdset dans la feuille
With Feuil7.Cells(2, 1)
.CopyFromRecordset oRec
.CurrentRegion.Name = 'Bdd_Papier'
End With
.Close
End With
'Après y'a plus qu'à...
Bon, c'est tout pour le moment. J'ai quand même ton code à regarder. :lol: