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 Do While [AC-2003]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 660
    Par défaut Boucle Do While
    Bonjour,

    Je voudrais mettre à jour mes enregistrements à partir d’une table
    que j’ai importée, mais je n’arrive pas à faire fonctionner cette boucle
    qui lorsqu’elle arrive à FindFirst passe à la fin du code.

    Ou se situe mon erreur ?

    Merci pour votre aide.

    Salutations

    '
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    --- Intérogation de la tbl adhérents
         rq = "select * From [tbl Adhérents]"
         Set rs = db.OpenRecordset(rq, dbOpenDynaset)
     
     
    '--- Intérogation de la tbl adhérents 1
         rq = "select * From [tbl Adhérents 1] WHERE ((([tbl Adhérents 1].Saison)=2010));"
         Set rs1 = db.OpenRecordset(rq, dbOpenDynaset)
     
     
          If rs.EOF Then blnCibleVide = True Else blnCibleVide = False
     
    '--- Boucle sur la table rs1
         Do While Not rs1.EOF
     
    '--- Rechercher si le numéro de licence existe
          If blnCibleVide Then
             blnExistePas = True
          Else
             rs.FindFirst "[NuméroLicence]=" & Left(rs1![Numero], 7)
             blnExistePas = rs.NoMatch
          End If
     
    '--- Pas de numéro de licence trouvé, crée l'enregistrement
          If blnExistePas Then
             rs.AddNew
             rs("NuméroLicence") = rs1("Numero")
             rs("DateNaissance") = rs1("Date de naissance")
             blnCibleVide = False
          Else
     '--- Existe on met à jour
             rs.Edit
          End If
     
     '--- Ajout/Mise à jour des autres champs
          rs("Nom") = rs1("Nom")
          rs("Prénom") = rs1("Prenom")
          rs("Civilité") = rs1("Genre")
          rs("Adresse") = rs1("Adresse")
          rs("Ville") = rs1("Ville")
          rs("CP") = rs1("Code postal")
          rs.Update
      Loop

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
         Else
     '--- Existe on met à jour
             rs.Edit
          End If

    peut être le rs.edit ne fait il pas partie du if ?

  3. #3
    Membre éprouvé Avatar de GillesDeVuif
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 88
    Par défaut
    rq = "select * From [tbl Adhérents 1] WHERE ((([tbl Adhérents 1].Saison)=2010));"
    Bonjour.
    Est-ce que la requête ci-dessus renvoie des résultats (si 2010 est une valeur, et non le nom d'une variable, peut-être manque-t-il les quotes) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rq = "select * From [tbl Adhérents 1] WHERE ((([tbl Adhérents 1].Saison)='2010'));"
    Cordialement.

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 155
    Par défaut
    Bonjour,

    Quelque chose manque dans ta boucle :
    à mettre avant le Loop

    Ecrite comme tu l'as fait, ta boucle reste bloquée sur le premier enregistrement de rs1

  5. #5
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 186
    Par défaut
    Sinon, en 2 requètes ensemblistes (un update, un insert), on doit pouvoir faire la même chose.
    [Access] Les bases du débogage => ici

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 660
    Par défaut
    Bonsoir,

    Merci pour vos réponses.

    La rq renvoie bien des enregistrements.

    En effet le rs1.MoveNext manquait bien, mais ma boucle ne fonctionne toujours pas.

    Est-ce que des types de champs différents dans chaque table peuvent provoquer le problème, (le champ [NuméroLicence] et [Numero] et de type
    texte).

    Salutations

  7. #7
    Membre éprouvé Avatar de GillesDeVuif
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 88
    Par défaut
    Bonjour,
    peut-être comme ça :

    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
    rs1.MoveFirst
     
    '--- Boucle sur la table rs1
        While Not rs1.EOF
            StrNum = "[NuméroLicence]=" & Left(rs1("Numero"), 7)
            With rs
            .FindFirst StrNum
                If .NoMatch Then
                    .AddNew
                    !NuméroLicence = rs1("Numero")
                    !DateNaissance = rs1("Date de naissance")
                    .Update
                Else
                    .Edit
                    !Nom = rs1("Nom")
                    !Prénom = rs1("Prenom")
                    !Civilité = rs1("Genre")
                    !Adresse = rs1("Adresse")
                    !Ville = rs1("Ville")
                    !CP = rs1("Code postal")
                    .Update
                End If
            End With
        rs1.MoveNext
        Wend
    Cordialement.

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

Discussions similaires

  1. Boucle Do ..while
    Par parp1 dans le forum Général Python
    Réponses: 2
    Dernier message: 11/06/2006, 13h32
  2. Réponses: 13
    Dernier message: 20/03/2006, 16h26
  3. [VBA] Boucle Do While
    Par jmde dans le forum Access
    Réponses: 4
    Dernier message: 16/10/2005, 20h23
  4. probleme de recordset dans une boucle do while
    Par Shoryu dans le forum ASP
    Réponses: 18
    Dernier message: 05/07/2004, 15h30
  5. Appel recurssif et boucle Do...While
    Par zsoh dans le forum Langage
    Réponses: 6
    Dernier message: 31/05/2004, 18h01

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