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 :

Aucun enregistrement en cours en fin de boucle [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 69
    Points : 60
    Points
    60
    Par défaut Aucun enregistrement en cours en fin de boucle
    Bonjour,

    Je cherche à coder une petite sub qui a l'air de fonctionner sauf quand je vais chercher la dernière ligne de ma requête, où là on me dit aucun enregistrement en cours.

    J'ai fait plusieurs essais et rien ne marche, je vous montre une partie de mon code:

    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
    Set Req_Agence = Db.QueryDefs("ZZ_RATIO_R_V")
    Set rec_Agence = Req_Agence.OpenRecordset
     
    Do While Not rec_Agence.EOF
     
    Id_Agence_tmp = rec_Agence.Fields("id_Point")
     
        Do While (Not (rec_Agence.Fields("id_Point") = Null)) Or (rec_Agence.Fields("id_Point") = Id_Agence_tmp)
            If rec_Agence.Fields("id_Type") = 1 Then
             Conditions
            End If
        rec_Agence.MoveNext
        Loop
     
     If Not rec_Agence.EOF Then
    Conditions qui utilisent les résultats de la boucle précédente
        End If
     
      Loop
    Donc le bug apparait en particulier dans cette boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Do While Not rec_Agence.EOF
     
    Id_Agence_tmp = rec_Agence.Fields("id_Point")
     
        Do While (Not (rec_Agence.Fields("id_Point") = Null)) Or (rec_Agence.Fields("id_Point") = Id_Agence_tmp)
            If rec_Agence.Fields("id_Type") = 1 Then
             Conditions
            End If
        rec_Agence.MoveNext
        Loop
    Lors du dernier enregistrement et je ne vois pas comment contourner ce problème.

    Si vous aviez une méthode je vous serez très reconnaissant.

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 917
    Points
    281 917
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        Do While (Not (rec_Agence.Fields("id_Point") = Null)) Or (rec_Agence.Fields("id_Point") = Id_Agence_tmp)
            If rec_Agence.Fields("id_Type") = 1 Then
             Conditions
            End If
        rec_Agence.MoveNext
        Loop
    Avec une telle syntaxe, la boucle va s'arrêter lors que ta condition sera rencontrée... mais, si cette condition n'est pas satisfaite dans un enregistrement de ton fichier, tu finiras par dépasser l'EOF : c'est ce qui t'arrive !

    Donc tu dois modifier la logique de ton processus en le limitant à l'EOF.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 69
    Points : 60
    Points
    60
    Par défaut
    Ok merci, c'est un peu ce que je craignais mais il y a quelque chose qui m'échappe pourquoi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Do While (Not (rec_Agence.EOF)) And (rec_Agence.Fields("id_Point") = Id_Agence_tmp)
            If rec_Agence.Fields("id_Type") = 1 Then
             Conditions
            End If
        rec_Agence.MoveNext
        Loop
    Ne passe pas non plus, car c'est vrai, on est à la fin du fichier et il n'y a plus d'enregistrements mais à part ça puisque je sors de la condition dans ce cas là, je ne vois pas pourquoi ça passe pas.

  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 652
    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 652
    Points : 34 355
    Points
    34 355
    Par défaut
    Salut,

    il faut faire attention entre ton utilisation du EOF et les tests dessus.

    Je recommanderai un découpage en étapes :
    - boucle do while / do Until
    - test interne
    Transformant ton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Do While (Not (rec_Agence.EOF)) And (rec_Agence.Fields("id_Point") = Id_Agence_tmp)
            If rec_Agence.Fields("id_Type") = 1 Then
             Conditions
            End If
        rec_Agence.MoveNext
        Loop
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Do While Not (rec_Agence.EOF)
            If rec_Agence.Fields("id_Point") = Id_Agence_tmp Then 
                Exit Do
            Else
     
                 If rec_Agence.Fields("id_Type") = 1 Then
                      Conditions
                 End If
            End If
        rec_Agence.MoveNext
        Loop

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 69
    Points : 60
    Points
    60
    Par défaut
    Merci pour vos réponses, j'ai testé ton code jpcheck et ça n'allait pas car mon code en réalité est un peu plus complexe que ça. Mais merci, il m'est quand même utile pour d'autres raisons.

    J'ai décidé de modifier mon code en enregistrant dans des tableaux tout les résultats intermédiaires, le code est plus lourd mais cela marche bien.

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

Discussions similaires

  1. Aucun Enregistrement En Cours
    Par Kalvin_20 dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/05/2008, 09h25
  2. aucun enregistrement en cour
    Par Nacera dans le forum VBA Access
    Réponses: 0
    Dernier message: 29/04/2008, 16h31
  3. Erreur " 3021 Aucun enregistrement en cours"
    Par Secco dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 22/04/2008, 14h46
  4. Aucun enregistrement en cours
    Par gentoo dans le forum Access
    Réponses: 4
    Dernier message: 18/03/2007, 14h48
  5. Recordset Fields aucun enregistrement en cours
    Par Mariboo dans le forum Access
    Réponses: 2
    Dernier message: 24/05/2006, 10h23

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