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

Access Discussion :

For each enregistrement d'une table, instructions


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Points : 22
    Points
    22
    Par défaut For each enregistrement d'une table, instructions
    Bonjour,

    Voila mon problème.
    J’ai trois tables :

    T1 qui contient des personnes avec le temps de présence théorique du lundi, Mardi etc (variable chaque jour)
    T2 qui contient une liste de mois/an avec le nb de lundi, mardi etc…
    RQ1 calcule pour un mois donné, le temps de présence de chaque individu (Temps-lundi x nombreLundi etc…)
    Les résultats de RQ1 s’inscrive dans T3

    Avec un formulaire, je sélectionne un mois et un idividu. Un code VBA sur clic-bouton lance RQ1 et enregistre les résultats dans T3 (MaTable.addnew avec MaTable!var1 = f !var1 etc…)

    1 - Je voudrais, chaque fois que je crée un nouveau mois, que les résultats de tous les individus pour ce mois-là s’inscrive dans T3 :

    J’ai essayé avec (principe général) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For each individu from T1
    lancer RQ1
    MaTable.addnew
    next
    Mais, je n’arrive pas à incrémenter la boucle « For each next » ou « For next ». Ma base est répliquée et mes numAuto de tables ne sont pas incrémentable avec un pas régulier.
    Par ailleurs "MaTable!var1 = f !var1" ne marche que pour un seul individu.

    Est-ce que quelqu’un a une idée pour réaliser cette boucle qui m’éviterait de faire 100 fois la manip du formulaire chaque mois (mon formulaire ne comprendrait plus que le choix du mois/an et le clic-bouton ajouterais à T3 les données de tous les individus pour ce mois-là).

    Merci

    Philippe

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    de prime abord, For Each est utilisé avec les Collections ...

    Pour dérouler une table, on utilise un Recordset

    Plus d'aide sur les recordsets : http://access.developpez.com/faq/?rechercher=recordset

    Mais dans ton cas, peut-être qu'une simple requête avec jointure entre T1 et T2 pourrait suffire ...

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Points : 22
    Points
    22
    Par défaut
    Merci Caféine de ta réponse rapide.

    Je vais voir du côté des recordset, mais je vois pas bien le truc.
    Pour la requête avec jointure, j'ai le problème de devoir sauvegarder les données. Le programme quotidien (T1) peut varier pour un individu. Si je n'ai pas garder les résultats des mois précédents, ça va me changer tous les résultats antérieurs avec le nouveau planing.
    Je voudrais donc entrer les données dans T3.

    Si tu pouvais me démarrer le truc du recordset pour ajouter les enregistrements dans T3, ça serait chouette. Je sais pa trop comment commencer.

    Merci

    Philippe

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Ta problématique est de sauvegarder dans une table. C'est tout à fait possible avec une requête création de table, en SQL avec une clause INTO ...

    Pour les recordsets, tu peux regarder dans la FAQ un code proche de ce que tu veux faire : http://access.developpez.com/faq/?pa...fDataTransfert

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Points : 22
    Points
    22
    Par défaut
    Merci Caféine

    J'ai finalement trouvé une solution pas très orthodoxe mais qui marche (la requête création de table marche pour la 1ère fois, mais après, il faut la mettre à jour).
    Ma solution peu orthodoxe :
    1 - je crée une requête ajout avec les deux tables T1 et T2 en y mettant les 2 numeroauto, mais sans lier les tables : ça me crée un jeu d'enregistrements comprenant toutes les combinaisons de numauto1 avec numauto2 (tous les mois pour tous les individus). J'y ajoute mes variables calculées avec les variables des deux tables (duréeLundi*nombreLundi etc.. duréeTotaleMois)

    2 - dans T3, j'interdis les doublons du couple numauto1-numauto2, pour que les ajouts futurs ne rajoutent pas les combinaisons déjà entrées

    3 - dans mon formulaire "Nouveau mois" qui crée un nouveau mois dans T2, j'ajoute sur le bouton FERMER en code VBA sur clic, une runMacro "Actualiser" suivie d'une exécution de la requête ajout (je supprime temporairement les boîtes de messages).

    C'est pas très élégant, mais ça répond à mon problème et je peux continuer à developper mon programme.

    Merci de ton aide. Je vais quand même essayé ta solution, histoire d'apprendre quelque chose qui me simplifieras la vie la prochaine fois.

    Philippe

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/05/2013, 22h40
  2. for each element d'une table
    Par jm_force dans le forum Access
    Réponses: 5
    Dernier message: 17/08/2006, 10h30
  3. [DB] Nombre d'enregistrements d'une table
    Par Mister Nono dans le forum Bases de données
    Réponses: 26
    Dernier message: 09/05/2006, 09h51
  4. Réponses: 10
    Dernier message: 01/08/2003, 13h45
  5. Trouver le dernier enregistrement d'une table
    Par remi59 dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/03/2003, 14h54

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