Macro boucle requête SQL resultat affiché sans décimale

Fermé
Ja_bert Messages postés 1 Date d'inscription mardi 20 janvier 2015 Statut Membre Dernière intervention 26 janvier 2015 - 26 janv. 2015 à 07:43
Bonjour,

Contexte de mon problème :
J'ai fais un programme vba dans une macro Excel pour automatiser une procédure.
Le principe est le suivant : le programme fait des requêtes SQL sur une base MySQL, il écrit le résultat de chaque requêtes dans différentes cellules et sur plusieurs feuilles. (La requête SQL est une somme en fonction de 2 ou 3 critères)
Comme j'ai environ 1000 requêtes SQL à faire, j'ai fais une boucle qui tourne sur chaque feuilles. J'utilise donc des variables dans la requête SQL pour indiquer le nom de la table et le numéro de la feuille à utiliser : Worksheets().

Le problème : Quand j'utilise ces variables, le résultat est automatiquement arrondi à l'entier. (soit au supérieur soit à l'inférieur, selon ce qu'on a après la virgule)
Mais ce que je veux c'est avoir 2 décimales après la virgule.

Si je n'utilise pas de variable dans ma requête SQL, le résultat est bien affiché avec les décimales.

Exemple avec un extrait de mon code :

sub requetesql()

'Les variables de connexion odbc
Dim cnx As ADODB.Connection
Dim rst As ADODB.Recordset
Set cnx = New ADODB.Connection
Set rst = New ADODB.Recordset
Dim NomDuDSN As String
Dim NomUtilisateur As String
Dim MotDePasse As String
'variables des requêtes
Dim noWs As Integer
Dim nomFeuille As String
Dim celluleD As String
Dim var2 As Integer

'identifiant
NomDuDSN = "MySQL"
NomUtilisateur = "toto"
MotDePasse = "toto"

'chaine de connexion
cnx.ConnectionString = "DSN=" & NomDuDSN & ";UID=" & NomUtilisateur & ";PWD=" & MotDePasse & ";"

'ouverture de la bdd
cnx.Open

For noWs = 1 To 32
nomFeuille = Worksheets(noWs).Name
'Définir les variables de requête
table = nomFeuille 'NOTE : le nom de la table sql corresponds au nom de la feuille
var2 = 0
var3 = "'D342J'"
celluleD = "F45"
'Exécution de la requête SQL
rst.Open "SELECT SUM(colonne1) AS montant1 FROM " & table & " WHERE colonne2 = " & var2 & " AND colonne3 = " & var3 & "", cnx
'on insère la requête SQL dans la bonne case
Worksheets(noWs).Range("" & celluleD & "").Offset(1, 0) = rst("montant1")
rst.Close
Next

'pour revenir sur la première feuille...
Worksheets(1).Activate
End Sub



Si je modifie une requête pour écrire en dur le nom de la table et de la feuille Excel, je n'ai plus de problème, le résultat est affiché avec mes 2 décimales.


rst.Open "SELECT SUM(colonne1) AS montant1 FROM tfg WHERE colonne2 = " & var2 & " AND colonne3 = " & var3 & "", cnx
Worksheets(tfg).Range("" & celluleD & "").Offset(1, 0) = rst("montant1")



Si je modifie la ligne rst comme ceci :
rst.Open "SELECT Format(SUM(" & Table & ".colonne1), '#0.00')  AS montant1 FROM " & Table & " WHERE " & Table & ".colonne2 = " & var2 & " AND  " & Table & ".colonne3 = " & var3 & "", cnx


J'arrive à obtenir mes décimales uniquement ! Par exemple au lieu d'avoir 12,87 j'aurai 87,00 ... Je n'y comprends plus rien !

Si vous avez une idée à me proposer j'en serais ravi.