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 :

ajouter liste de mois sur chaque membre [AC-2019]


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable magasin
    Inscrit en
    avril 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : avril 2019
    Messages : 9
    Points : 6
    Points
    6
    Par défaut ajouter liste de mois sur chaque membre
    Bonsoir tout le monde.

    Je poste pour la 1er fois ici, car je suis un peu dépasser par ma demande

    J'essaye de créer une fonction qui me permettra de remplir une table en fonction de deux autres tables je m'explique avec un exemple:

    J'ai trois tables : T_membres T_objectif_mois et T_mois

    Dans T_membre il y à les prénoms de mon équipe.

    Dans T_mois il y à la liste de tout les mois de l'année.

    Et dans T_objectif_mois je voudrais grâce à une fonction y ajouter chaque prénom avec les 12 mois de l'année

    Nom : capture.png
Affichages : 61
Taille : 27,5 Ko

    Voici ceux que j'ai bien commencé à faire mais j'ai l'impression d'être un peu perdu.
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Public Function Remplir_TBAcces_obje_mensuel_vendeur()
     
            Dim db As Database
            Dim rs As Recordset
            Dim rs1 As Recordset
            Dim qdef As QueryDef
            Dim req As String
            Dim frm As dao.Recordset
     
    Set db = CurrentDb
    Set rs = db.OpenRecordset("SELECT * FROM T_membres", dbOpenDynaset)
    Set rs1 = db.OpenRecordset("SELECT * FROM T_mois", dbOpenDynaset)
     
    req = "INSERT into T_objectif_mois(id_vendeur_obj, vendeur_obj,mois_obj) " & _
        " Values ([P_id_vendeur_obj], [P_vendeur_obj],[P_mois_obj])"
     
    While Not rs.EOF
     
        Set frm = db.OpenRecordset("SELECT * FROM T_mois", dbOpenDynaset)
     
    Do While Not frm.EOF
     
            Set qdef = db.CreateQueryDef(vbNullString, req)
            With qdef
                .Parameters("P_id_vendeur_obj") = rs("id_membre")
                .Parameters("P_vendeur_obj") = rs("prenom_membre")
                .Parameters("P_mois_obj") = rs1("designation_mois")
     
       frm.MoveNext
     
                .Execute
     
     
            End With
            qdef.Close
            Set qdef = Nothing
     
        Loop
     
    rs.MoveNext
    rs1.MoveNext
     
    Wend
    rs.Close
    Set rs = Nothing
     
    rs1.Close
    Set rs1 = Nothing
     
    db.Close
    Set db = Nothing
     
    End Function
    Encore merci de m'avoir lu et j'espère vous aurai un ou deux conseille à m'apporter pour terminer mon code

  2. #2
    Expert confirmé
    Homme Profil pro
    Webplanneur
    Inscrit en
    octobre 2007
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : octobre 2007
    Messages : 3 419
    Points : 5 200
    Points
    5 200
    Par défaut
    Salut
    Une solution parmi tant d'autres
    id_vendeur et id_mois (NuméroAuto et clé primaire)
    id_vendeur_fk et id_mois_fk (Numérique Entier long et clé composée)

    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
    Private Sub Commande0_Click()
    Dim dbs As DAO.Database
    Dim rstS1 As DAO.Recordset, rstS2 As DAO.Recordset, rstC As DAO.Recordset
     
    Set dbs = CurrentDb
    Set rstS1 = dbs.OpenRecordset("tbl_vendeur") ' source
    Set rstS2 = dbs.OpenRecordset("tbl_mois") ' source
    Set rstC = dbs.OpenRecordset("tbl_objectif") ' cible
     
    If Not (rstS1.EOF And rstS1.BOF) Then
        rstS1.MoveLast
        rstS1.MoveFirst
        While (Not rstS1.EOF)
            If Not (rstS2.EOF And rstS2.BOF) Then
                rstS2.MoveLast
                rstS2.MoveFirst
                While (Not rstS2.EOF)
                    Debug.Print rstS1.Fields("id_vendeur"), rstS2.Fields("id_mois")
                    rstC.AddNew
                    rstC.Fields("id_vendeur_fk") = rstS1.Fields("id_vendeur")
                    rstC.Fields("id_mois_fk") = rstS2.Fields("id_mois")
                    rstC.Fields("objectif") = 0
                    rstC.Update
                    rstS2.MoveNext
                Wend
            End If
        rstS1.MoveNext
        Wend
    End If
     
    rstC.Close
    rstS2.Close
    rstS1.Close
    dbs.Close
    Set rstC = Nothing
    Set rstS2 = Nothing
    Set rstS1 = Nothing
    Set dbs = Nothing
    End Sub
    Images attachées Images attachées  
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Si la réponse est satisfaisante, alors 1 et n'oubliez pas de clôturer le sujet en cliquant sur

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Responsable magasin
    Inscrit en
    avril 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : avril 2019
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Un grand merci Hyperion13

    Solution facile à comprendre et très réactive.

    J'ai quand même une petite question à te poser?

    Cette fonction est faite pour être lancée à la création de chaque nouveau vendeur sans forcement effacé à chaque fois la table T_objectif_mois, et quand je la lance deux fois elle me dit qu'il y à des risques de doublon.

    Aurais tu la solution pour qu'elle arrive à isoler les membres existant et juste rajouter le nouveau membre et ses info qui lui sont dû?

    Dans tous les cas, je te remercie énormément pour le travail que a fait pour moi.

    Très belle fin de journée à toi et au plaisir de te relire.

    Cdt CB

  4. #4
    Expert confirmé
    Homme Profil pro
    Webplanneur
    Inscrit en
    octobre 2007
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : octobre 2007
    Messages : 3 419
    Points : 5 200
    Points
    5 200
    Par défaut
    re,
    il y a une solution parmi tant d'autres.
    Ici, un frm indépendant avec une combobox indépendante dont le contenu est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_vendeur, nom_vendeur
    FROM tbl_vendeur
    WHERE id_vendeur Not In (SELECT DISTINCT id_vendeur_fk FROM tbl_objectif)
    La combobox n'affichera que les vendeurs qui ne sont pas encore répertoriés dans la tbl_objectif. (voir img)
    et la sub() précédente modifiée
    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
    44
    45
    46
    Private Sub Commande0_Click()
    Dim dbs As DAO.Database
    Dim rstS1 As DAO.Recordset, rstS2 As DAO.Recordset, rstC As DAO.Recordset
    Dim strSql As String
     
    strSql = "SELECT id_vendeur" _
    & " FROM tbl_vendeur" _
    & " WHERE id_vendeur = " & Me.cboVendeur
     
    Set dbs = CurrentDb
    Set rstS1 = dbs.OpenRecordset(strSql) ' source
    Set rstS2 = dbs.OpenRecordset("tbl_mois") ' source
    Set rstC = dbs.OpenRecordset("tbl_objectif") ' cible
     
    If Not (rstS1.EOF And rstS1.BOF) Then
        rstS1.MoveLast
        rstS1.MoveFirst
        While (Not rstS1.EOF)
            If Not (rstS2.EOF And rstS2.BOF) Then
                rstS2.MoveLast
                rstS2.MoveFirst
                While (Not rstS2.EOF)
                    Debug.Print rstS1.Fields("id_vendeur"), rstS2.Fields("id_mois")
                    rstC.AddNew
                    rstC.Fields("id_vendeur_fk") = rstS1.Fields("id_vendeur")
                    rstC.Fields("id_mois_fk") = rstS2.Fields("id_mois")
                    rstC.Fields("objectif") = 0
                    rstC.Update
                    rstS2.MoveNext
                Wend
            End If
        rstS1.MoveNext
        Wend
    End If
     
    Me.cboVendeur.Requery
     
    rstC.Close
    rstS2.Close
    rstS1.Close
    dbs.Close
    Set rstC = Nothing
    Set rstS2 = Nothing
    Set rstS1 = Nothing
    Set dbs = Nothing
    End Sub
    Images attachées Images attachées  
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Si la réponse est satisfaisante, alors 1 et n'oubliez pas de clôturer le sujet en cliquant sur

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Responsable magasin
    Inscrit en
    avril 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : avril 2019
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Bonsoir hyperion13,

    Désolez de ne pas avoir répondu avant, mais la journée n'en finissez pas

    Merci pour ta réponse toujours aussi rapide, mais là, je t'avoue ne pas avoir tout compris.
    J'ai bien essayé plusieurs façons de la faire fonctionner, mais sans résultat.
    A chaque fois, il me balance une erreur en plus différente.
    Je te joins plusieurs tentatives et le détail de mes tables et peut-être, tu pourras me dire où je fais une bêtise.

    Je te souhaite une excellente nuit ou bien même une excellente journée

    Cdt CB
    Nom : bug 1.png
Affichages : 28
Taille : 84,1 Ko
    Nom : bug 2.png
Affichages : 26
Taille : 89,8 Ko
    Nom : bug 3.png
Affichages : 28
Taille : 85,6 Ko
    Nom : bug 4.png
Affichages : 26
Taille : 52,2 Ko
    Nom : bug 5.png
Affichages : 26
Taille : 26,6 Ko

    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
    44
    45
    46
    47
    48
    49
    50
    51
    Option Compare Database
     
    Public Function Remplir_TBAcces_obje_mensuel_vendeur()
     
    Dim dbs As DAO.Database
    Dim rstS1 As DAO.Recordset, rstS2 As DAO.Recordset, rstC As DAO.Recordset
    Dim strSql As String
     
    strSql = "SELECT id_membre" _
    & " FROM T_membres" _
    & " WHERE id_membre = " & Me.cboVendeur
     
    Set dbs = CurrentDb
    Set rstS1 = dbs.OpenRecordset(strSql) ' source
    Set rstS2 = dbs.OpenRecordset("T_mois") ' source
    Set rstC = dbs.OpenRecordset("T_objectif_mois") ' cible
     
    If Not (rstS1.EOF And rstS1.BOF) Then
        rstS1.MoveLast
        rstS1.MoveFirst
        While (Not rstS1.EOF)
            If Not (rstS2.EOF And rstS2.BOF) Then
                rstS2.MoveLast
                rstS2.MoveFirst
     
                While (Not rstS2.EOF)
                    Debug.Print rstS1.Fields("id_membre"), rstS2.Fields("id_mois")
                    rstC.AddNew
                    rstC.Fields("id_vendeur_obj") = rstS1.Fields("id_membre")
                    rstC.Fields("id_mois_obj") = rstS2.Fields("id_mois")
    '                rstC.Fields("objectif") = 0
                    rstC.Update
                    rstS2.MoveNext
                Wend
            End If
        rstS1.MoveNext
        Wend
    End If
     
    Me.cboVendeur.Requery
     
    rstC.Close
    rstS2.Close
    rstS1.Close
    dbs.Close
    Set rstC = Nothing
    Set rstS2 = Nothing
    Set rstS1 = Nothing
    Set dbs = Nothing
     
    End Function

  6. #6
    Expert confirmé
    Homme Profil pro
    Webplanneur
    Inscrit en
    octobre 2007
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : octobre 2007
    Messages : 3 419
    Points : 5 200
    Points
    5 200
    Par défaut
    re,
    Pour les erreurs dans vos 2 Public fct, c'est normal, vous les avez copié dans un module standard et non pas dans le module du frm !
    Alors 2 solutions :
    - copier vos fct dans le module du frm en Private Function Remplir_TBAcces_obje_mensuel_vendeur(),ou alors
    - ajouter dans Public Function Remplir_TBAcces_obje_mensuel_vendeur(frm As Form) et dans l'appel de la fct Call Public Function Remplir_TBAcces_obje_mensuel_vendeur(Me).
    Pour la 1ère erreur, je soupçonne que les tbl ne sont pas dans le CurrentDb ! Dans ce cas il faut passer un truc du genre :
    - Set dbs = OpenDatabase("H:\Support\databaseexterne.accdb") ' lecteur externe ou,
    - Set dbs = OpenDatabase("\\Support\databaseexterne.accdb") ' serveur.
    Autre remarque : dans une des fct public vous déclarez Forms![F_module_info_systeme]![me.cboVendeur],alors que cbo.Vendeur, sauf erreur, se trouve dans F_ajout_modif_membre.
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Si la réponse est satisfaisante, alors 1 et n'oubliez pas de clôturer le sujet en cliquant sur

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : novembre 2004
    Messages : 7 581
    Points : 12 784
    Points
    12 784
    Par défaut
    Bonjour,
    pour la première erreur (erreur d'exécution 3078) voici ce que contient la variable strSql au moment où elle est créée:
    "SELECT id_membreFROM T_membresWHERE id_Membre" = " & cboVendeur"
    et cette comparaison renvoie Faux (d'ou le nom de la table), vu que l'expression de gauche n'est pas égale à celle de droite.
    Quand on te donne du code essaie de respecter la syntaxe en évitant d'enlever des espaces (devant FROM et WHERE) ou en ajoutant des guillemets (autour de & cboVENDEUR):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    strSql = "SELECT id_membre" _
    & " FROM T_membres" _
    & " WHERE id_Membre="  & cboVendeur
    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 ?

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Responsable magasin
    Inscrit en
    avril 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : avril 2019
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Salut Hyperion j'espère que tu vas bien.

    SUPER tout fonctionne à merveille, j'ai un peu galérer, mais ça y est !!!!

    Je te remercie encore pour ton aide, étant vraiment débutant dans tout ce langage, ton aide ma vraiment était très précieuse.

    Je peux donc clôturer le poste et à mon avis, on va être amené à rediscuter code ensemble

    Cdt CB

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

Discussions similaires

  1. Liste déroulante : Title sur chaque option
    Par scorplayer dans le forum JSF
    Réponses: 7
    Dernier message: 27/08/2010, 09h23
  2. Ajout d'un bouton sur chaque ligne
    Par Victor.ZENGA dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/06/2009, 10h19
  3. aider moi svp (ajout liste chainé )
    Par banblanxx dans le forum C++
    Réponses: 8
    Dernier message: 02/12/2007, 10h28
  4. Ajout d'un certains nombre de mois sur une date
    Par ksper45 dans le forum Linux
    Réponses: 4
    Dernier message: 06/11/2007, 16h59
  5. Réponses: 2
    Dernier message: 10/11/2006, 14h23

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