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 29/06/2009, 17h24   #1
Futur Membre du Club
 
Inscription : mai 2006
Messages : 73
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : mai 2006
Messages : 73
Points : 17
Points : 17
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 :
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

@++
ndsaerith est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 16h27   #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
Bonjour,
une piste issue des cours :
http://vb.developpez.com/bidou/recor...xputil#LVIII-B
__________________
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, 11h15   #3
Futur Membre du Club
 
Inscription : mai 2006
Messages : 73
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : mai 2006
Messages : 73
Points : 17
Points : 17
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 :
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

@++
ndsaerith est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2009, 11h47   #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
salut,
et en passant par un
Code :
1
2
3
laRequete = "SELECT COUNT(*) FROM ("
        laRequete = laRequete & "SELECT * FROM mantis_bug_table"
        laRequete = laRequete & " WHERE project_id = " & ProceduresDiv.idProjet & ")"
par exemple.
__________________
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, 12h13   #5
Futur Membre du Club
 
Inscription : mai 2006
Messages : 73
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : mai 2006
Messages : 73
Points : 17
Points : 17
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 :
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
ndsaerith 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 13h18.


 
 
 
 
Partenaires

Hébergement Web