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

VBA Access Discussion :

Problème Do Until .EOF Loop [AC-2016]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Agronome
    Inscrit en
    Mars 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 31
    Par défaut Problème Do Until .EOF Loop
    Bonjour,

    J'essaie de faire une boucle qui me permette d'utiliser un recordset et d’arrêter la boucle lorsque l'on arrive à la fin des valeurs.

    Je veux utiliser un champs du recordset pour faire une sélection dans une requête du type SELECT .... WHERE Champ1 = recordset(Champ1)

    Pour débuger ma requête j'essaie de la simplifier en faisant apparaitre une valeur dans un objet de formulaire.

    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
    Private Sub Test_Click()
    Dim SQL As String
    Dim Req As Recordset
    Dim VarTest As String
     
    SQL = "SELECT [T_Client_Acces].[ID_Client], [T_Client_Acces].[ID_Segment_Client] FROM [T_Client_Acces]"
     
    Set Req = CurrentDb.OpenRecordset(SQL)
    Req.MoveFirst
     
    Do Until Req.EOF
    Req.MoveNext
    VarTest = Req("[ID_Client]")
    Lieu = VarTest
    Loop
    End Sub
    Lorsque j'applique ce code, j'obtiens bien l'affichage de la dernière valeur de ma liste dans mon objet de formulaire.
    Mais il apparait une fenêtre erreur:
    Erreur d'exécution '3021': Aucun enregistrement en cours
    le debug étant sur: VarTest = Req("[ID_Client]")

    Par contre lorsque je rajoute dans mon code un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If VarTest = 49 Then
    Exit Do
    End If
    J'obtiens l'affichage de ma dernière valeur qui est mon enregistrement sans fenètre erreur, ou tout autre valeur que je met dans le VarTest = ...

    Étant donné que cette boucle sera utilisée dans d'autres boucles j'aurais besoin de vos conseils pour corriger cette erreur.

    J'ai aussi essayé les syntaxes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do While not Req.EOF ... loop
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do Until Req.EOF = true ... loop
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Do
    If Not Req.EOF = true Then 
    ... 
    End if
    Loop
    Qui me font tomber sur la même erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do While not Req.EOF(1) ... loop
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do Until Req.EOF(1) ... loop
    Me donne une autre erreur: erreur de compilation nombre d'arguments incorrect ou affectation de propriété incorrecte.

    Mais je ne trouve pas ou est l'erreur.

    Bien cordialement.
    Julien

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Access se place automatiquement sur le 1er enregistrement donc il fautt changer d'enregistrement apres avoir traite celui courant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Do Until Req.EOF
       VarTest = Req("[ID_Client]")
       Lieu = VarTest
       Req.MoveNext
    Loop
    Et personnellent je prefere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Do while not Req.EOF
       VarTest = Req("[ID_Client]")
       Lieu = VarTest
       Req.MoveNext
    Loop
    "Tant que je n'ai pas atteind la fin du recordset" je trouve plus parlant que "Jusqu'a la fin du recordset".

    Et pense a indenter ton code, cela le rend plus lisible.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Re-bonjour.

    Je veux utiliser un champs du recordset pour faire une sélection dans une requête du type SELECT .... WHERE Champ1 = recordset(Champ1)
    Il est generalement plus efficace d'utiliser une requete SQL plutot qu'un parcours d'enregistrement un a un en VBA, surtout si tu as beaucoup d'enregistrements.
    Donc tu peux eventuellement regarder vers les requetes parametrees, l'utilisation de jointure ou/et la creation dynamique de SQL.
    VBA peut tout de meme etre une tres bonne solution.
    Cela depend du contexte.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Re-Re-Bonjour.

    Pour débuger ma requête j'essaie de la simplifier en faisant apparaitre une valeur dans un objet de formulaire.
    Tu es mieu d'utiliser au choix :
    1. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Debug.Print Req("[ID_Client]")
      Qui va t'afficher le resultat dans la fenetre d'execution immediate ([ctrl][g] pour l'afficher si elle n'est pas la).
    2. Le parcours pas a pas
      1. Tu cliques dans la marge a gauche de ton code.
      2. Access affiche un gros point rond, c'est le point d'arret.
      3. Tu executes ton code.
      4. Access s'arrette sur le point d'arret.
      5. Pour avancer dans l'execution tu appuis sur [f8].
      6. Tu peux voir la valeur d'une variable ou d'un champ en pointant dessus avec la souris.
    3. L'editeur de requetes.
      1. Tu recopies le SQL dans l'editeur dans une
      2. Tu crees une nouvelle requete a laquelle tu n'ajoutes aucune table.
      3. Tu changes l'affichage pour SQL (en haut a gauche)
      4. Tu colles le SQl.
      5. Tu rebascules en mode conception.
      6. Tu demandes l'affichage du resultat.


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre averti
    Homme Profil pro
    Agronome
    Inscrit en
    Mars 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 31
    Par défaut
    Bonjour Marot,

    Un grand merci pour ton aide c'est toujours magique comme tout marche bien quand on applique des conseils bien donnés

    Par curiosité, est-ce possible de faire une boucles en SQL?

    Très cordialement
    Julien

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Par curiosité, est-ce possible de faire une boucles en SQL?
    Certains SQL le permettent mais pas celui d'Access.
    SQL est un langage "descriptive" et non procedural.
    Donc tu dis a la BD ce que tu veux faire et elle s'arrange pour le realiser.

    On peut "simuler" un boucle en utilisant une jointure sur une table qui contient N elements.
    Par exemple, il m'arrive d'avoir besoin des 12 mois de l'annee pour presenter des statistiques mais que dans mes donnees je n'ai que quelque mois.
    J'ai donc un table qui contient 12 enregistrements et je fais une jointure avec mes stats mensuelles pour avoir quand meme 12 mois donc j'ai une sorte de boucle de 1 a 12.
    Sorti de cas assez simples c'est souvent plus de complication qu'une boucle en VBA et une table temporaire mais ca peut etre pratique.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

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

Discussions similaires

  1. Boucle while until EOF et .csv : problème
    Par Karshick dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 01/10/2014, 17h49
  2. [Débutant] Problème boucle Do Until Action Loop
    Par VBLB35 dans le forum VB.NET
    Réponses: 8
    Dernier message: 02/08/2013, 12h04
  3. Problème avec boucle for/loop.
    Par Reivilo35 dans le forum PL/SQL
    Réponses: 4
    Dernier message: 11/01/2011, 09h01
  4. Nouveau problème à la boucle "Do-Loop Until"
    Par My_DiDi dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 29/05/2009, 14h47
  5. Problème avec mount -o loop
    Par Captain_futur dans le forum Administration système
    Réponses: 2
    Dernier message: 25/10/2006, 07h41

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