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 :

Actualisation d'un formulaire parent à la fermeture d'un formulaire enfant [AC-2013]


Sujet :

Access

  1. #1
    Candidat au Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Actualisation d'un formulaire parent à la fermeture d'un formulaire enfant
    Bonjour

    J'utilise Access 2013.
    Je suis en train de monter une base de données pour faire la gestion de nos produits, clients, production et livraison (donc besoin de gestion des stock, assemblage, livraison).
    Le développement avance bien mais je bloque actuellement sur "un détail qui m'agace".

    Le formulaire principal contient une table. Chaque onglet contient un sous formulaire embarque qui affiche les enregistrements d'une des tables principales.
    ** Pour alléger la description de mon problème, j'illustrerai mes propos avec les produits (mais on pourrait généraliser pour tous les onglets)**
    Donc dans l'onglet Produits, j'ai
    - un sous formulaire sbfrmProduit (contenu dans le container listeProduits) qui liste l'ensemble des enregistrements de la table tProduits
    - un bouton (cmdNouveauProduit) qui permet d'ajouter un nouveau produit par l'ouverture de la fiche produit (formulaire fproduit) en mode ajout. Ce formulaire est également ouvert si l'on clique sur le nom d'un produit dans la liste sbfrmproduit.

    Mon problème est que lorsque j'appelle la méthode refresh (sur l'objet sbfrmProduit) à la fermeture du formulaire enfant fproduit, Access réinitialise la vue sur l'objet listeProduits et se replace en début de liste, ainsi si on ajoute par exemple un 50eme produit, à la fermeture de la fiche produit. Comme on affiche que les 30 premiers produits, il faut donc descendre dans la liste pour visualiser le nouvel ajout.

    J'ai tenté de suivre les indications données ici. Mais access ne me permet pas d'ajouter des classes, la ligne de code "Public Class FormEnfant" s'affiche en rouge

    J'ai chercher des pistes sur les forums.. sans succès. J'espère que quelqu'un pourra m'aider ou me préciser un lien vers un tutoriel ou un post qui traite ce genre d'astuce. Merci d'avance

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 088
    Points : 5 204
    Points
    5 204
    Par défaut
    Bonjour,

    Il me semble que ce problème ne devrait exister qu'à l'exécution de requery et non refresh
    Pour contourner cela il faut mémoriser la ligne en cours avant et revenir dessus après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim pointeur as long
    pointeur = Me.CurrentRecord
    Me.Requery
    Me.SelTop = pointeur
    Ca marche aussi pour le parent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    pointeur = Me.Parent.CurrentRecord
    Me.Parent.Requery
    Me.Parent.SelTop = pointeur
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Candidat au Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci je vais tenter d'implanter ca et je vous tiens au courant.

  4. #4
    Candidat au Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Je dois mal comprendre une affaire... ca ne marche pas.

    J'ai insérer ton code mais j'ai une erreur lorsque je cherche a récupérer le pointeur sur la fenêtre parent. Je pensais au début que c'était car j'appelais l'ouverture de la fiche produit via une macro, je l'ai donc remplacer par du code vba mais j'ai la même erreur : la référence parent semble inexistante (voir capture d'ecran ci-dessous)

    Nom : Error_NoParentRef_when_fProduit_Close.png
Affichages : 1133
Taille : 43,4 Ko

    Que fais-je de mal ?

    J'ai monter une petite BD test permettant de montrer ce que je veux faire (voir en PJ). Peut-être comprendras-tu mieux mon erreur.

    Merci pour ton aide. Toute suggestion sera acceptée !!!
    Fichiers attachés Fichiers attachés

  5. #5
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 088
    Points : 5 204
    Points
    5 204
    Par défaut
    Personnellement je n'ai jamais utilisé de macro, que du VBA...

    Citation Envoyé par eglimois Voir le message
    lorsque j'appelle la méthode refresh (sur l'objet sbfrmProduit) à la fermeture du formulaire enfant fproduit
    Il y a un malentendu car il est impossible de fermer un sous-formulaire ou un onglet, on ne peut que changer d'onglet ou fermer la fenêtre principale

    J'utilise mon code chaque fois que je veux rafraichir toute la fenêtre depuis un sous formulaire sans perdre mes positions (en général dans un xxx_afterupdate)
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  6. #6
    Candidat au Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Avez-vous regarder ma BD test ? Si oui vous verrez que je ferme la fiche produit (subfrmProduit) qui est une formulaire indépendant (mode dialog). A sa fermeture je veux rafraichir le sous-formulaire embarqué ListeProduit (du formulaire principal Accueil).

    Je viens de comprendre une chose je pense : mon formulaire subfrmProduit n'a pas de parent. je pensais au départ que le form parent etait celui qui permettait l'ouverture du formulaire. Une chose de comprise mais par contre je ne sais toujours pas comment faire pour conserver le currentRecord de ma liste de produit...

    Si d'autres on une idée je suis preneuse.

  7. #7
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 088
    Points : 5 204
    Points
    5 204
    Par défaut
    C'est le même principe pour actualiser le formulaire toto à distance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim pointeur as long
    pointeur = form_toto.CurrentRecord
    form_toto.Requery
    form_toto.SelTop = pointeur
    NB : ça marche aussi avec la syntaxe forms("toto") au lieu de form_toto. C'est plus "logique" mais plus long
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  8. #8
    Candidat au Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Bon finalement voici ma solution implantée si d'autre on le meme probleme

    J'appelle le code suivant à l'ouverture de de la fiche Produit pour savoir s'il s'agit d'un nouvel enregistrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim IsNewProduct As Boolean
     
    Private Sub Form_Open(cancel As Integer)
     
        IsNewProduct = IIf(IsNull(Me.IdProduit), True, False)
        'Test
        'MsgBox IIf(IsNewProduct, "Nouveau Produit", "Produit existant n°" & Me.IdProduit) ' a décommentez si vous souhaitez valider le fonctionnement
     
    End Sub
    à la fermeture de la fiche j'appelle les lignes suivantes afin de visualiser le dernier enregistrement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub Form_Close()
        Dim position As Long
     
        If IsNewProduct Then
            Forms![ACCUEIL]![ListeProduits].Form.Requery
            Forms![ACCUEIL]![ListeProduits].Form.Recordset.MoveLast
        End If
     
    End Sub
    Note : si l'enregistrement est déjà existant et qu'on ne fait que le modifié, ACCESS se charge de mettre à jour la liste automatiquement. Mon probleme était que dans ce dernier cas, j'appellai comme meme le requery et je perdais la position de la barre de défilement.

    Merci Nico de t'être penché sur mon problème... je vais tacher de faire simple dans le futur pour ne pas compliquer pour rien mon code !!!!

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 25/06/2014, 12h23
  2. Réponses: 24
    Dernier message: 27/04/2011, 12h27
  3. Réponses: 2
    Dernier message: 07/04/2009, 14h16
  4. Réponses: 1
    Dernier message: 10/04/2007, 18h09
  5. Réponses: 5
    Dernier message: 20/09/2006, 11h26

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