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 19/01/2012, 20h50   #1
Futur Membre du Club
 
Inscription : juin 2007
Messages : 68
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 68
Points : 18
Points : 18
Par défaut MoveNext ne fonctionne pas !

Bonsoir à tous,
je suis en train de faire des tests pour utiliser MySQL depuis Excel en VBA
Pour afficher les enregistrements de ma BD (j'en ai mis 5 pour le test):

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
 
Public bd As New ADODB.Connection
Public enr As New ADODB.Recordset
 
 
 
Sub chargement()
 
chaine = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;DATABASE=connexion_excel;USER='root';PASSWORD='';OPTION=3;"
bd.Open chaine
 
enr.activeConnection = bd
 
li = 16
col = 5
For x = 1 To 5
On Error Resume Next
  With enr
    .Close
    On Error GoTo 0
    .CursorLocation = adUseServer
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
 
     .Open "SELECT * FROM table_test"
  End With
 
Cells(li + x, 5) = enr("id")
Cells(li + x, 6) = enr("nom")
Cells(li + x, 7) = enr("prenom")
Cells(li + x, 8) = enr("DN")
Cells(li + x, 9) = enr("commentaire")
 
 
enr.MoveNext
Next
 
bd.Close
 
End Sub
Sauf que le résultat n'est pas OK: ça m'affiche 5 fois de suite le 1er enregistrement !

Ou est l'erreur ?

Merci d'avance pour votre aide.

Philippe
filtep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 11h09   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Tu devrais tester EOF, non ?
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 13h56   #3
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
C'est surtout qu'il ne faut pas inclure la requête dans la boucle ! Tu la fais une fois et ensuite tu boucles sur les enregistrements.
Et comme dis Daniel, mieux faire un While en testant EOF, plutôt que penser connaitre à l'avance le nombre d'enregistrements.

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
Sub chargement()
 
chaine = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;DATABASE=connexion_excel;USER='root';PASSWORD='';OPTION=3;"
bd.Open chaine
 
enr.activeConnection = bd
 
li = 16
col = 5
 
On Error Resume Next
  With enr
    .Close
    On Error GoTo 0
    .CursorLocation = adUseServer
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
 
     .Open "SELECT * FROM table_test"
  End With
Do While Not enr.EOF
Cells(li, 5) = enr("id")
Cells(li, 6) = enr("nom")
Cells(li, 7) = enr("prenom")
Cells(li, 8) = enr("DN")
Cells(li, 9) = enr("commentaire")
 
li = li + 1
enr.MoveNext
Loop
 
bd.Close
 
End Sub
là je ne l'ai pas fait, mais pense à déclarer tes variables !
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 15h17   #4
Futur Membre du Club
 
Inscription : juin 2007
Messages : 68
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 68
Points : 18
Points : 18
Merci beaucoup pour ces réponses,
ma BD est sur mon PC perso à la maison, là je suis au W
Je teste dès ce soir.

Merci de m'avoir carrément écrit le code

A+
Philippe
filtep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 22h11   #5
Futur Membre du Club
 
Inscription : juin 2007
Messages : 68
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 68
Points : 18
Points : 18
J'ai donc testé, ça marche au poil (je n'en doutais pas 1 seconde !)

Merci encore

A+
Philippe
filtep 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 +2. Il est actuellement 02h46.


 
 
 
 
Partenaires

Hébergement Web