Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 02/07/2009, 09h05   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2009
Messages : 68
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 68
Points : 13
Points : 13
Par défaut Compter les lignes d'une requête SQL

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...

EDIT :

Code :
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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.
exqo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2009, 09h58   #2
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 6 724
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 6 724
Points : 8 616
Points : 8 616
Envoyer un message via MSN à jpcheck
salut,
ton recordcount correspond au numéro de l'enregistrement en cours.
Or ici tu testes sa valeur après un MoveFirst...
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2009, 10h29   #3
Candidat au titre de Membre du Club
 
Inscription : juin 2009
Messages : 68
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 68
Points : 13
Points : 13
Ce qui veut dire que je dois le placer après un MoveLast ?

Si c'est le cas, on m'indique une erreur : "L'ensemble des lignes ne prend pas en charge les récupérations arrière"
exqo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2009, 13h32   #4
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 6 724
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 6 724
Points : 8 616
Points : 8 616
Envoyer un message via MSN à jpcheck
les deux parties à regarder sont dans cet article :
http://vb.developpez.com/bidou/recor...rseurs#LIV-B-2
et
http://vb.developpez.com/bidou/recor...ordset#LVI-A-9
voir les types de curseurs pour avoir un recordcount qui "fonctionne"

solution trouvée juste ici :
http://www.developpez.net/forums/d77...recordset-1-a/
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access

Dernière modification par AlainTech ; 05/07/2009 à 08h26. Motif: Fusion de 2 messages
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2009, 14h25   #5
Candidat au titre de Membre du Club
 
Inscription : juin 2009
Messages : 68
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 68
Points : 13
Points : 13
Merci beaucoup pour votre aide !

Problème résolu
exqo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 13h06.


 
 
 
 
Partenaires

Hébergement Web