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

Access Discussion :

Problème récurrent de mise à jour


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 44
    Points : 27
    Points
    27
    Par défaut Problème récurrent de mise à jour
    Bonsoir,

    Juste avant le WE... J'espère que quelqu'un pourra m'aider

    Voilà le problème, en synthèse :
    tblClients
    - CodeClient
    - RaisonSociale
    - Autres...

    Un formulaire frmGestionClients, dans lequel l'enregistrement en cours est sélectionné grâce à une liste déroulante (lstRaisonSociale) affichant la RaisonSociale, et retournant le CodeClient. En fonction du contenu de cette liste, le reste du formulaire se met à jour (adresse, téléphone, etc...).
    Un bouton cmdNouveauClient ouvre un formulaire frmNouveauClient, sur un nouvel enregistrement, pour créer un nouveau client. Si toutes les informations sont conformes, un bouton Valider enregistre le nouveau client dans tblClients.

    Jusque là tout va bien.

    A la fermeture de frmNouveauClient, il y a quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms("frmGestionClients").Controls("lstRaisonSociale").Requery
    pour que la liste déroulante affiche le nouveau client qui vient d'être créé.

    Le problème, c'est que si on le sélectionne dans la liste, les informations "Autres" ne se mettent pas à jour (adresse, etc...)... Ils prennent la valeur qui est la valeur par "défaut" lors de l'ouverture du formulaire (avant tout choix dans la liste déroulante), i.e les valeurs correspondant au premier enregistrement. J'ai essayé un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms("frmGestionClients").Requery ou .Refresh
    et ça remet aussi toutes les valeurs à celle du premier enregistrement.

    Si je ferme le formulaire et que j'y reviens, tout marche bien.

    J'ai le problème pour plusieurs formulaires du même type. J'ai résolu ce problème une fois en enregistrant le numero d'enregistrement du RecordSet avant l'ouverture de frmNouveauClient, ensuite en faisant un Requery sur le formulaire et en lui disant de retourner à ce numero d'enregistrement... Variable globale, etc... Je ne trouve pas ça élégant du tout.

    Quelqu'un connaît-il un moyen simple de résoudre ce problème ?

    Merci et bon WE

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Je suis assez étonné... j'ai eu le même problème dans le dvp d'une application, et je viens de la checker, chez moi un
    placé à la fin du code de mon bouton "modifier"a suffit à régler mon problème.

    Essaye peut être de remettre ce code directement dans la form qui te pose problème ? Au moins tu sera fixé.
    Dans le genre élégant (toujours plus qu'un bouton tt de même), un requery lors du survol de ton menu déroulant, déjà pour voir si le problème vient du changement de page. (avec une variable pour qu'il requery une seule fois)
    Mais là, je rentre dans la catégorie 'Bricolage-bidouillage'

    En attendant que les pros te donnent une solution impec'

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 44
    Points : 27
    Points
    27
    Par défaut
    merci pour ta réponse !

    en fait ma liste se met bien à jour avec le lstRaisonSociale.Requery ; ce qui me pose problème c'est que quand je sélectionne un nouveau client dans cette liste, le formulaire semble ne pas comprendre de quel client je parle...

    Du peu que je comprenne, je crois bien que le RecordSet du formulaire devrait se mettre à jour avec la liste déroulante, mais je ne sais pas comment faire.

    Merci, si quelqu'un pouvait me donner la réponse...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 44
    Points : 27
    Points
    27
    Par défaut
    personne n'a une petite idée...?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 44
    Points : 27
    Points
    27
    Par défaut
    relégué en page 5, ma question ne semble pas mobiliser les foules... Je n'ai toujours trouvé aucune solution après ces quelques jours, est-ce que personne ne connaît la réponse ?

    merci,

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour r@phy,
    Citation Envoyé par r@phy
    Du peu que je comprenne, je crois bien que le RecordSet du formulaire devrait se mettre à jour avec la liste déroulante, mais je ne sais pas comment faire.
    Non, la mise à jour de la liste affichée par le contrôle [lstRaisonSociale] est totalement dissociée de la mise à jour du recordset utilisé par le formulaire [frmGestionClients].

    Tu dois obligatoirement invoquer la méthode Requey pour les deux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Forms("frmGestionClients").Requery 
    Forms("frmGestionClients").Controls("lstRaisonSociale").Requery
    Maintenant, il subsiste ceci:
    Citation Envoyé par r@phy
    J'ai résolu ce problème une fois en enregistrant le numero d'enregistrement du RecordSet avant l'ouverture de frmNouveauClient, ensuite en faisant un Requery sur le formulaire et en lui disant de retourner à ce numero d'enregistrement... Variable globale, etc... Je ne trouve pas ça élégant du tout.
    Le principe est le bon, je ne vois pas d'autre manière de faire.
    Cependant, le numéro d'enregistrement n'offre pas de garantie de repositionner le formulaire sur le bon enregistrement, sauf si tu peux assurer que tout nouvel enregistrement (le nouveau client) apparaît toujours en dernier... c'est un Pb d'ordre et donc de tri.
    A la place j'utiliserais plutôt une information identifiant le client comme son [CodeClient] que tu as mentionné plus haut.

    Sur "l'élégance", là tu peux améliorer la chose.

    Voilà comment je m'y prendrais.

    1. Créer une procédure Sub publique dans le module de code de [frmGestionClients] (je fais l'hypothèse que le champ CodeClient est un numérique entier et qu'il est la source d'un contrôle avec le même nom):
    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
    Public Sub MiseAJour()
        Dim nCodeClient As Long, rs As DAO.Recordset
     
        Set rs = Me.Recordset
     
        If rs.RecordCount = 0 Then
            ' pas d'enregistrement en cours
            nCodeClient = -1
        Else
            ' mémoriser l'enregistrement en cours
            nCodeClient = Me.CodeClient
        EndIf
     
        Me.Requery
        Me.lstRaisonSociale.Requery
     
        If nCodeClient > -1 Then
            Me.Recordset.FindFirst "CodeClient=" & nCodeClient
        EndIf
    End Sub
    2. Dans le module où tu demandes à rafraîchir le formulaire [frmGestionClients], placer le code qui appelle la procédure de mise à jour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms("frmGestionClients").MiseAJour
    P.S. Je n'ai pas testé ce code.

  7. #7
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    slt,

    utilisez la propriété bookmark pour faire ça :
    http://warin.developpez.com/access/dao/?page=partie_5

    Chapitre : 5.3.3. Mémoriser une position

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 44
    Points : 27
    Points
    27
    Par défaut
    Merci beaucoup à vous deux, je vais tester tout ça et je vous tiens au courant...

  9. #9
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    bonjour,

    J'ai bien l'impression que la liste déroulante pour la recherche de la raison sociale n'est pas correcte.

    En effet cette listedéroulante doit être indépendante puis il faut mettre le code qui permet la recherche sur après maj

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub Lm_raisonsociale_AfterUpdate()
        ' Rechercher l'enregistrement correspondant au contrôle.
        Dim rs As Object
     
        Set rs = Me.Recordset.Clone
        rs.FindFirst "[Raisonsociale] = " & Str(Me![Lm_raisonsociale])
        Me.Bookmark = rs.Bookmark
        DoCmd.GoToControl "un controle"
     
    End Sub
    bonne chance

Discussions similaires

  1. Problème récurrent de mise à jour
    Par colorid dans le forum Windows XP
    Réponses: 4
    Dernier message: 07/08/2010, 19h05
  2. Problème avec ma mise à jour
    Par gorgonite dans le forum Ubuntu
    Réponses: 17
    Dernier message: 04/05/2007, 17h03
  3. [FEDORA] Problème avec la mise à jour du kernel
    Par Davidbrcz dans le forum RedHat / CentOS / Fedora
    Réponses: 4
    Dernier message: 23/02/2007, 10h58
  4. Problème SQL SAGE Mise à jour
    Par yancimer dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/10/2006, 21h35
  5. Problème d'une mise à jour
    Par Hamdi dans le forum Access
    Réponses: 2
    Dernier message: 17/09/2005, 13h57

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