Bonjour,
J'ai un problème en vba, avec une macro excel. Le principe de la macro est le suivant : le programme doit me retourner des valeurs récupérées dans une base de données et les stockés dans certaines cellules sur plusieurs feuilles.
Le problème : Lorsque je met une variable dans ma requête sql ou bien dans la fonction Worksheets(), le résultat est automatiquement arrondi. (soit au supérieur si plus x,5 soit au chiffre inférieur si moins de x,5)
Exemple avec un extrait de mon code :
Sur cet extrait le résultat affiché dans la cellule est du genre 124,00
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 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
Alors que si je modifie les deux lignes suivantes comme ceci, en imaginant que "tfg" est le nom réel de ma table et de ma feuille de calcul.
Le résultat sera bon c'est à dire du genre 123,75
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 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")
Le problème c'est que j'ai 32 feuilles à parcourir... je me vois mal créer 32 requêtes sql juste pour avoir les arrondis.
J'ai essayé avecsans succès, le comportement n'est pas modifié.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ROUND(SUM(colonne1))
Avez-vous une idée, s'il vous plait ?
Partager