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 :

Problème avec la fonction dupliquer dans un sous formulaire


Sujet :

IHM

  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Points : 46
    Points
    46
    Par défaut Problème avec la fonction dupliquer dans un sous formulaire
    Bonjour,

    Je vais essayé de faire le plus simple possible : J'ai un formulaire principal appelé "F_Societe" avec un seul champ nommé "NomSociete". J'ai aussi, dans ce formulaire, un sous formulaire appelé "S/F_Clients" avec les coordonnées du client. Les relations sont faites afin que je puisse avoir plusieurs enregistrement dans le sous formulaire pour le même client. Par exemple, dans la Société1, j'ai plusieurs personnes différentes, monsieur1, madame2...
    J'ai dans ce sous formulaire un bouton dupliquer avec ce code :
    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
    Private Sub Duppiquer_Click()
    On Error GoTo Err_Duppiquer_Click
     
     
        DoCmd.RunCommand acCmdSelectRecord
        DoCmd.RunCommand acCmdCopy
        DoCmd.RunCommand acCmdRecordsGoToNew
        DoCmd.RunCommand acCmdSelectRecord
        DoCmd.RunCommand acCmdPaste
     
    Exit_Duppiquer_Click:
        Exit Sub
     
    Err_Duppiquer_Click:
        MsgBox Err.Description
        Resume Exit_Duppiquer_Click
     
    End Sub
    Le code fonctionne bien, il me duplique bien mon client mais le problème est que quand je fais cela, je me retrouve automatiquement au premier enregistrement du formulaire principal ! Je ne comprends vraiment pas pourquoi.

    Un exemple :
    Je suis sur l'enregistrement Société2 du formulaire F_Societe et dans le client Monsieur3 du sous formulaire S/F_Clients. A ce moment, je clique sur dupliquer, mais je me retrouve automatiquement sur la Société1. Par contre, quand je retourne sur la Société2 le Monsieur3 s'est bien dupliquer. Le seul problème est donc qu'après que j'ai cliqué sur dupliquer, je me retrouve automatiquement sur le premier enregistrement du formulaire principal.

    Merci d'avance à ceux qui me répondront.

  2. #2
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Points : 46
    Points
    46
    Par défaut
    J'avais déjà essayé beaucoup de choses qui ne marchait pas mais je viens de faire une dernière tentative et miracle ! ELLE FONCTIONNE !

    Je m'excuse donc d'avoir posté ma question mais je vais quand même donnée la réponse afin que d'autres personnes qui auraient le même problème puisse être dépanné :

    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
    Private Sub Dupliquer_Click()
    On Error GoTo Err_Dupliquer_Click
     
    Dim NumClientDupliquer As Long
     
        NumClientDupliquer = Forms![F_Societe]![N°Clients]
        DoCmd.RunCommand acCmdSelectRecord
        DoCmd.RunCommand acCmdCopy
        DoCmd.RunCommand acCmdRecordsGoToNew
        DoCmd.RunCommand acCmdSelectRecord
        DoCmd.RunCommand acCmdPaste
        DoCmd.OpenForm "F_Societe", , , "N°Clients=" & NumClientDupliquer
        DoCmd.GoToRecord , , acLast
     
    Exit_Dupliquer_Click:
        Exit Sub
     
    Err_Dupliquer_Click:
        MsgBox Err.Description
        Resume Exit_Dupliquer_Click
     
    End Sub

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Bonjour
    J’ai un problème similaire. Je voudrais activer la commande copier&Coller à partir d’un bouton situé dans le formulaire (qui comporte plusieurs sous formulaires) et agir sur un sous-formulaire précis !
    Est ce que la commande (DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70) ne pourrais pas fonctionner en jouant sur les chiffes et en précisant le nom du sous formulaire concerné ?
    Merci

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Bonjour
    Je suis arrivé à résoudre partiellement le problème avec 2 codes
    Code 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       Me![Sous Formulaire].SetFocus
       DoCmd.RunCommand acCmdSelectRecord
       DoCmd.RunCommand acCmdCopy
       DoCmd.RunCommand acCmdPasteAppend
    Code 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       Me![ Sous Formulaire].SetFocus
       DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
       DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70
       DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70
    Cela fonctionne bien sur un Sous formulaire en mode unique
    Par contre sur un sous formulaire en mode continu : Non !
    Et c’est mon cas. Je voudrais dupliquer mes ordonnances !
    Merci pour votre aide

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    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 859
    Points : 14 977
    Points
    14 977
    Par défaut
    bonjour,
    Est ce que la commande (DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70) ne pourrais pas fonctionner en jouant sur les chiffes et en précisant le nom du sous formulaire concerné ?
    je dirai que cette méthode d'appel des commandes depuis les menus est à éviter car elle est obsolète depuis pas mal de versions ...
    Cela fonctionne bien sur un Sous formulaire en mode unique
    Par contre sur un sous formulaire en mode continu : Non !
    sur clic d'un bouton il est possible de dupliquer l'enregistrement sélectionné d'un sous-formulaire 1 vers un sous-formulaire 2, car on connait sa position avec CurrentRecord
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub btnDup1_Click()
     
        ' positionnnement sur l'enregistrement sélectionné et copie de celui-ci
        Me.SousFormulaire1.SetFocus
        DoCmd.GoToRecord , , acGoTo, Me.SousFormulaire1.Form.CurrentRecord
        DoCmd.RunCommand acCmdCopy
     
        ' collage de l'enregistrement vers le sous-formulaire 2 
        Me.SousFormulaire2.SetFocus
        DoCmd.GoToRecord , , acNewRec
        DoCmd.RunCommand acCmdPaste
     
    End Sub

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Je vous remercie Tee_gradbois
    1ère remarque : Vous confirmez ce que j’ai déjà lu
    Votre proposition : j’ai un seul sous formulaire et non 2 !
    Au début j’avais un message : copier n'est pas disponible pour l'instant. Puis cela fonctionne partiellement. Seul le premier médicament est copié sans la posologie et la durée
    Donc solution à retravailler
    Merci

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    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 859
    Points : 14 977
    Points
    14 977
    Par défaut
    Votre proposition : j’ai un seul sous formulaire et non 2 !
    il suffit d'enlever le SetFocus sur le sous-formulaire 2
    Puis cela fonctionne partiellement. Seul le premier médicament est copié sans la posologie et la durée
    c'est à dire ?

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Bonjour
    J’ai enlevé le deuxième SetFocus. J’ai le message : copier n'est pas disponible pour l'instant. Puis après des fermetures et ouvertures le message ne s’affiche plus mais cela fonctionne partiellement
    J’ai essayé d’insérer une photo pour être plus claire mais cela n’a pas fonctionne.
    Chaque enregistrement (sous formulaire en mode continu) comporte en fait plusieurs lignes. Chaque ligne comporte (Nom d’un médicament ; Posologie ; Durée du traitement). Nous devons agir sur l’ensemble des enregistrements. Supprimer un enregistrement avec le code (acEditMenu), fonctionne par contre avec (acCmdDelete) ne fonctionne pas.
    Merci

  9. #9
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    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 859
    Points : 14 977
    Points
    14 977
    Par défaut
    bonjour,
    Chaque enregistrement (sous formulaire en mode continu) comporte en fait plusieurs lignes. Chaque ligne comporte (Nom d’un médicament ; Posologie ; Durée du traitement).
    en fait j'ai oublié: il faut ajouter la commande DoCmd.RunCommand acCmdSelectRecord juste avant les commandes acCmdcopy et acCmdPaste.
    Supprimer un enregistrement avec le code (acEditMenu), fonctionne par contre avec (acCmdDelete) ne fonctionne pas.
    c'est la commande acCmdDeleteRecord. Sinon, la touche Suppr après avoir cliqué sur le sélecteur de l'enregistrement concerné fonctionne aussi (si la propriété "Afficher sélecteur" est à oui).

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Bonjour, tee_grandboi
    Formulaire
    Etiquette Zone de texte Etiquette Zone de texte Bouton1 Bouton2
    Date 09/07/2019 n_ordon 21898
    Sous formulaire en mode continue
    Ligne 1 Médicament1 Posologie Durée
    Ligne 2 Médicament2 Posologie Durée
    Ligne 3 Médicament3 Posologie Durée


    Le code que j’ai utilisé est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DoCmd.RunCommand acCmdSelectRecord
    DoCmd.RunCommand acCmdCopy
    DoCmd.RunCommand acCmdRecordsGoToNew 
    DoCmd.RunCommand acCmdPaste
    • Un nouvel enregistrement est ouvert avec dans la première case (Médicament) le texte suivant : Date n_ordon 09/07/2019 21898
    • Donc le code a recopié textuellement les noms des étiquettes suivis des contenus des zones de texte ! du formulaire vers le sous formulaire et non du sous formulaire vers le sous formulaire


    Merci

  11. #11
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    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 859
    Points : 14 977
    Points
    14 977
    Par défaut
    poste ton code

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Bonjour
    Le code contient uniquement les 4 lignes sus écrites
    Le formulaire a comme source une table et le SF également
    Merci

  13. #13
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    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 859
    Points : 14 977
    Points
    14 977
    Par défaut
    bonsoir,
    Le code contient uniquement les 4 lignes sus écrites
    il y manque l'instruction Me![Sous Formulaire].SetFocus en premier, raison pour laquelle il copie l'enregistrement du formulaire, car le fait d'appuyer sur un bouton du formulaire principal fait perdre le focus sur le sous-formulaire
    le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Me.[Sous Formulaire].SetFocus
        DoCmd.GoToRecord , , acGoTo, Me.[Sous Formulaire].Form.CurrentRecord
        DoCmd.RunCommand acCmdSelectRecord
        DoCmd.RunCommand acCmdCopy
        DoCmd.GoToRecord , , acNewRec
        DoCmd.RunCommand acCmdSelectRecord
        DoCmd.RunCommand acCmdPaste

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Bonsoir, tee_grandboi
    Un grand merci
    Mais seule la première ligne a été recopiée
    Même lorsqu’on place le curseur sur autre ligne
    Alors que lorsque j’élimine le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DoCmd.GoToRecord , , acGoTo, Me.[xFS51-Produits].Form.CurrentRecord
    La ligne sur laquelle est placée le curseur est recopiée mais sur un nouvel enregistrement
    Donc pour recopier une ordonnance à 3 lignes nous aurons besoins de 3 nouvelles ordonnances, chacune comportant un seul médicament.
    Merci

  15. #15
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Bonjour, tee_grandboi
    Un grand merci
    Lorsque je remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunCommand acCmdSelectRecord
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunCommand acCmdSelectAllRecords
    J’ai un meilleur résultat : toutes les lignes sont recopiées ; Mais !
    Si c’est la première ordonnance
    Message :
    Erreur d’exécution 2105 : Impossible d’atteindre l’enregistrement spécifié.
    Et c’est la ligne : « DoCmd.GoToRecord , , acGoTo, Me.[xFS51-Produits].Form.CurrentRecord » qui pose problème !
    Si j’ajoute moi même une ordonnance vide cela fonctionne bien après un message : « êtes vous sur de vouloir coller ces 3 enregistrements" fonctionne bizarrement : il copie les 3 lignes sur la même ordonnance !
    Donc on approche plus de la bonne solution !
    Merci

  16. #16
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    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 859
    Points : 14 977
    Points
    14 977
    Par défaut
    bonjour,
    Si j’ajoute moi même une ordonnance vide cela fonctionne bien après un message : « êtes vous sur de vouloir coller ces 3 enregistrements" fonctionne bizarrement : il copie les 3 lignes sur la même ordonnance !
    c'est le but vu que c'est du copier/coller basique...donc je ne vois pas comment on peut lui dire qu'il faut changer d'ordonnance ...
    Mais seule la première ligne a été recopiée
    au départ j'ai donné le code pour copier un seul enregistrement

  17. #17
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Bonjour, tee_grandboi
    Un grand merci
    En changeant acCmdSelectRecord par acCmdSelectAllRecords, toutes les lignes sont recopiées

    Mais par la suite le problème se corse

    Merci

  18. #18
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    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 859
    Points : 14 977
    Points
    14 977
    Par défaut
    Ce que j'ai compris c'est que tu veux copier tous les enregistrements d'un sous-formulaire et les coller dans le même sous-formulaire mais que cela ne te convient pas.
    Le copier/coller c'est bien pour des opérations simples par pour des opérations complexes nécessitant des changements dans les clés ou les identifiants.

    Maintenant, si tu décrivais ton besoin fonctionnel et pas technique du genre: je souhaite créer une nouvelle ordonnance à partir d'une précédente, l'ordonnance étant dans un formulaire principal et les lignes de la prescription sont dans un sous-formulaire, ou bien: je souhaite dupliquer toutes les lignes d'une ordonnance se trouvant dans un sous-formulaire vers une nouvelle ordonnance, ... ce serait un peu plus facile de te proposer une solution.
    Après, on verra pour l'aspect technique car il est possible de faire autrement mais je te conseille d'ouvrir un nouveau post si la solution de celui-ci ne correspond pas à ton besoin.

  19. #19
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Bonsoir
    Je vous remercie pour votre soutien
    Merci

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/08/2009, 06h17
  2. Réponses: 1
    Dernier message: 26/06/2008, 17h10
  3. Problème avec la fonction set_param dans matlabrc
    Par imene_t1 dans le forum MATLAB
    Réponses: 2
    Dernier message: 22/11/2007, 13h14
  4. [XSLT]Probléme avec une fonction php dans un fichier xsl!
    Par Mo_Poly dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 29/10/2007, 08h32
  5. Problème avec la fonction rechdom dans un état
    Par ustilago dans le forum IHM
    Réponses: 4
    Dernier message: 30/08/2006, 16h06

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