[VBA] Compter les lignes d'une requête SQL
Résolu
eXqO
Messages postés
54
Statut
Membre
-
parpins -
parpins -
Bonjour,
Je cherche à récupérer le nombre de lignes d'une requête SQL, le tout en VBA.
J'ai essayé d'utiliser un RecordCount, cependant il me renvoie systématiquement -1...
En espérant avoir une lumière sur ce RecordCount qui me pose un problème...:?
Cordialement,
Clément.
Je cherche à récupérer le nombre de lignes d'une requête SQL, le tout en VBA.
J'ai essayé d'utiliser un RecordCount, cependant il me renvoie systématiquement -1...
En espérant avoir une lumière sur ce RecordCount qui me pose un problème...:?
Sub CompleteTableauCommandeProvisoire()
'Déclaration des variables
Dim cnx As ADODB.Connection
Dim rst As ADODB.Recordset
'Instanciation des variables
Set cnx = New ADODB.Connection
Set rst = New ADODB.Recordset
Dim sql1 As String
Dim debutperiode As Date
Dim ddeb As String
Dim dfin As String
Dim Ligne As Integer
Dim j As Integer
Dim result_sql
Dim Col
Dim cptLigne As Integer
cnx.ConnectionString = "DSN=Stats;UID=***;PWD=***;"
cnx.Open
cptLigne = 6
'Changer la date de début d'année
For cptLigne = 6 To 263
For debutperiode = DateSerial(2008, 12, 29) To Now() - 6 Step 7
ddeb = Format(debutperiode, "dd/mm/yyyy")
dfin = Format(debutperiode + 6, "dd/mm/yyyy")
'Nombre total d'envois périodique (courrier ):
sql1 = "select m.mp_l, count(*), sum(c.cde_tot_ttc)" + _
" from e_cde c, e_mode_paiement m" + _
" where c.cde_ty_se_c = 'WV2'" + _
" and c.cde_mp_c in ('KM','KI','KW','KT', 'KA','KC', 'CA')" + _
" and c.cde_mp_c = m.mp_c" + _
" and c.cde_d between" + _
" to_date('" + ddeb + " 00:00:00' , 'dd/mm/yyyy hh24:mi:ss')" + _
" and to_date('" + dfin + " 23:59:59', 'dd/mm/yyyy hh24:mi:ss') " + _
" group by m.mp_l" + _
" order by 1"
rst.Open sql1, cnx
rst.MoveFirst
j = 0
result = rst.RecordCount
Do
For Ligne = cptLigne To cptLigne + result
For Col = 65 To 67
'Lecture en ligne
Range(Chr(Col) & Ligne).Select
'Récupère résultat
result_sql = rst.Fields(j).Value
'Transfert le résultat dans la cellule
ActiveCell.FormulaR1C1 = result_sql
j = j + 1
Next
j = 0
rst.MoveNext
Next
Loop While rst.BOF
cptLigne = cptLigne + 12
rst.Close
Next
Next
End Sub
Cordialement,
Clément.
A voir également:
- [VBA] Compter les lignes d'une requête SQL
- Excel compter cellule couleur sans vba - Guide
- Écrire plusieurs lignes dans une cellule excel mac - Guide
- Excel trier par ordre alphabétique en gardant les lignes - Guide
- Filtre excel ne fonctionne pas sur toutes les lignes ✓ - Forum Excel
- Afficher toutes les lignes masquées excel ✓ - Forum Excel
5 réponses
Essayez ceci :
Dim i As Integer
Dim maCmd As New SqlCommand("VOTRE_REQUETE_ICI", Conn)
Conn.Open()
Dim monRead As SqlDataReader = maCmd.ExecuteReader() 'execution de la requete
While monRead.Read()
i = i + 1
End While
Conn.Close() 'fermeture de la connexion a la base
Et voila , maintenant i contient le nombre des lignes de votre requête ...
Dim i As Integer
Dim maCmd As New SqlCommand("VOTRE_REQUETE_ICI", Conn)
Conn.Open()
Dim monRead As SqlDataReader = maCmd.ExecuteReader() 'execution de la requete
While monRead.Read()
i = i + 1
End While
Conn.Close() 'fermeture de la connexion a la base
Et voila , maintenant i contient le nombre des lignes de votre requête ...
Bonjour
je cherche aussi la solution à ce problème
j'utilise vba sous excel pour me connecter à Oracle.
voici mon code (mon objet connection appartient déjà à ma classe):
'Déclaration des variables
Dim cmd As ADODB.Command
Dim rst As ADODB.Recordset
'Instanciation des variables
Set cmd = New ADODB.Command
Set rst = New ADODB.Recordset
'Préparation de l'objet Command
cmd.CommandText = "SELECT * FROM MA_TABLE"
cmd.ActiveConnection = mobjCon 'attribut de classe
'Exécution de la requête
Set rst = cmd.Execute
rst.MoveLast 'renvoi l'erreur "L'ensemble des lignes ne prend pas en charge les récupérations arrière"
rst.RecordCount 'renvoi toujours -1
Visiblement le problème viendrait du parametrage du recordset.
certains recordset n'acceptent pas cette méthode
d'ou ma question comment avoir le bon recordset?
merci d'avance
je cherche aussi la solution à ce problème
j'utilise vba sous excel pour me connecter à Oracle.
voici mon code (mon objet connection appartient déjà à ma classe):
'Déclaration des variables
Dim cmd As ADODB.Command
Dim rst As ADODB.Recordset
'Instanciation des variables
Set cmd = New ADODB.Command
Set rst = New ADODB.Recordset
'Préparation de l'objet Command
cmd.CommandText = "SELECT * FROM MA_TABLE"
cmd.ActiveConnection = mobjCon 'attribut de classe
'Exécution de la requête
Set rst = cmd.Execute
rst.MoveLast 'renvoi l'erreur "L'ensemble des lignes ne prend pas en charge les récupérations arrière"
rst.RecordCount 'renvoi toujours -1
Visiblement le problème viendrait du parametrage du recordset.
certains recordset n'acceptent pas cette méthode
d'ou ma question comment avoir le bon recordset?
merci d'avance
Bonjour,
J'aurai plutôt fait un rst.MoveLast avant le RecordCount et ensuite le MoveFirst.
D'autre part, il faut remplacer le "+" de ta requête par "&". Le signe "+" est l'opérateur de l'addition et non de la concaténation. Il peut être mal interprété dans la requête.
;o)
J'aurai plutôt fait un rst.MoveLast avant le RecordCount et ensuite le MoveFirst.
D'autre part, il faut remplacer le "+" de ta requête par "&". Le signe "+" est l'opérateur de l'addition et non de la concaténation. Il peut être mal interprété dans la requête.
;o)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question