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 :

[DAO] Instruction For Each .. Next


Sujet :

VBA Access

  1. #1
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut [DAO] Instruction For Each .. Next
    Bonjour !

    Mon souci est le suivant :

    Pour chaque enregistrement d'une table T_Questionnaire,
    Si le champ Colsivom = Oui Alors
    j'insère les valeurs qui vont bien

    J'imagine qu'il faut utiliser For Each ... Next et If ... Then ... Else, mais je ne sais pas comment traduire "enregistrement de la table"

    Quelqu'un peut-il m'aider ?

  2. #2
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    Petite précision, j'insère les valeurs dans une autre table T_Synthèse

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Pour parcourir les enregistrements de ta table, va voir ce tuto sur DAO.

    Starec

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    J'utiliserais un While Not Recordset.EOF

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim rs as DAO.Recorset
    Dim db as DAO.Database
     
    set db = CurrentDB
    set rs = db.openrecordset("matable", dbopentable)
     
    while not rs.EOF
        If ......
    Wend

  5. #5
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    voici le code utilisé :

    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
     
    Dim rst As Recordset
    Dim rst2 As Recordset
    Dim strsql As String
     
     
    'efface la table T_synthèse
    DoCmd.SetWarnings False
    strsql = "delete T_synthèse.*"
    strsql = strsql + " from T_synthèse;"
    DoCmd.RunSQL strsql
     
    'rempli la table T_synthèse
    Set rst = CurrentDb.OpenRecordset("T_synthèse")
    Set rst2 = CurrentDb.OpenRecordset("T_questionnaire")
     
    While Not rst2.EOF
        If rst2.Fields(44) = -1 Then
     
    rst.AddNew
    rst.Fields(0) = Me.n°SIRET
    rst.Fields(1) = Me.nom_entr
    rst.Fields(2) = Me.annee
     
    rst.Fields(3) = Me.Nb_cont_papiers_80
    rst.Fields(4) = Me.nb_cont_papiers_120
    rst.Fields(5) = Me.nb_cont_papiers_180
    rst.Fields(6) = Me.nb_cont_papiers_240
    rst.Fields(7) = Me.nb_cont_papiers_340
     
    rst.Update
     
        End If
    Wend
     
    rst.Close
    rst2.Close
    Set rst = Nothing
    Set rst2 = Nothing
    DoCmd.SetWarnings True
    T_Synthèse est bien effacée, mais je me retrouve avec une boucle infinie qui m'insère les valeurs correspondant au premier enregistrement de T_Questionnaire : j'en étais à 8786 fois le même enregistrement qd j'ai arrêter la procédure !

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    Il faut que tu mettes un

    avant ton Wend, sinon tu resteras toujours sur le même enregistrement.

    Starec

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Points : 520
    Points
    520
    Par défaut
    Bonjour,
    Tu as oublié de donner l'ordre d'avancer dans le recordset.


  8. #8
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    C'est normal, tu ouvreun recordset et tu parcoures toujours le même enregistrement.

    Il faut que tu mettes un rs.movenext.
    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
     
    Dim rst As Recordset
    Dim rst2 As Recordset
    Dim strsql As String
     
     
    'efface la table T_synthèse
    DoCmd.SetWarnings False
    strsql = "delete T_synthèse.*"
    strsql = strsql + " from T_synthèse;"
    DoCmd.RunSQL strsql
     
    'rempli la table T_synthèse
    Set rst = CurrentDb.OpenRecordset("T_synthèse")
    Set rst2 = CurrentDb.OpenRecordset("T_questionnaire")
     
    While Not rst2.EOF
        If rst2.Fields(44) = -1 Then
     
    rst.AddNew
    rst.Fields(0) = Me.n°SIRET
    rst.Fields(1) = Me.nom_entr
    rst.Fields(2) = Me.annee
     
    rst.Fields(3) = Me.Nb_cont_papiers_80
    rst.Fields(4) = Me.nb_cont_papiers_120
    rst.Fields(5) = Me.nb_cont_papiers_180
    rst.Fields(6) = Me.nb_cont_papiers_240
    rst.Fields(7) = Me.nb_cont_papiers_340
     
    rst.Update
     
        End If
    rst2.movenext
    Wend
     
    rst.Close
    rst2.Close
    Set rst = Nothing
    Set rst2 = Nothing
    DoCmd.SetWarnings True

  9. #9
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    Merci à tous !

  10. #10
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Points : 504
    Points
    504
    Par défaut
    ahah, 4 réponses à la même minutes.

    Perso, je pense que tu devrais mettre un rs.MoveNext

  11. #11
    Faw
    Faw est déconnecté
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    1 169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 169
    Points : 1 383
    Points
    1 383
    Par défaut
    Herman, tu sors!!!!!

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

Discussions similaires

  1. Instruction For Each
    Par marsupilami34 dans le forum VBA Access
    Réponses: 4
    Dernier message: 15/01/2008, 16h32
  2. [Excel-VBA] For Each..Next
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/09/2006, 17h23
  3. [VBA-E]PB sur une boucle for each next
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/07/2006, 15h47
  4. Aide pour For each..... Next
    Par Virgile59 dans le forum Access
    Réponses: 1
    Dernier message: 24/05/2006, 14h34

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