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

IHM Discussion :

Dupliquer des enregistrements en cliquant sur un bouton [AC-2013]


Sujet :

IHM

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut Dupliquer des enregistrements en cliquant sur un bouton
    Bonjour,

    J'aimerais pouvoir dupliquer des enregistrements en cliquant sur un bouton dans un formulaire. Je sais faire cela avec INSERT INTO sauf que je ne sais pas comment écrire le critère.

    Je m'explique : j'ai des vendeurs (enregistrés dans une table tblVendeurs) inscrits à différentes dates (enregistrées dans une table tblDates) via une table tblParticipations.

    Certains vendeurs sont récurrents sur toutes les dates, mais chaque fois qu'une nouvelle date est créée il faut remettre un par un tous les vendeurs récurrents.

    Comment faire pour dupliquer tous les vendeurs de la date précédente sur la date actuelle (le WHERE dans la requête suivante) ?

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO tblParticipations ( idVendeur )
    SELECT idVendeur
    FROM tblParticipations
    WHERE (idDate = idDate précédent de la date actuellement sélectionnée)

    Merci et bonnes fêtes à tous.

  2. #2
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut dupllicier les enregistrement
    En créant un bouton sur ton formulaire ("command44, comme dans l'exemple), tu peux créer des copies à volonté:
    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
    Private Sub Command44_Click()
    On Error GoTo Command44_Click_Err
     
        On Error Resume Next
        DoCmd.RunCommand acCmdSelectRecord
        If (MacroError = 0) Then
            DoCmd.RunCommand acCmdCopy
            DoCmd.RunCommand acCmdRecordsGoToNew
            DoCmd.RunCommand acCmdSelectRecord
            DoCmd.RunCommand acCmdPaste
        Else
            Beep
            MsgBox MacroError.Description, vbOKOnly, ""
        End If
     
     
    Command44_Click_Exit:
        Exit Sub
     
    Command44_Click_Err:
        MsgBox Error$
        Resume Command44_Click_Exit
     
    End Sub
    . Il suffit dès lors, d'y rajouter ta condition d'exécution

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Bonjour Zekraoui_Jakani.

    Je te remercie pour ta réponse mais j'aimerais plutot utiliser la petite requête que j'ai mise en exemple pour arriver a mes fins (c'est possible comme ça non ?)

    Je souhaiterais simplement savoir comment écrire le where de la ligne 4.

  4. #4
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 871
    Points : 3 451
    Points
    3 451
    Par défaut
    Bonjour rag83,

    Je me permet d'intervenir parce que je connais ton application.

    Je crois que ce n'est pas aussi simple. Il faut aller chercher les vendeurs réguliers, ce que tu ne spécifies pas dans ta requête. De plus cela dépend à quel moment tu mets le code, comme tes ID de date n'ont pas rapport avec la date précédente il va falloir aller récupérer la vrai date précédente et non se fié au ID de date.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Bonjour Robert1957 et merci pour ton intervention.

    En fait il ne s'agit bien entendu que de dupliquer les vendeurs recurrents (les professionnels).

    A la lecture de tutos divers, j'ai réussi à faire un petit quelquechose qui semble fonctionner.

    C'est un peu rigide car ça ne permet que de copier les vendeurs pro de la date précédente pour la date actuelle mais c'est déjà pas mal, le probleme étant que comme tu le sais les dates ne comptent pas toutes le meme nombre d'emplacements.

    Voici ce que j'ai fait, si tu veux bien jeter un oeil, je ne suis pas contre une petite correction ou optimisation si quelque chose ne va pas.

    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 btnDupliquer_Click()
    On Error GoTo err_btnDupliquer_Click
     
        Dim db As DAO.Database: Set db = CurrentDb
        Dim rst As DAO.Recordset
        Dim strSQL As String
        Dim strCritere As String
        Dim intCritereNow As Integer
        Dim intCriterePrevious As Integer
     
        strSQL = "SELECT T_Dates.id_date, T_Dates.dates_puces FROM T_Dates ORDER BY T_Dates.dates_puces;"
        Set rst = db.OpenRecordset(strSQL)
        strCritere = "id_date LIKE " & Me.cmbDate & ""
        rst.FindFirst strCritere
        intCritereNow = rst("id_date")
        rst.MovePrevious
        intCriterePrevious = rst("id_date")
     
        strSQL = "INSERT INTO T_Participations ( id_vendeur, id_date, id_emplacement ) " _
        & "SELECT T_Participations.id_vendeur, " & intCritereNow & ", T_Participations.id_emplacement " _
        & "FROM T_Vendeurs INNER JOIN T_Participations ON T_Vendeurs.id_vendeur = T_Participations.id_vendeur " _
        & "WHERE ((T_Participations.id_date =" & intCriterePrevious & ") And (T_Vendeurs.professionnel=True));"
     
        DoCmd.SetWarnings False
        DoCmd.RunSQL strSQL
        DoCmd.SetWarnings True
     
        Me.Requery
     
        rst.Close
        Set rst = Nothing
        Set db = Nothing
     
    Exit_btnDupliquer_Click:
        Exit Sub
     
    err_btnDupliquer_Click:
        If Err.Number = 3939 Then
            MsgBox ("xyz"), vbExclamation
            Resume Exit_btnDupliquer_Click
        Else
            MsgBox Err.Description & Chr(13) & "Erreur " & Err.Number, vbCritical
            Resume Exit_btnDupliquer_Click
        End If
     
    End Sub
    Merci et bonne journée

  6. #6
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 871
    Points : 3 451
    Points
    3 451
    Par défaut
    Bonjour rag83,

    Le problème que je vois est au moment du changement de saison.

    Saison 1: id_emplacement = 1, emplacement = 1
    Saison 2: id_emplacement = 103, emplacement = 1
    Saison 3: id_emplacement = 173, emplacement = 1

    Je crois qu'il va falloir que tu récupères l'emplacement selon la saison pour pouvoir assigner l'emplacement 1 à un vendeur pour toute une année. Si tu fonctionnes avec le id_emplacement il va te manquer 2 saisons dans ton année.

    Je vais regarder si je retrouve ta bd et faire le test.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    La récupération de l'id de l'emplacement est bien sur problématique puisque comme tu le dis au changement de saison ça ne colle pas.

    Je pensais tout simplement empêcher la duplication si les deux dates n'appartiennent pas à la même saison.

    L'autre solution serait d'aller chercher la derniere date trouvée de la même saison pour la duplication.

  8. #8
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 871
    Points : 3 451
    Points
    3 451
    Par défaut
    Bonjour rag83,

    En effet il est possible de récupérer le dernier emplacement pour la dernière date pour le bloc de date concerné. Dans la réalité est-ce bien de cette façon que vous fonctionnez?

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  9. #9
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 871
    Points : 3 451
    Points
    3 451
    Par défaut
    Bonjour rag83,

    Voici ton code corrigé pour fonctionner par bloc:
    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
    Private Sub btnDupliquer_Click()
     
        Dim db As DAO.Database: Set db = CurrentDb
        Dim strSQL As String
        Dim daCritere As Date
        Dim loCritere As Long
        Dim loDate As Long
     
        daCritere = Me.cmbDate
        'Ici on va chercher la saison
        loCritere = DLookup("emplacement_FK", "T_Dates", "[dates_puces]=#" & daCritere & "#")
        'Ici on va chercher le id_date
        loDate = DLookup("id_date", "T_Dates", "[dates_puces]=#" & daCritere & "#")
     
        'Le SQL pour insérer les vendeurs selon la dernière date de la saison
        strSQL = "INSERT INTO T_Participations ( id_vendeur, id_date ) " _
        & "SELECT T_Participations.id_vendeur, " & loDate & " AS N_id_date FROM T_Vendeurs " _
        & "INNER JOIN T_Participations ON T_Vendeurs.id_vendeur = T_Participations.id_vendeur " _
        & "WHERE T_Participations.id_date=(SELECT TOP 1 T_Dates.id_date FROM T_Dates " _
        & "WHERE T_Dates.dates_puces < #" & daCritere & "# And T_Dates.emplacement_FK = " & loCritere _
        & " ORDER BY T_Dates.dates_puces DESC;) AND T_Vendeurs.professionnel=True;"
        db.Execute strSQL, dbFailOnError
        Set db = Nothing
     
    End Sub
    Tu peux peut-être récupérer le "id_date" sans le DLookup si tu as déjà cette information dans ton formulaire, mais je ne me souviens plus!!!

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Bonjour Robert,

    J'ai testé ce que tu as fait mais il y a un problème, rien ne ne se passe quand je clique sur le bouton exécutant le code.

    J'ai essayé de comprendre pourquoi, apparemment il y a un probleme sur la ligne 20 de ton code dans la requête avec le daCritere.

    J'ai essayé de l'ecrire de differentes manieres mais cela ne fontionne jamais... J'ai pensé à un probleme de format de date donc j'ai fait un format en américain mais cela ne marche toujours pas.

    Comme tu le dis, je peux récupérer les criteres directement avec le id_date dans le formulaire, j'ai vérifié, tout est bien recupéré correctement.

    Voici le code modifié :

    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
    Private Sub btnDupliquer_Click()
     
        Dim db As DAO.Database: Set db = CurrentDb
        Dim strSQL As String
        Dim daCritere As Date
        Dim loCritere As Long
        Dim loDate As Long
     
        daCritere = Me.cmbDate.[Column](1)
        daCritere = Format(daCritere, "mm/dd/yyyy")
     
        'Ici on va chercher la saison
        loCritere = Me.cmbDate.[Column](2)
     
        'Ici on va chercher le id_date
        loDate = Me.cmbDate
     
        'Le SQL pour insérer les vendeurs selon la dernière date de la saison
        strSQL = "INSERT INTO T_Participations ( id_vendeur, id_date ) " _
        & "SELECT T_Participations.id_vendeur, " & loDate & " AS N_id_date FROM T_Vendeurs " _
        & "INNER JOIN T_Participations ON T_Vendeurs.id_vendeur = T_Participations.id_vendeur " _
        & "WHERE T_Participations.id_date=(SELECT TOP 1 T_Dates.id_date FROM T_Dates " _
        & "WHERE T_Dates.dates_puces < #" & daCritere & "# And T_Dates.emplacement_FK = " & loCritere _
        & " ORDER BY T_Dates.dates_puces DESC;) AND T_Vendeurs.professionnel=True;"
     
        db.Execute strSQL, dbFailOnError
     
        Set db = Nothing
     
    End Sub
    Si tu as une idée du problème...

  11. #11
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 871
    Points : 3 451
    Points
    3 451
    Par défaut
    Bonjour rag83,

    Effectivement le format de la date peut poser problème. Si tu essaies avec une fonction comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function fuUSDate(daDate As Date) As Date
     
        fuUSDate = DatePart("m", daDate) & "-" & DatePart("d", daDate) & "-" & DatePart("yyyy", daDate)
     
    End Function
    Et dans le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    daCritere = fuUSDate(Me.cmbDate.[Column](1))
    debug.print daCritere
    Devrait te retourner pour aujourd'hui: "12-30-2015"

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  12. #12
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Il y avait bien un problème de format de date, et ça fontionne avec ton module de conversion ou le simple Format(daCritere, "mm/dd/yyyy").

    Ce que je n'avais pas vu, c'est qu'il n'y avait plus la récupération de l'id de sl'emplacement dans la dernière requete donc rien n'apparaissait dans le formulaire...

    Ceci fontionne donc :

    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
    Private Sub btnDupliquer2_Click()
     
        Dim db As DAO.Database: Set db = CurrentDb
        Dim strSQL As String
        Dim daCritere As Date
        Dim loCritere As Long
        Dim loDate As Long
     
        daCritere = Format(Me.cmbDate.[Column](1), "mm/dd/yyyy")
        'ou daCritere = fuUSDate(Me.cmbDate.[Column](1)) avec le module
     
        'Ici on va chercher la saison
        loCritere = Me.cmbDate.[Column](2)
     
        'Ici on va chercher le id_date
        loDate = Me.cmbDate
     
        'Le SQL pour insérer les vendeurs selon la dernière date de la saison
        strSQL = "INSERT INTO T_Participations ( id_vendeur, id_date, id_emplacement ) " _
        & "SELECT T_Participations.id_vendeur, " & loDate & " AS N_id_date, T_Participations.id_emplacement FROM T_Vendeurs " _
        & "INNER JOIN T_Participations ON T_Vendeurs.id_vendeur = T_Participations.id_vendeur " _
        & "WHERE T_Participations.id_date=(SELECT TOP 1 T_Dates.id_date FROM T_Dates " _
        & "WHERE T_Dates.dates_puces < #" & daCritere & "# And T_Dates.emplacement_FK = " & loCritere _
        & " ORDER BY T_Dates.dates_puces DESC;) AND T_Vendeurs.professionnel=True;"
     
        db.Execute strSQL, dbFailOnError
     
        Me.Requery
     
        Set db = Nothing
     
    End Sub
    Je fais encore quelques vérifications et je passe en résolu.

    Merci beaucoup

  13. #13
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 871
    Points : 3 451
    Points
    3 451
    Par défaut
    Bonjour rag83,

    Je te conseille la petite fonction de date que tu mets dans un module quelconque et que tu appelles systématiquement quand tu travailles avec les dates. Ça va t'éviter beaucoup de problème. Access a de la difficulté avec la langue française et ses particularités (le format de date, les accents ainsi que la virgule au lieu du point).

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  14. #14
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Bon ça semble fonctionner, je ne vois pas d'autre problème.
    Je mets la fonction de conversion de date au lieu du format.
    Merci et bonnes fêtes.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/04/2015, 12h59
  2. Rajouter des éléments en cliquant sur un bouton
    Par l0c0l0c0 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/12/2014, 13h52
  3. Réponses: 1
    Dernier message: 14/08/2006, 09h41
  4. Réponses: 4
    Dernier message: 31/07/2006, 14h19
  5. [PHP-JS] ajouter des champ en cliquant sur un bouton?
    Par einsteineuzzz dans le forum Langage
    Réponses: 3
    Dernier message: 29/06/2006, 17h36

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