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 :

boucle while - passe deux fois dans la boucle.


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 27
    Points : 21
    Points
    21
    Par défaut boucle while - passe deux fois dans la boucle.
    Bonjour à tous.

    J'ai un souci avec deux boucle.


    Enfaite quand je passe dans la boucle du rst, il m'affiche tous ses enregistrement ainsi que ceux qui sont lié aux rst1, donc par exemple.
    Enreg rst N°1
    Enreg rst N°2
    Enreg rst N°3
    Enreg rst1 N°1

    Puis quand il n'a pu rien à afficher il passe, le rst1 à l'enregistrement suivant, sauf qu'il me ré-affiche ceux du rst, et je voudrais qu'enfaite il m'affiche ceux du rst une seul fois. en gros, pas de doublon !

    Pas facile de m'expliquer, j'avoue que j'ai du mal sur ce coup là

    Voici le 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
        ' Ouverture de la base de données
        Set db = DBEngine.OpenDatabase(MaBase)
         SQL = "Select IDPlageAgeCategorie, PACDebut, PACFin From tblPlageAgeCategorie Where PACDebut<=" & AgeCat & " and PACFin>=" & AgeCat & ""
        'Ouverture du recordset
        Set rst1 = db.OpenRecordset(SQL, dbOpenForwardOnly, dbReadOnly)
     
    While Not (rst1.EOF)
        IDPAC = rst1.Fields(0)
        strPACDebut = rst1.Fields(1)
        strPACFin = rst1.Fields(2)
     
     
            'MsgBox ("Bienvenue")
            MaPlageTest = 5
     
                ' Ouverture de la base de données
                Set db = DBEngine.OpenDatabase(MaBase)
            sSQL = "SELECT DISTINCT TypeControle, PlageAge, min(Frequence) FROM(SELECT tblSubitSpecifiquement.num_tblPlageAgeCategorie As PlageAge, tblSubitSpecifiquement.num_tblTypeControle As TypeControle, tblSubitSpecifiquement.FrequenceSpecifique As Frequence FROM ((tblCatRisque INNER JOIN tblPlageAgeCategorie ON tblCatRisque.IDCatRisque = tblPlageAgeCategorie.num_tblCatRisque) INNER JOIN tblRegroupe ON tblCatRisque.IDCatRisque = tblRegroupe.num_tblCatRisque) INNER JOIN tblSubitSpecifiquement ON tblPlageAgeCategorie.IDPlageAgeCategorie = tblSubitSpecifiquement.num_tblPlageAgeCategorie WHERE tblRegroupe.num_tblEmploye=18678 and tblSubitSpecifiquement.num_tblPlageAgeCategorie = " & IDPAC & " UNION  Select num_tblPlageAge As PlageAge, num_tblTypeControle As TypeControle, FrequenceNormale As Frequence FROM tblSubitNormalement WHERE num_tblPlageAge=" & MaPlageTest & ") GROUP BY TypeControle, PlageAge, Frequence"
                ' Ouverture du recordset
                 Set rst = db.OpenRecordset(sSQL, dbOpenForwardOnly, dbReadOnly)
     
                        While Not rst.EOF
                            strMessage = rst.Fields(1) & vbCr & rst.Fields(0) & vbCr & rst.Fields(2)
                            MsgBox (strMessage)
                            If rst.EOF Then
                                rst1.MoveNext
                            Else
                                rst.MoveNext
                            End If
                        Wend
     
    rst1.MoveNext
    Wend
    Merci d'avance à ceux qui prendront le temps de me lire, puis de me répondre si ils ont une éventuelle solution

  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 642
    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 642
    Points : 34 356
    Points
    34 356
    Par défaut
    salut,
    tu fais 2 fois un rst1.Movenext dans ton code, dans le cas où rst.EOF est vrai...
    est-ce voulu ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par jpcheck Voir le message
    salut,
    tu fais 2 fois un rst1.Movenext dans ton code, dans le cas où rst.EOF est vrai...
    est-ce voulu ?
    Je m'étais complètement planté sur la façon de faire.

    J'avais mal analyser la chose ! maintenant tous va pour le mieux, j'ai fais ma requête à l'aide de l'assistant et pi vouala

    Enfaite comme j'avais utiliser les inner join, je n'avais pas besoin de parcourir le rst1... Et c'est ça qui faisait que ça fonctionnait très mal

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

Discussions similaires

  1. Styliser un élément sur deux dans une boucle while
    Par skywhi dans le forum Langage
    Réponses: 6
    Dernier message: 12/12/2013, 13h59
  2. [MySQL] Passer deux fois dans une boucle
    Par Henry9 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/07/2007, 16h40
  3. [FLASH MX2004] Deux conditions dans une boucle
    Par pierrot10 dans le forum Flash
    Réponses: 1
    Dernier message: 06/11/2005, 16h31
  4. Réponses: 6
    Dernier message: 17/06/2005, 16h51
  5. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51

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