Caster une variable recordset en double

Calimero33

XLDnaute Nouveau
Bonjour, j'ai réalisé une requête SQL avec ADO et recordset elle fonctionne très bien néanmoins les données numériques que j'importe sont devenu une chaine de caractère. J'aurai besoin de faire des calculs dessus je voudrais donc convertir ma variable Rst en Double avec la fonction CDbl. Rien à faire j'ai le message d'erreur Type Incompatible, j'ai essayé avec la fonction CInt c'est pareil. Une idée ?

Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(texte_SQL)

'Ecrire le résultat de la requête dans la cellule

Dim Resultat As Double
Resultat = CDbl(Rst)

Resultat = (Resultat / 1000) * (-1)

Merci !!!
 

Calimero33

XLDnaute Nouveau
Re : Caster une variable recordset en double

Je n'arrive pas à convertir le résultat de ma requête SQL stockée dans une variable Recordset en Integer ou DOuble. J'ai essayé :

Set Rst = Cn.Execute(texte_SQL)

Dim Resultat As variant
Resultat = Trim(rst)
Resultat=Cdbl(resultat)

Rien à faire j'ai toujours l'erreur incompatibilité de type avec la fonction CDbl. Quelqu'un aurait une idée sur comment je pourrai contourner ce problème ? J'ai essayé Cint en mettant Resultat As Integer mais rien à faire, j'ai toujours une incompatibilité de type.
 

Habitude

XLDnaute Accro
Re : Caster une variable recordset en double

Rst est un nombre en format texte

Peut-être que ton texte est "245,34" que tu essaie de caster en nombre
Ca ne marchera pas.
Il faut "245.35" pour que le cast fonctionne

Met un break point sur Resultat = Trim(rst)
Et regarde la valeur de rst
 

Habitude

XLDnaute Accro
Re : Caster une variable recordset en double

A moins d'avis contraire, une cellule Excel et la fonction CDbl sont 2 choses totalement différente.

Bref, libre à toi d'essayer ou non ma proposition. Tant qu'a moi, tu as tout à y gagner.

Resultat = cdbl(Trim(Replace(rst, ",", ".")))
 

Calimero33

XLDnaute Nouveau
Re : Caster une variable recordset en double

Tu as raison cela n'a rien à voir on s'est mal compris, désolé.
J'ai essayé ta solution mais j'ai toujours la même erreur : Incomatibilité du type sur la fonction Replace. :(
Je commence à croire que l'on peut pas caster un Recordset !

Resultat = Trim(Replace(Rst, ",", "."))
Resultat = CDbl(Resultat)
Resultat = (Resultat / 1000) * (-1)
 
G

Guest

Guest
Re : Caster une variable recordset en double

Bonjour,

Rst est un recordset et ne peut être caster directement en valeur double.

1 - Ton recordset renvoie un seul enregistrement avec un seul champ:
Resultat=CDBL(replace(rst(0),",",".")) à condition qu'il contienne quelque chose.
Ou Resultat=CDBL(replace(rst(NomOuIndexDuchamp),",",".")) si plusieurs champs

2 - ton recordset renvoie plusieurs enregistrement avec un ou plusieur champs
il faut boucler sur tous les enregistrements et champs.

A+
 
Dernière modification par un modérateur:

Calimero33

XLDnaute Nouveau
Re : Caster une variable recordset en double

Mon recordset renvoie une seule valeur dans la mesure où ma requête SQL renvoie une somme. J'ai donc utiliser comme tu me l'as conseillé
Resultat = CDbl(Trim(Replace(Rst(0), ",", ".")))
Un nouveau message d'erreur apparait : Erreur d'execution '94', Mauvaise utilisation de Null
J'ai donc essayé sans, mais Rst() necessite un argument .

Une solution ?

Merci !!
 
G

Guest

Guest
Re : Caster une variable recordset en double

Bonjour,

Si tu as une valeur Nulle c'est que ta requête n'a rien renvoyée pour le champ d'index 0

Mets un Point d'arrêt à la ligne
Code:
Resultat = CDbl(Trim(Replace(Rst(0), ",", ".")))
Quand le code s'arrêtera à cette ligne:
sélectionne Rst et fais MAJ+F9 tu auras un espion et tu pourras explorer ton objet recordset.

Sinon, fais nous un exemple des fichiers source et destination avec macro et ce qu'il faut, et joins le tout à ton message. sinon on va tourner en rond.

A+
 

Calimero33

XLDnaute Nouveau
Re : Caster une variable recordset en double

Mon fichier source est un fichier excel base de données qui contient plusieurs colonnes. Ma requête fontionne très bien puisque j'arrive à insérer le résultat du recordset dans la case de mon tableau de mon choix. Néanmoins avant d'inserer le resultat dans mon tableau j'ai besoin de faire un calcul dessus pour mettre le resultat en K.Euros. C'est la que mon problème apparait ...
Impossible de faire un calcul avec ma variable recrodset car c'est du format texte. J'ai donc voulu caster ma variable en Double mais le cast est impossible à chaque tentative un message TYPE INCOMPATIBLE APPARAIT.
Mon recordset renvoie une seule valeur non nulle.

Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(texte_SQL)

Dim Resultat As Variant

Resultat = Trim(Replace(Rst, ",", "."))
Resultat = CDbl(Resultat)

Resultat = (Resultat / 1000) * (-1)

Si je met Rst dans la fontion trim sans argument j'ai une erreur de type incompatible sur Replace.
Si je met Rst(0) j'ai une erreur de mauvaise utilisation de Null
Si je ne met pas la fonction trim, j'ai une erreur de type incompatible.

Aidez-moi !!
 
G

Guest

Guest
Re : Caster une variable recordset en double

Re,

Si je met Rst dans la fontion trim sans argument j'ai une erreur de type incompatible sur Replace.
Si je met Rst(0) j'ai une erreur de mauvaise utilisation de Null
Si je ne met pas la fonction trim, j'ai une erreur de type incompatible

Je te le disais plus haut: TypeIncompatible parceque Rst est un objet et non une variable simple

Valeur Null quand le le champ ne contient rien.

Joins deux fichiers exemple avec les macros.
sinon, se sera ma dernière intervention.
A+
 

Habitude

XLDnaute Accro
Re : Caster une variable recordset en double

Essaie de convertir ton RST en string d'abord

Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(texte_SQL)

Dim ResultatTexte as string
Dim Resultat as double

ResultatTexte = Rst
Resultat = CDbl(Trim(Replace(ResultatTexte, ",", ".")))

Resultat = (Resultat / 1000) * (-1)
 

Discussions similaires

Statistiques des forums

Discussions
312 502
Messages
2 089 047
Membres
104 011
dernier inscrit
dfr