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 l'enregistrement courant et msgbox de saisie pour la nouvelle clé primaire [AC-2007]


Sujet :

IHM

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 31
    Par défaut Dupliquer l'enregistrement courant et msgbox de saisie pour la nouvelle clé primaire
    Bonjour à tous,

    Dans un formulaire, je voudrais que sur click d'un contrôle, cela duplique l'enregistrement courant et ouvre une msgbox demandant la nouvelle valeur de la clé primaire.
    Que ce soit pour le code de la duplication ou pour le code de la msgbox, j'ai quelques difficultés.

    Auriez vous des idées?

    Merci par avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 286
    Par défaut Des idées...
    Peut-être pas simple comme approche, mais pour ma part, sur le click du bouton en question, je lancerais une requete SQL (Select *) pour récupérer l'enregistrement (avec un Where basé sur un élément unique de ta table (par exemple sur la valeur actuelle de la clé primaire de l'enregistrement à dupliquer)), puis j'ouvrirai un formulaire (ressemblant à un MsgBox) pour permettre à l'utilisateur de saisir la nouvelle clé primaire... et je ferai un AddNew en utilisant (en update de l'enregistrement ainsi créé par le AddNew) les toutes rubriques récupérées dans le Select et la saisie de l'utilisateur...

    Je suppose que ta clé primaire n'est pas en NuméroAuto ... car sinon faut pas la faire saisir, bien sûr. Access s'en charge lui-même.

    Michel

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 118
    Par défaut Comment dupliquer un Formulaire et son Sous-formulaire
    Bonsoir
    Voici un code qui marche bien avec ses explications,je n'ai pas trop le temps de tout traduire .
    La klé primaire n'a pas besoin d'être saisie à la main car j'utilise des compteurs
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    Private Sub B_CopyConforme_Click()
     
        ' Msgbox d'Avertissement
        Dim Msg, Style, Title, Help, Ctxt, Response, MyString
        Msg = "Vous êtes sur le point de faire une Copy-Conforme du Devis" & Chr(13) & "Souhaitez-vous continuer?" ' Définit le message.
        Style = vbYesNo + vbExclamation + vbDefaultButton2    ' Définit les boutons.
        Title = "Avertissement"    ' Définit le titre.
        ' Affiche le message.
        Response = MsgBox(Msg, Style, Title)
            If Response = vbYes Then    ' L'utilisateur a choisi Oui.
                Else    ' L'utilisateur a choisi Non.
                Exit Sub
            End If
     
    On Error GoTo Err_Handler 
     
        Dim strSql As String    'SQL statement.
        Dim lngID As Long       'Primary key value of the new record.
     
        'Save any edits first
        If Me.Dirty Then
            Me.Dirty = False
        End If
     
        'Make sure there is a record to duplicate.
        If Me.NewRecord Then
            MsgBox "Selectionner le Devis à Dupliquer."
        Else
            'Duplicate the main record: add to form's clone.
            With Me.RecordsetClone
                .AddNew 'la methode AddNewcar permet de Récupérer la nouvelle K_NumDevis
                    !NomSociete = Me.NomSociete
                    !NomClt = Me.NomClt
                    !Ad1Clt = Me.Ad1Clt
                    !Ad2Clt = Me.Ad2Clt
                    !CpClt = Me.CpClt
                    !VilleClt = Me.VilleClt
                    !HTDevis = Me.HTDevis
                    'etc for other fields.
                .Update
     
                'Save the primary key value, to use as the foreign key for the related records.
                .Bookmark = .LastModified
                lngID = !K_NumDevis 'nouvelle K_NumDevis
     
                'Duplicate the related records: append query.
                'Attention : Dans le cas d'un Compteur ne pas recopier la Kprimaire: K_DevisLig
                If Me.F111_DevisLigSousFormulaire.Form.RecordsetClone.RecordCount > 0 Then
                    strSql = "INSERT INTO [T_DevisLig] (K_NumDevis,Description,Qté,Unité,Pu )" & _
                        "SELECT " & lngID & " ,Description,Qté,Unité,Pu " & _
                        "FROM [T_DevisLig] WHERE K_NumDevis = " & Me.K_NumDevis & ";"
                 DBEngine(0)(0).Execute strSql, dbFailOnError
     
                Else
                    MsgBox "Le Devis est Dupliqué, mais il n'y avait pas de Lignes à Dupliquer", vbOKOnly + vbInformation, ""
                End If
     
                'Affiche à l'Ecran le Devis Dupliqué .
                Me.Bookmark = .LastModified
                MsgBox "Devis Dupliqué ! " & "    " & Chr(13) & Chr(13) & "N°:" & lngID, vbInformation, ""
                Me.Ctl_DevisSigné.Visible = False
                'Cacher les Boutons Inutiles
                Me.B_ImprimeDevis.SetFocus 'Car Impossible de masquer le Controle Actif
                Me.B_CopyConforme.Visible = False 'Controle Actif
                Me.B_CopyStructure.Visible = False
                Me.Caption = "Copy Conforme"
                Me.Étiquette44.Caption = "Copy Conforme" 'Etiqette44 (c'est le Titre )
                Me.Boîte97.Visible = False 'Boite97(Cadre)
            End With
        End If
     
    Exit_Handler:
        Exit Sub
     
    Err_Handler:
        MsgBox "Error " & Err.Number & " - " & Err.Description, , "B_CopyConforme_Click"
        Resume Exit_Handler
    End Sub
    Explications
    Le code sauvegarde en premier l'enregistrement en cours
    AddNew assigne un buffer au nouvel enregistrement puis copie les données de ton formulaire vers ce buffer
    Update sauvegarde l'Enregistrement

    En s'assurant que l'Enregistrement dupliqué devient Current (Me.Bookmark = .LastModified),on stock la nouvelle Klé primaire dans une variable de façon à pouvoir l'utiliser pour les enregistrements liés (côté plusieurs)

    Puis on vérifie l'existence d'enregistrements dans le s/s form et on les duplique avec une requête sql Append

    La requête sélectionne les Enregistrements enfants dans le s/s form et les ajoute dans la table avec la Nouvelles Klé de liaison

    Pourquoi utilise t-on AddNew pour dupliquer les Enregistrements du Formulaire Principal et une Requête Sql pour dupliquer ceux du Sous-form ?
    • AddNew nous renvoie la Nouvelle Klé Primaire que nous avons besoin pour créer les Enregistrements côté plusieurs.
    • La Requête Sql créé TOUS les Enregistrements du Sous-Form en 1 seule fois
    • On peut accéder les nouveaux Enregistrement du s/s form sans avoir à Requery


    Cordialement

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 118
    Par défaut InputBox pour entrer la Klé
    Bonjour

    Suggestion:
    pour entrer la Klé à la main, je pense qu'il faut créer une variable et la charger avec une InputBox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim lngMaNouvelleKlé As Long ' à placer avec les autres Dim au début (Long si la Klé est un Entier Long )
    Emplacement de InputBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Else
        lngMaNouvelleKlé=InputBox("entrer la Klé" )  
       'Dupliquer l'Enregistrement principal:add to form's clone.
            With Me.RecordsetClone
                .AddNew
                    !Klé = lngMaNouvelleKlé
                    !NomSociété = Me.NomSociété
                    !NomClient = Me.NomClient
                    !etc......
    ou peut être directement je n'ai pas tester

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     .AddNew 'la methode AddNewcar permet de Récupérer la nouvelle K_NumDevis
            !Klé = InputBox("entrez le la Klé" )               
            !NomSociete = Me.NomSociete
            !NomClt = Me.NomClt
            etc....
    Voilà je vous laisse adapter le code pour un formulaire simple il suffit de supprimer la Requête Sql

    Bonne journée

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 31
    Par défaut
    Tout d'abord, un grand merci. Réponse très rapide et parfaitement ciblée.

    Tout fonctionne à merveille.

    Pour résumer:
    Ma clé primaire est Nom_Botanique et le code final est le suivant
    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
    54
    55
    56
    57
    Private Sub Dupliquer_Fiche_Click()
     
            Dim Msg, Style, Title, Help, Ctxt, Response, MyString
     
        'Message d'avertissement pour continuation.
     
            Msg = "Vous êtes sur le point de dupliquer la fiche " & Chr(13) & "Souhaitez-vous continuer?" ' Définit le message.
            Style = vbYesNo + vbExclamation + vbDefaultButton2    ' Définit les boutons.
            Title = "Avertissement"    ' Définit le titre.
            Response = MsgBox(Msg, Style, Title) 'Affiche le message.
     
            If Response = vbYes Then    ' L'utilisateur a choisi Oui.
                Else    ' L'utilisateur a choisi Non.
                    Exit Sub
            End If
     
            On Error GoTo Err_Handler
     
            Dim NomFicheEnfant As String
     
        'Sauvegarde de l'enregistrement
            If Me.Dirty Then
                    Me.Dirty = False
            End If
     
        'Vérification si l'enregistrement courant n'est pas vierge
            If Me.NewRecord Then
                    MsgBox "Selectionner la fiche à dupliquer."
                Else
                    NomFicheEnfant = InputBox("Entrer le nom botanique de la nouvelle fiche")
     
        'Dupliquation de l'enregistrement courant
                    With Me.RecordsetClone
                        .AddNew 'la methode AddNewcar permet de Récupérer la nouvelle K_NumDevis
                            !Nom_Botanique = NomFicheEnfant
                            !Nom_commun = Me.Nom_commun
                            !Famille = Me.Famille
                            !Type = Me.Type
                            !Origine = Me.Origine
                            ...
     
                .Update
     
                'Save the primary key value, to use as the foreign key for the related records.
                '.Bookmark = .LastModified
     
                    End With
            End If
     
    Exit_Handler:
        Exit Sub
     
    Err_Handler:
        MsgBox "Error " & Err.Number & " - " & Err.Description, , "B_CopyConforme_Click"
        Resume Exit_Handler
     
    End Sub
    Encore un grand merci

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur Matériaux
    Inscrit en
    Mars 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Matériaux
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 61
    Par défaut
    Bonjour à tous,

    Je cherche à faire quelque chose de similaire (voir ici) et je me pose une question sur la méthode.

    Lorsque l'on veut dupliquer un enregistrement pour faciliter la saisie de données dans un formulaire vaut-il mieux :

    - ouvrir le formulaire et les sous formulaire source, en copier les données puis ouvrir un nouvel enregistrement du formulaire et coller les données ou :

    - Copier les données de l'enregistrement source depuis les tables (principale et éventuellement tables liées), coller ces données en tant que nouvel enregistrement dans les tables qui vont bien en laissant Access générer les nouvelles clés primaires et ouvrir ensuite le formulaire de saisie en pointant sur le nouvel enregistrement créé.

    Dans le premier cas, comment mettre les tables à jour à partir des données collées dans le formulaire ? Est ce qu'un Me.requery suffit ? Comment cela se passe-t-il pour les sous formulaire correspondant aux tables liées ?

    Merci

    Boid'

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

Discussions similaires

  1. DBGrid récupérer les valeurs de l'enregistrement courant
    Par bob_sapp dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/09/2014, 07h56
  2. Enregistrement courant après refresh [cas particulier]
    Par say dans le forum Bases de données
    Réponses: 8
    Dernier message: 02/08/2005, 15h59
  3. Effacer l'enregistrement courant?
    Par juliea dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/12/2004, 10h48
  4. Trigger sur l'enregistrement courant
    Par fifi2000ez dans le forum SQL
    Réponses: 4
    Dernier message: 03/08/2004, 21h25
  5. Enregistrement courant RECNO
    Par Chonchon dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/06/2004, 18h00

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