[VBA]Recordset ADO + problème de lecture

ThomasFalguieres Messages postés 36 Date d'inscription mardi 21 février 2012 Statut Membre Dernière intervention 11 juillet 2012 - 2 mai 2012 à 08:46
ThomasFalguieres Messages postés 36 Date d'inscription mardi 21 février 2012 Statut Membre Dernière intervention 11 juillet 2012 - 8 mai 2012 à 16:50
Bonjour,

Contexte: je suis actuellement en train de développer une application VBA sous Excel 2007. Mon outil (dc l'app VBA) communique avec une base de donnée ACCESS via l'objet ADO. Afin de manipuler les données, j'utilise donc un recordset, objet faisant parti d'une des collections d'ADO.
De plus, mon outil va automatiquement lire le contenu d'un fichier Excel. Pour ce faire, j'utilise un recordset qui lit et copie le tableau Excel. Le recordset est désormais assimilé à une table de base de donnée où la première ligne est celle des noms de champs de la table.

Mon problème: Lorsque je lis le contenu des cellules de la première ligne (donc les noms de champs), le caractère "." est assimilé/compris/lue comme le caractère "#". Cela me pose problème car j'utilise cette chaine de caractère par la suite dans des requêtes SQL et le caractère "#" est marqueur de fin, ou plus concrètement va inhiber le reste de la requête donc me fait planter l’application.

Je voulais donc savoir si quelqu’un pouvait m'aider à ce niveau

Je vous en remercie d'avance.

Thomas

6 réponses

ThomasFalguieres Messages postés 36 Date d'inscription mardi 21 février 2012 Statut Membre Dernière intervention 11 juillet 2012
2 mai 2012 à 09:12
Juste à titre informatif, j'ai pour le moment pallié à ce problème en utilisant la fonction "Replace" où je remplace les "#" par des "." seulement je ne trouve pas que se soit propre. Il faut que je le fasse systématiquement et cela peut porter à des erreur si on l'oubli ou autre.
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
2 mai 2012 à 11:23
Bonjour,

Tu sais que tu codes en vba, donc pourquoi poster ta question en vb6?
Si un admin peut déplacer le sujet...

Tu parles uniquement de la 1ere ligne, c'est donc ok pour les autres lignes?
Peux-tu poster le code que tu utilises, en te servant des balises de mise en forme (3ème icone en partant de la droite)?


L'expérience, c'est une connerie par jour, mais jamais la même..
0
ThomasFalguieres Messages postés 36 Date d'inscription mardi 21 février 2012 Statut Membre Dernière intervention 11 juillet 2012
2 mai 2012 à 12:34
Je l'ai placé à cet endroit car c'est une question en rapport au recordset qui appartient à l'objet ADO (quand bien même qu'au final le problème ne vienne pas de la, ma question est en rapport à ça). D'où le choix du thème "Base de données/ADO & DAO".

De plus, le VBA et le VB sont très proches à quelques différences prêt.

Et pour finir, la seule catégorie "VBA" qui correspondrait le mieux à ma question serait "Visual Basic 6/ Langages Dérivés / VBA" donc moins de mots clé correspondant à ma question. Mais je ne vois aucun inconvénient à ce qu'on le bouge de place

Pour en revenir à mon problème, j'ai l'erreur en effet que sur la première ligne. Sur les autres je lis bien le point tel qu'il est. Voici le code que j'exécute:


Dim info as string

'On copie le contenue du tableau du fichier excel dans le recordset
rec.Open "SELECT * FROM [" & NomFeuilleltr & "$]", Cn, adOpenKeyset, adLockOptimistic
rec.MoveFirst

'------------------------------
'Du code est exécuté entretemps
'------------------------------

'On récupère le nom de l'entête soit de la cible (et en même temps on se place sur la colonne voulue
info = rec.Fields(colonne).name



L'erreur survient donc sur la dernière instruction. Lorsque l'instruction retourne la chaine de caractère "7.02", info = "7#02".
Je me demandais s'il n'y avait pas d'options possibles sur les recordset (j'ai regardé mais rien ne semble adéquat)ou autre.

Je te remercie de ton aide et du temps que tu passes à comprendre l'erreur

Thomas
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
3 mai 2012 à 09:19
Re,

Etrange d'avoir ce comportement lors de la lecture du nom de champ..
Ta colonne est-elle d'un type particulier?
A tout hasard un lien qui pourrait t'aiguiller..


L'expérience, c'est une connerie par jour, mais jamais la même..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 mai 2012 à 10:34
Bonjour,
De plus, le VBA et le VB sont très proches à quelques différences prêts

Sauf que, dans ton cas (et tant en ce qui concerne Access que VBA/Excel), ce que tu utilises est totalement inconnu de VB6 (des ranges de ta feuille Excel, des champs de Access)
Et c'est bien là la raison d'une section dédiée à VBA !
Tu nous parles du résultat mais oublies de nous parler des choses essentielles (et qui ne concernent que Office et son VBA) :
- le format exact des cellules où ce # apparait (apparemment seule une cellule est dans ce cas).
- le type du champ de la table retournant cette valeur
- le contenu de ton champ (lorsque tu ouvres manuellement la table qui le contient)
Il y a par ailleurs une chose qui m'interpelle :
- dans ton premier message, tu parles de l'utilisation d'une table Access
- ta requête semble par contre se faire sur une feuille Excel (à moins que ce ne soit vraiment le nom que tu as donné à une table Access.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ThomasFalguieres Messages postés 36 Date d'inscription mardi 21 février 2012 Statut Membre Dernière intervention 11 juillet 2012
8 mai 2012 à 16:50
Bonjour,

Tout d'abord désolé de ne répondre que maintenant mais j'ai été très pris ces derniers temps et ai continué à développer avec la solution de remplacement dont je vous ai parlé plus haut.

@lolokun: Je te remercie du lien et vais aller voir si des informations peuvent m'aider
Sans quoi par rapport au champs de la colonne, je l'ai mis en 'Texte' donc il devrait y avoir lecture de caractère sans interprétation possible...Après peut-être est-il possible de régler le format des data que je vais mettre dans mon recordset ?

@ucfoutu: je vais donc répondre à tes questions :
- le format exact des cellules où ce # apparait (apparemment seule une cellule est dans ce cas).

Le format des cellules de la feuille Excel(de mon fichier Excel car n'oublions pas que j'utilise le recordset pour la lecture de fichier Excel fermé) était au format 'Standard' et je l'ai passé au format 'Texte'. Donc TOUTES les cellules de ma feuille Excel sont de ce format.

- le type du champ de la table retournant cette valeur

Je ne connais pas le type du champ dans le recordset. Y a t-il moyen de le savoir et de le modifier ?

- le contenu de ton champ (lorsque tu ouvres manuellement la table qui le contient)

Je pense que je me suis mal exprimé. Il n'y a pas de table réellement, c'est le recordset qui est interprété comme une table à savoir que grâce à ca, je peux extraire les données de mon recordset en exécutant les instructions du type "rec![NomChamp]" où NomChamp sont les premières lignes de mon recordset (un recordset étant conceptuellement sous forme de tableau).

- ta requête semble par contre se faire sur une feuille Excel (à moins que ce ne soit vraiment le nom que tu as donné à une table Access.

En effet la requête se fait sur une feuille Excel (dont les cellules sont au format 'Texte') d'un fichier Excel. Cette requête permet de copier/coller le tableau de la feuille Excel dans mon recordset qui est l'image de ce tableau. Pour tout te dire, la variable NomFeuilleltr = Feuil1, le nom de la première feuille par défaut d'un fichier Excel.

Ces informations t'aident-elles à y voir plus clair ? Si besoin de plus d'information, ne pas hésiter à me demander, j'y répondrai avec plaisir

Encore une fois je tiens à m'excuser de ma réponse tardive et merci à vous deux de m'aider sur le problème

Thomas
0
Rejoignez-nous