IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Compter les lignes d'une requête SQL [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 68
    Points : 39
    Points
    39
    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 : 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
    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.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 369
    Points
    34 369
    Par défaut
    salut,
    ton recordcount correspond au numéro de l'enregistrement en cours.
    Or ici tu testes sa valeur après un MoveFirst...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 68
    Points : 39
    Points
    39
    Par défaut
    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"

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 369
    Points
    34 369
    Par défaut
    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/

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 68
    Points : 39
    Points
    39
    Par défaut
    Merci beaucoup pour votre aide !

    Problème résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [BO XI R2] Compter les lignes d'une requête
    Par iori11 dans le forum Webi
    Réponses: 6
    Dernier message: 24/06/2008, 12h10
  2. Récupérer les lignes d'une procédure SQL Server dans le programme VB.NET
    Par Mikelester12 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 30/07/2007, 11h33
  3. [SQL] Supprimer les lignes d'une table sql
    Par radhwene dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/06/2007, 11h48
  4. Réponses: 5
    Dernier message: 20/03/2007, 17h55
  5. Compter les lignes d une <TABLE>
    Par Invité(e) dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/01/2005, 14h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo