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 :

Rafraichir formulaire après duplication DAO


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 103
    Points : 60
    Points
    60
    Par défaut Rafraichir formulaire après duplication DAO
    Bonsoir,

    J'ai créé un formulaire indépendant dans ma BDD.
    Sur ce formulaire j'ai placé un bouton pour dupliquer l'enregistrement en cours dont voici le 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Private Sub btn_dupliquer_Click()
    Dim Rst As DAO.Recordset
    Dim Db As DAO.Database
    Dim sql As String
    Set Db = CurrentDb
     
    sql = "SELECT * From [test] WHERE numoffre = " & txt_numoffre
     
        Set Rst = Db.OpenRecordset(sql)
     
        With Rst
     
        Rst.AddNew
        Rst.Fields("nclient").Value = Me.txt_client
        Rst.Fields("vehicule").Value = Me.txt_vehicule
        Rst.Fields("carosserie").Value = Me.txt_carosserie
     
        Rst.Update
        Rst.MoveNext
        Rst.Close
     
        End With
     
    Set Db = Nothing
    Set Rst = Nothing
     
    End Sub
    (j'ai supprimé les différents champs à dupliquer, peu d'utilité).

    Ce code me duplique bien l'enregistrement que je consulte dans la table.
    Cependant, en aucun le formulaire n'est mis à jours en m'affichant le nouvel enregistrement.

    J'ai utilisé un Me.Requery après le mais rien n'y fait.
    N'ayant pas trouvé de problème similaire je me suis permis de poster mon problème.

    Je vous remercie par avance de votre aide,
    Maxime

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Ton formulaire étant indépendant, le Requery ne sert à rien, car il est utilisé pour rafraichir le formulaire à partir de sa source de donnée, ce qui n'est pas le cas ici (car formulaire indépendant).

    Dans ton cas, il faut que tu remettes à vide la propriété Value de tes zones de texte.

    Pour cela il te faut réaliser une boucle de type For ... Each

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim oCtrl As Control
        For Each oCtrl In Me.Controls
            If TypeOf oCtrl Is TextBox Then
                oCtrl.Value = ""
            End If
        Next oCtrl
    Starec

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 103
    Points : 60
    Points
    60
    Par défaut
    Bonjour Starec et Merci de ta réponse!

    Je ne vois pas du tout comment utiliser ton code.
    A quoi correspondant oCtr ?

    De plus, comment lui dire d'afficher le dernier enregistrement créé?

    Merci de ta réponse, je nage total la!

    Maxime

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Citation Envoyé par maxime350 Voir le message
    Bonjour Starec et Merci de ta réponse!

    Je ne vois pas du tout comment utiliser ton code.
    Le code est à mettre à la fin avant le End Sub
    A quoi correspondant oCtr ?
    Le principe de ce code est de parcourir tous les contrôles de ton formulaire, de détecter les zones de texte et de mettre une chaine vide à l'intérieur
    De plus, comment lui dire d'afficher le dernier enregistrement créé?
    Je ne comprends plus, tu dis que ton formulaire est indépendant, donc il n'est lié à aucune source (Table ou requête), donc pourquoi veux-tu afficher le dernier enregistrement.
    A moins que tu te soit mal expliqué
    je nage total la!
    Qu'est-ce qui ne va pas ?

    Starec

    Maxime[/QUOTE]

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 103
    Points : 60
    Points
    60
    Par défaut
    Starec,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Je ne comprends plus, tu dis que ton formulaire est indépendant, donc il n'est lié à aucune source (Table ou requête), donc pourquoi veux-tu afficher le dernier enregistrement.
    A moins que tu te soit mal expliqué
    Effectivement il s'agit d'un formulaire indépendant.
    Quand je parle du dernier enregistrement, il s'agit du dernier enregistrement de ma table, donc celui qui vient d'être créé grâce à la duplication.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Qu'est-ce qui ne va pas ?
    En fait le oCtrl, comme tu me l'expliques, couvre tous les contrôles de mon formulaire.
    Je ne vois pas comment il peut attribuer aux différentes zones de texte la valeur correspondante dans la table.

    Cordialement,
    Maxime

  6. #6
    Invité
    Invité(e)
    Par défaut


    Effectivement j'avais mal lu, ce code peut quand même servir pour initialiser les champs de ton formulaire.

    Citation Envoyé par maxime350 Voir le message

    Cependant, en aucun le formulaire n'est mis à jours en m'affichant le nouvel enregistrement.
    En fait tu as déjà le code, par DAO tu affectes à ta table les données de tes zones de texte.

    Pour affecter les données de ta table à tes zones de texte il faut faire l'inverse, ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     Set Rst = Db.OpenRecordset(sql)
     
        With Rst
     
        Rst.AddNew
        Rst.Fields("nclient").Value = Me.txt_client
        Rst.Fields("vehicule").Value = Me.txt_vehicule
        Rst.Fields("carosserie").Value = Me.txt_carosserie
     
        Rst.Update
        Rst.MoveNext
        Rst.Close
     
        End With
    Deviendrait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Set Rst = Db.OpenRecordset(sql)
     
         Me.txt_client = Rst.Fields("nclient").Value    
         Me.txt_vehicule = Rst.Fields("vehicule").Value
         Me.txt_carosserie = Rst.Fields("carosserie").Value
     
     
        End With
    En mettant la bonne condition Where dans ta chaine SQL.

    J'espère avoir compris cette fois

    Starec

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 103
    Points : 60
    Points
    60
    Par défaut
    Starec,

    Je vais regarder tout ça ce soir!!
    Mais là, à vu d'œil, je ne comprends pas!

    Je te tiens au courant,
    Merci,
    Maxime

  8. #8
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    912
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 912
    Points : 1 372
    Points
    1 372
    Par défaut
    Moi non plus je ne comprends pas trop.

    1ère remarque: je suppose que ton champ [numoffre] est un AutoNumber ? Sinon il faudra ajouter une partie pour le déterminer.
    2ème remarque: je ne vois pas pourquoi passer par un recordet indépendant et à quoi sert ce sql dans ton openrecordset. Pour ne pas juste utiliser le RecordsetClone ?

    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
     
    Private Sub btn_dupliquer_Click()
        Dim Rst As DAO.Recordset
        Set Rst =  me.RecordsetClone
        dim newNumOffre
     
        With Rst
            .AddNew
            .Fields("nclient").Value = Me.txt_client
            .Fields("vehicule").Value = Me.txt_vehicule
            .Fields("carosserie").Value = Me.txt_carosserie
            .Update
            ' Recupérer l'id du nouveau record pour y aller
            newNumOffre=.numOffre
            .Close
     
        End With
     
        Set Rst = Nothing
     
        ' Rafraîchir
        me.requery
     
        ' Se repositionner sur le nouveau record
        '...
     
    End Sub

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 103
    Points : 60
    Points
    60
    Par défaut
    Effectivement mon champ numoffre est un Numéro auto.
    Quand je valide mon offre, ce champ est activé et affiché en prenant le dernier numoffre dans la table.

    J'ai lu dans la FAQ que le RecordestClone était possible, cependant je n'arrive pas à l'utiliser.

    J'ai une erreur 7951: Vous avez entré une expression dont la référence à la propriété ClôneRecordset n'est pas valide.

    Je l'utilise de cette manière:

    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
    Private Sub btn_dupliquer_Click()
    Dim Rst As DAO.Recordset
    Dim Db As DAO.Database
    Dim sql As String
    Set Db = CurrentDb
     
    sql = "SELECT * From [test] WHERE numoffre = " & txt_numoffre
     
        Set Rst = Db.OpenRecordset(sql)
     
        Set Recordset = Me.RecordsetClone
     
        Rst.Update
        Rst.Close
     
    Set Db = Nothing
    Set Rst = Nothing
     
    End Sub

  10. #10
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    912
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 912
    Points : 1 372
    Points
    1 372
    Par défaut
    Ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Recordset=me.RecorsetClone
    ne veut rien dire car "RecordSet" n'est pas une variable. Faut utiliser une variable ! ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rst=me.RecorsetClone
    Essaye le code que je t'ai suggéré dans le post précédent.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 103
    Points : 60
    Points
    60
    Par défaut
    Bonjour lvr,

    en essayant ton code la même erreur en ressort:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    erreur 7951: Vous avez entré une expression dont la référence à la propriété ClôneRecordset n'est pas valide.
    Je ne sais que faire,
    Maxime

  12. #12
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    912
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 912
    Points : 1 372
    Points
    1 372
    Par défaut
    Je t'avoue que je vais être court en temps, ma femme ayant accouché hier.
    Sans voir ta db, je ne peux pas vraiement te dire où ça foire

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 103
    Points : 60
    Points
    60
    Par défaut
    Bonjour lvr et merci de ta préoccupation.

    J'ai décidé de prendre le problème différemment.
    1/ Mon formulaire est indépendant.
    2/ Lors de la sauvegarde mon champ NumAuto s'affiche et indique la valeur maximale NumAuto de la table. Donc pas de sauvegarde, pas de NumAuto, normal.)

    Donc, je force l'utilisateur à sauvegarder sinon il ne peut pas dupliquer.
    Etant un formulaire indépendant, si je ne réactualise pas les valeurs des champs en vba, ceux-ci les gardes.

    Lors de la duplication je cache donc le champ NumOffre en lui attribuant une valeur null

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.txt_numoffre.visible = False
    Me.txt_numoffre.Value = ""
    J'affiche un MsgBox confirmant la duplication.

    Ainsi je dispose des valeurs rentrées avant la duplication, que je peux modifier à ma guise avant de sauvegarder et d'attribuer un nouveau NumOffre.

    Merci à Starec et lvr pour votre aide,
    Maxime

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

Discussions similaires

  1. Rafraichir DIV après envoi d'un formulaire
    Par Djaydjay13 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 16/07/2010, 13h48
  2. [MySQL] Comment empêcher le renvoi d'un formulaire après clic sur rafraichir
    Par pcdj dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 19/01/2007, 00h42
  3. Récuperer la valeur d'un champ d'un formulaire après onblur
    Par kerido dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 13/09/2005, 16h58
  4. Rafraichir dbgrid apres insertion d'une donnée ds une table
    Par gizmorambo dans le forum Bases de données
    Réponses: 7
    Dernier message: 11/01/2005, 17h03
  5. [ JSP ] Réaffichage des données d'un formulaire apres un ret
    Par captainpouet dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 23/04/2004, 12h55

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