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 :

Création d'une boucle dans une boucle


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Avril 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 35
    Points : 6
    Points
    6
    Par défaut Création d'une boucle dans une boucle
    Bonjour,
    je bloque sur une partie de mon programme.
    Je voudrai faire une boucle dans une zone de liste (Personne du cour).
    Je m'explique:
    J'ai une base de donnée de client et je choisi le ou les clients que je veux pour les mettre dans cette zone de liste.
    Depuis cette zone de liste j'aimerai en un clic remplir une table (TCour) ou je retrouve un client par ligne.

    comment faire ?
    voici un petit bout de mon code
    sa fonctionne jusqu'au (for i)

    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
    Dim SQL As String
    Dim i As Long
    Dim itm As Variant, retval
     
    DoCmd.SetWarnings False                                                         'Désactivation des messages access
     
    '                                   'Sélectionne toute la liste "Personneducour"
     
     
    With Personnesducour                                                            'boucle de la liste
     
     
     
     
        For Each itm In .ItemsSelected
     
    SQL = " "                                                                       'Création du code SQL
     
     
            SQL = "INSERT INTO TCours Values"
            SQL = SQL & " (" & Me.Personnesducour.Column(0) & " ,"                  'TCours colonne 'ClientId'
            SQL = SQL & " '" & ChaineOdbc(Me.Personnesducour.Column(1)) & "' ,"     'TCours colonne 'Personnesducour'
            SQL = SQL & " '" & Me.EmployeId.Column(1) & "' ,"                       'TCours colonne 'EmployeId'
            SQL = SQL & " #" & Me.Moment_du_cour & "# ,"                            'TCours colonne 'Date du cour'
            SQL = SQL & " " & Me.Coupons & " )"                                     'TCours colonne 'Coupons'
     
    DoCmd.RunSQL (SQL)                                                              'Lancement du SQL
     
                For i = 0 To Me.Personnesducour.ListCount
                Me.Personnesducour.Selected(i) = i - 1
                Next i
     
     
        Next itm
     
         End With                                                                   'sortie de la boucle
     
    'DoCmd.SetWarnings True

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    En fait tu peux y arriver sans programmation en utilisant un formulaire et un sous-formulaire.

    Je vais supposer que tu as la structure suivante :

    tblCours
    ClefCours
    Autres infos sur le cours (ex : Titre, résumé)

    tblPersonne
    ClefPersonne
    Autres infos (ex : Nom, Prenom)

    tblCoursPersonne
    ClefCoursPersonne
    ClefCours
    ClefPersonne
    DateCours

    Ensuite tu crées un formulaire sur tblCours.
    Tu y ajoutes un sous-formulaire basé sur tblCoursPersonne.
    Et dans ce sous-formulaire tu définis une liste déroulante basée sur tblPersone.
    Comme cela tu pourras ajouter tes personnes une à une au cours qu'elles vont suivre.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Avril 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 35
    Points : 6
    Points
    6
    Par défaut
    Merci pour votre proposition, mais je ne pense pas que ce que vous me proposer aie pour mon programme, a moins que je me trompe je début sur access.

    Dans les renseignements des personnes il y a une date, une abréviation et des points.
    Ce que j'aimerai faire en partant de cette table (TCour) c'est que ca classe tout seul par personne les infos annexes dans leur fiche personnel qui est déjà créer.

    si vous voulez voir mon programme je peux le mettre en pièce jointe, mais en privé.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Ce que j'aimerai faire en partant de cette table (TCour) c'est que ca classe tout seul par personne les infos annexes dans leur fiche personnel qui est déjà créer.
    De ce que j'ai compris tu as des cours et des personnes.
    Et tu souhaites seulement associer les cours aux personnes donc les informations complémentaires sur les personnes n'entre pas en ligne de compte dans leur assignation à un cour.

    Avec la solution que j'ai en tête, tu as :

    1. Les cours
    2. Association Cour <-> Personne
    3. Les personnes
    4. Association Personne <-> Ses Informations complémentaires


    Est-ce que cela répond à ta demande ?

    Si non, peux-tu mettre un exemple de ce que tu attends ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Avril 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 35
    Points : 6
    Points
    6
    Par défaut
    exemple:
    J'ai un formulaire ou il y a deux zone de liste , une case ou on peut mettre la date, une ou on a une liste déroulante et une autre ou on peux écrire un chiffre a virgule.
    La première zone de liste a la base de donnée des personnes avec leurs ID.
    puis j'alimente la deuxième zone de liste en fonction des personnes que je choisi.
    je choisi une date puis une abréviation dans la liste déroulante et je met un chiffre.

    Ca c'est bon .

    De là, j'aimerai en un seul clic, inscrire la date, l'abréviation et le chiffre, sur chaque fiche personnel des personne mis dans la deuxième zone de liste.

    si jamais on fait comment pour que je puisse vous envoyez en privé mon programme?

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    OK, je n'avais pas compris ton besoin.

    si jamais on fait comment pour que je puisse vous envoyez en privé mon programme?
    Habituellement j'envoie mon adresse courriel perso en message privé mais je n'ai pas le temps pour cela.

    Revenons à ton problème.

    Tu as donc quelque chose comme :

    • ClefCour (Le cour concerné)
    • personnesDuCour (Liste des personnes à mettre à jour)
    • dateMAJ (date à inscrire)
    • valeurMAJ (valeur avec décimale à mettre à jour)
    • T_Cours (table qui te donnes l'association entre le cour et la personne, qui va être mise à jour)


    Ici un exemple de code qui va modifier toutes les personnes du cours et créer les personnes manquantes.

    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
    dim db as dao.database: set db=currentdb
    dim r as dao.recordset: set r=db.openrecordset("T_Cours")
    dim critere as string
     
    dim itm as variant: For Each itm In me.personnesDuCour.ItemsSelected
       critere="[ClefCours]=" & me.clefCours & " and [ClefPersonne]=" & itm 'Pour trouver la personne dans le cours
     
       call r.findfisrt(critere)
     
       if r.nomatch() then
           r.addnew 'Personne non trouvée, l'ajoute au cours
           r![ClefCour]=ClefCour
           r![ClefPersonne]=itm
           'ici mettre les lignes pour les autres infos de la personne et le cour si nécessaire
         else  
           r.edit 'La personne est trouvée
       end if
     
       r![DateMAJ]=dateMAJ
       r![ValeurMAJ]=valeurMAJ
       r.update
     
    next itm
     
    r.close:set r=nothing 'Ferme l'objet et libère la mémoire utilisée
    db.close: set db=nothing 'Ferme l'objet et libère la mémoire utilisée
    Je pense que cela répond à ta demande.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Avril 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 35
    Points : 6
    Points
    6
    Par défaut
    vous avez mis [clefcour] et [clefpersone], c'est à remplacer par le me.personne du cour et me.chiffre?
    pourquoi c'est en rouge?

  8. #8
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Avril 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 35
    Points : 6
    Points
    6
    Par défaut
    Nom : Capture.PNG
Affichages : 387
Taille : 64,1 Ko

  9. #9
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Avril 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 35
    Points : 6
    Points
    6
    Par défaut
    merci et bonne soirée, je dois aller bosser.

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    vous avez mis [clefcour] et [clefpersone], c'est à remplacer par le me.personne du cour et me.chiffre?
    Probalemement plutôt [Personne] et [Chiffre].
    C'est un exemple de code et je ne connais pas le nom de tes champs. C'est l'identifiant de la personne dans ta table et l'identifiant du cour.
    pourquoi c'est en rouge?
    C'est pour mettre en évidence que c'est un texte entre des guillemets et rendre la lecture plus facile.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Avril 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 35
    Points : 6
    Points
    6
    Par défaut
    bonjour,
    désolé de l'absence, mais je construit mon programme que quand je suis au boulot

    J'ai essayé votre programme mais il y a un bug dès le départ.
    J'ai bien changer les parties en rouge, et j'ai mis les bon nom de champs.

    Mais lors de la lecture du programme il me mets:

    Erreur de compilation:
    Type défini par l'utilisateur non défini

    Sur la Ligne: Dim db as dao data.base: Set db = CurrentDb

    se qui est en rouge c'est surligné en bleu.

    Que faire?
    merci

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    C'est database en un seul mot et non data.base.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Avril 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 35
    Points : 6
    Points
    6
    Par défaut
    sa ne fonctionne toujours pas

    db As dao.database:

  14. #14
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 637
    Points : 14 611
    Points
    14 611
    Par défaut
    bonjour,
    çà non plus n'est pas correct :
    c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim r as dao.recordset:
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  15. #15
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Avril 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 35
    Points : 6
    Points
    6
    Par défaut
    toujours pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim r As dao.Recordset: Set db = CurrentDb
    Dim r As dao.database: Set r = db.openrecordset("TCours")
    Dim critere As String
    sa me dit toujours le meme texte et sa surligne la meme chose.

  16. #16
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim db as dao.database: set db=currentdb
    dim r as dao.recordset: set r=db.openrecordset("T_Cours")
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  17. #17
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Avril 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 35
    Points : 6
    Points
    6
    Par défaut
    toujours la meme chose
    Nom : Capture.PNG
Affichages : 348
Taille : 61,9 Ko

  18. #18
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bizarre.

    Peux-tu poster une copie d'écran de tes références ?

    C'est dans le menu outils de l'éditeur de code.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  19. #19
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 637
    Points : 14 611
    Points
    14 611
    Par défaut
    C'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call rs.findfirst(critere)
    et pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call r.findfisrt(critere)
    il faudrait compiler le code si possible ...
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  20. #20
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Merci tee_grandbois pour le FindFirst (désolé, je suis un peu dyslexique quand je tape trop vite) mais on va quand même avoir besoin des références car il n'aurait pas du buter sur la déclaration de la BD.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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