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 :

[VBA - Excel - 2007] Recordset à -1 [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 80
    Par défaut [VBA - Excel - 2007] Recordset à -1
    Bonjour à tous

    Voila, j'ai un fichier excel qui discute avec une base MySql (c'est pour des exports spécifiques sur des données de Mantis).

    Il y a déjà quelques requêtes qui fonctionnent bien.

    Mais pour certaines :
    - en ayant suivi le même schéma de code que celles qui fonctionnent
    - en ayant fait la requête directement sous mysql (et que cela fonctionne)

    --> le nombre d'enregistrements est nul (le recorcount retourne -1).

    je croyais au début que c'était parce que j'utilisai le même recordset. Alors j'en ai créé un pour chaque requêtes (que je ferme ensuite avec la connexion). Mais cela n'a rien changé :'(

    Auriez vous d'autres pistes?

    PS :

    Voici le code d'une des requêtes qui ne marche pas : J'ai directement recopier le contenu de la variable "laRequete" à partir du sqlQuery de mysql (qui me retourne bien des résultats). J'ai aussi posé un espion sur "idProjet" qui est correct.

    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
    Private Sub chargerComboUsers()
        Dim requeteUser As New ADODB.Recordset
     
        laRequete = ""
        laRequete = laRequete & "SELECT mantis_project_table.id, mantis_project_table.name, mantis_user_table.realname"
        laRequete = laRequete & " FROM mantis_project_table, mantis_project_user_list_table, mantis_user_table"
        laRequete = laRequete & " where mantis_project_table.ID = mantis_project_user_list_table.project_id"
        laRequete = laRequete & " and mantis_project_user_list_table.user_id = mantis_user_table.id"
        laRequete = laRequete & " and mantis_project_table.id = " & idProjet & ";"
        cmbChoixSec.Clear
     
        ProceduresDiv.initConnectionMysql
        Set objetConnexion = New ADODB.Connection
        objetConnexion.Open chaineConnection
     
        requeteUser.Open laRequete, objetConnexion
            MsgBox (requeteUser.RecordCount)
            requeteUser.MoveFirst
     
            If requeteUser.RecordCount > 0 Then
                While Not (requeteUser.EOF)
                    cmbChoixSec.AddItem requeteUser("realname")
                    requeteUser.MoveNext
                Wend
            End If
            requeteUser.Close
            objetConnexion.Close
    End Sub
    Voila voila

    Merci beaucoup d'avance

    @++

  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 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Bonjour,
    une piste issue des cours :
    http://vb.developpez.com/bidou/recor...xputil#LVIII-B
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 80
    Par défaut
    Bonjour,

    Merci pour votre réponse

    J'ai essayé d'adapter mon code mais mon recordcount est toujours à -1.
    Jai essayé de le détourné en mettant le redim (= la cause de l'interrogation du recordcount) à l'intérieur de la boucle.

    Mais cela fait une boulcle infinie.

    Je vous met mon code à jour :

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    Dim WithEvents objetConnexion       As ADODB.Connection
    Dim WithEvents requeteBugs          As ADODB.Recordset
    Dim requeteProjets                  As ADODB.Recordset
    Dim cmdProjets                      As ADODB.Command
    Dim cmdBugs                         As ADODB.Command
    Dim nb                              As Integer
    Dim decomposeIdProjet()             As String
    Private Sub Image1_Click()
        ProceduresDiv.OuvrirAide ("journal")
    End Sub
    Private Sub Image2_Click()
        Feuil1.Activate
        Feuil1.Visible = True
        cmbListProjets.Clear
        Feuil3.Visible = False
    End Sub
    Private Sub Image3_Click()
        If cmbListProjets.Value <> "" Then
     
            ProceduresDiv.titreDoc = "Journal des incidents"
     
            'Trouver l'id du projet
            decomposeIdProjet = Split(cmbListProjets.Value, "(")
            decomposeIdProjet = Split(decomposeIdProjet(1), ")")
            ProceduresDiv.idProjet = Trim(decomposeIdProjet(0))
     
            'récupérer la liste des bugs concernés
            laRequete = ""
            laRequete = laRequete & "SELECT * FROM mantis_bug_table"
            laRequete = laRequete & " WHERE project_id = " & ProceduresDiv.idProjet
     
     
     
     
            Set requeteBugs = New ADODB.Recordset
            'Set cmdBugs = New ADODB.Command
            'cmdBugs.CommandText = laRequete
            'cmdBugs.ActiveConnection = objetConnexion
            'Set requeteBugs = cmdBugs.Execute
            '-----> La ligne ci dessous donne une erreur : le pilodte odbc ne prend pas en charge cette méthode
            'requeteBugs.Open laRequete, objetConnexion, adOpenKeyset, adLockReadOnly, adCmdText
            requeteBugs.Open laRequete, objetConnexion
     
            '----> retourne -1
            MsgBox (requeteBugs.RecordCount)
     
            requeteBugs.MoveFirst
     
            nb = 1
            '----> avant cette ligne était en erreur car le recordcount était à -1
            'ReDim ProceduresDiv.listBugs(requeteBugs.RecordCount)
            While Not (requeteBugs.EOF)
                '----> après avoir déplacer cette ligne à k'intérieur de la boucle : cette dernière est infinie
                ReDim ProceduresDiv.listBugs(nb)
                ProceduresDiv.listBugs(nb) = requeteBugs("id")
                nb = nb + 1
                MsgBox (nb & "ièem bug pour le projet " & ProceduresDiv.idProjet)
            Wend
            requeteBugs.Close
     
            'création d'un nouveau fichier Excel
     
     
            'gestion affichage
            'Feuil3.Visible = False
     
     
        Else
            MsgBox ("Choisir un projet")
        End If
    End Sub
    Private Sub Worksheet_Activate()
        ' Déclarations
        'Dim requeteProjets As ADODB.Recordset
        ' Connection à la base
        ProceduresDiv.initConnectionMysql
        Set objetConnexion = New ADODB.Connection
        objetConnexion.Open chaineConnection
        ' Chargement des projets
        laRequete = ""
        laRequete = laRequete & "SELECT mantis_project_table.id, mantis_project_table.name"
        laRequete = laRequete & " FROM mantis_project_table"
        laRequete = laRequete & " ORDER BY mantis_project_table.name"
        Set requeteProjets = New ADODB.Recordset
        Set cmdProjets = New ADODB.Command
        cmdProjets.CommandText = laRequete
        cmdProjets.ActiveConnection = objetConnexion
        Set requeteProjets = cmdProjets.Execute
        'requeteProjets.Open cmdRequete, objetConnexion
        requeteProjets.MoveFirst
        cmbListProjets.Clear
        While Not (requeteProjets.EOF)
            cmbListProjets.AddItem requeteProjets("name") & " ( " & requeteProjets("id") & " ) "
            requeteProjets.MoveNext
        Wend
        requeteProjets.Close
        'objetConnexion.Close
    End Sub
    Private Sub genereJournal()
        'Page de garde
        ProceduresDiv.genereGarde
     
     
        'Partie 1 : Journal
        '----> Liste des bugs
        Dim lesBugs() As String
        Dim nb As Integer
        laRequete = ""
        laRequete = laRequete & "SELECT * FROM mantis_bug_table"
        laRequete = laRequete & " WHERE project_id = "
     
     
     
        '----> Détail pour chaque bug
     
     
     
        'Partie 2 : synthèse
     
     
     
     
        'Partie 3 : Graphique
     
     
     
        'Sommaire
     
     
     
     
    End Sub
     
    Private Sub Worksheet_Deactivate()
        'objetConnexion.Close
    End Sub

    Voila ^^

    Avez vous une idée?

    Merci beaucoup d'avance

    @++

  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 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,
    et en passant par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    laRequete = "SELECT COUNT(*) FROM ("
            laRequete = laRequete & "SELECT * FROM mantis_bug_table"
            laRequete = laRequete & " WHERE project_id = " & ProceduresDiv.idProjet & ")"
    par exemple.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 80
    Par défaut
    Ayé j'ai trouvé ^^
    En fait je me suis renseignée sur les curseurs (je ne connaissais pas ^^) et j'ai trouvé la propriété "location" que j'ai mise du coté client.
    Et en plus comme un boulet j'avais oublié le .next (d'ou la doit disant boucle infinie :p)

    Voila mon code final pour info

    et merci encore

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    Dim WithEvents objetConnexion       As ADODB.Connection
    Dim WithEvents requeteBugs          As ADODB.Recordset
    Dim requeteProjets                  As ADODB.Recordset
    Dim cmdProjets                      As ADODB.Command
    Dim cmdBugs                         As ADODB.Command
    Dim nb                              As Integer
    Dim decomposeIdProjet()             As String
    Private Sub Image1_Click()
        ProceduresDiv.OuvrirAide ("journal")
    End Sub
    Private Sub Image2_Click()
        Feuil1.Activate
        Feuil1.Visible = True
        cmbListProjets.Clear
        Feuil3.Visible = False
    End Sub
    Private Sub Image3_Click()
        If cmbListProjets.Value <> "" Then
     
            ProceduresDiv.titreDoc = "Journal des incidents"
     
            'Trouver l'id du projet
            decomposeIdProjet = Split(cmbListProjets.Value, "(")
            decomposeIdProjet = Split(decomposeIdProjet(1), ")")
            ProceduresDiv.idProjet = Trim(decomposeIdProjet(0))
     
            'récupérer la liste des bugs concernés
            laRequete = ""
            laRequete = laRequete & "SELECT * FROM mantis_bug_table"
            laRequete = laRequete & " WHERE project_id = " & ProceduresDiv.idProjet
            'laRequete = ""
            'laRequete = laRequete & "SELECT COUNT * FROM mantis_bug_table"
            'laRequete = laRequete & " WHERE project_id = " & ProceduresDiv.idProjet
     
     
     
            Set requeteBugs = New ADODB.Recordset
            'Set cmdBugs = New ADODB.Command
            'cmdBugs.CommandText = laRequete
            'cmdBugs.ActiveConnection = objetConnexion
            'Set requeteBugs = cmdBugs.Execute
            '-----> La ligne ci dessous donne une erreur : le pilodte odbc ne prend pas en charge cette méthode
            'requeteBugs.Open laRequete, objetConnexion, adOpenKeyset, adLockReadOnly, adCmdText
            requeteBugs.CursorLocation = adUseClient
            requeteBugs.Open laRequete, objetConnexion
     
            requeteBugs.MoveFirst
            MsgBox (requeteBugs.RecordCount)
     
            ReDim ProceduresDiv.listBugs(requeteBugs.RecordCount + 1)
            For nb = 1 To requeteBugs.RecordCount
                MsgBox (nb & "ièem bug pour le projet " & ProceduresDiv.idProjet) & " : " & requeteBugs("id")
                ProceduresDiv.listBugs(nb) = requeteBugs("id")
                requeteBugs.MoveNext
            Next
            requeteBugs.Close
     
            'création d'un nouveau fichier Excel
     
     
            'gestion affichage
            'Feuil3.Visible = False
     
     
        Else
            MsgBox ("Choisir un projet")
        End If
    End Sub
    Private Sub Worksheet_Activate()
        ' Déclarations
        'Dim requeteProjets As ADODB.Recordset
        ' Connection à la base
        ProceduresDiv.initConnectionMysql
        Set objetConnexion = New ADODB.Connection
        objetConnexion.Open chaineConnection
        ' Chargement des projets
        laRequete = ""
        laRequete = laRequete & "SELECT mantis_project_table.id, mantis_project_table.name"
        laRequete = laRequete & " FROM mantis_project_table"
        laRequete = laRequete & " ORDER BY mantis_project_table.name"
        Set requeteProjets = New ADODB.Recordset
        Set cmdProjets = New ADODB.Command
        cmdProjets.CommandText = laRequete
        cmdProjets.ActiveConnection = objetConnexion
        Set requeteProjets = cmdProjets.Execute
        'requeteProjets.Open cmdRequete, objetConnexion
        requeteProjets.MoveFirst
        cmbListProjets.Clear
        While Not (requeteProjets.EOF)
            cmbListProjets.AddItem requeteProjets("name") & " ( " & requeteProjets("id") & " ) "
            requeteProjets.MoveNext
        Wend
        requeteProjets.Close
        'objetConnexion.Close
    End Sub
    Private Sub genereJournal()
        'Page de garde
        ProceduresDiv.genereGarde
     
     
        'Partie 1 : Journal
        '----> Liste des bugs
        Dim lesBugs() As String
        Dim nb As Integer
        laRequete = ""
        laRequete = laRequete & "SELECT * FROM mantis_bug_table"
        laRequete = laRequete & " WHERE project_id = "
     
     
     
        '----> Détail pour chaque bug
     
     
     
        'Partie 2 : synthèse
     
     
     
     
        'Partie 3 : Graphique
     
     
     
        'Sommaire
     
     
     
     
    End Sub
     
    Private Sub Worksheet_Deactivate()
        'objetConnexion.Close
    End Sub

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

Discussions similaires

  1. VBA Excel 2007 - Macro Introuvable
    Par House MD dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/02/2009, 18h18
  2. [E-07] Renseigner un calendrier Outlook via VBA Excel 2007
    Par rpointt dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/11/2008, 22h28
  3. Probléme de compatibilté macro vba excel 2007 vers 2002
    Par cedric59dk dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/03/2008, 10h55
  4. Temps de réponse VBA Excel 2007
    Par Dom69 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/11/2007, 02h56
  5. VBA Excel 2007 - Insertion d'images avec Enregistreur de Macros
    Par PhilC dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/10/2007, 02h05

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