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

VBA Access Discussion :

Actualiser sous formulaire [AC-2013]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Inscrit en
    avril 2011
    Messages
    445
    Détails du profil
    Informations forums :
    Inscription : avril 2011
    Messages : 445
    Points : 95
    Points
    95
    Par défaut Actualiser sous formulaire
    Bonjour à tous,

    Cela fait de nombreuses heures que je bloque sur un problème qui devrait être tout bête.

    J’ai un formulaire principal « Menu » contenant un sous formulaire « ResteFiltre » basé sur le résultat d’une requête « recherche ».

    Lorsque je fais un double clic sur mon sous formulaire « ResteFiltre », j’ai un autre formulaire « Reservation » qui s’ouvre .

    Ce formulaire réservation me permet de saisir une quantité à réserver et d’imprimer une étiquette, il est donc lié à la requête « recherche » également . J’ai donc créé un bouton « Etiquette » dans ce formulaire contenant ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub PrintEtiquette_Click()
     
    DoCmd.Save
    Forms![Menu]![ResteFiltre].Form.Requery
    DoCmd.OpenReport "Etiquette", acViewNormal
    DoCmd.Close acForm, "Reservation"
     
    End Sub
    Normalement la quantité affichée sur le sous formulaire « ResteFiltre » devrait se mettre à jour mais ce n’est pas le cas. Ça fonctionne très bien si j’actualise tout avec le bouton du ruban par contre mon code ne permet pas de le rafraichir.

    J’ai essayé avec Me.Refresh mais aucun résultat non plus.

    Je sèche complètement et j'ai besoin de votre aide.

    Merci d’avance

  2. #2
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité mais encore activé
    Inscrit en
    novembre 2004
    Messages
    4 969
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité mais encore activé

    Informations forums :
    Inscription : novembre 2004
    Messages : 4 969
    Points : 8 421
    Points
    8 421
    Par défaut
    bonjour,
    Forms![Menu]![ResteFiltre].Form.Requery est pourtant la bonne commande pour actualiser les données...
    Il faudrait en savoir un peu plus, par exemple: les données de la requête recherche est-elle mise à jour ou est-ce simplement un filtre appliqué ? car dans ce dernier cas, le formulaire Reservation ne pourra pas appliquer ce filtre.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...

  3. #3
    Membre régulier
    Inscrit en
    avril 2011
    Messages
    445
    Détails du profil
    Informations forums :
    Inscription : avril 2011
    Messages : 445
    Points : 95
    Points
    95
    Par défaut
    Merci pour ta rapide réponse.

    Cette requête est juste un filtre appliqué.

    Il faut donc mettre à jour la requête avant tu penses?

    Ce qui est étrange c'est que si j'ouvre la requête "à la main" j'ai le bon résultat affiché dans ma requête, mais toujours pas dans le formulaire

  4. #4
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité mais encore activé
    Inscrit en
    novembre 2004
    Messages
    4 969
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité mais encore activé

    Informations forums :
    Inscription : novembre 2004
    Messages : 4 969
    Points : 8 421
    Points
    8 421
    Par défaut
    Il faut donc mettre à jour la requête avant tu penses?
    Si tu appliques une filtre sur la requête, cela ne changera rien d'enregistrer la requête car le sous-formulaire étant chargé, on a vu que le Requery ne fonctionne pas, d'autant plus que le formulaire Reservation affiche bien les bonnes données.
    Essaie ce code à la place du Requery, cela force la requête à se recharger après les changements:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![Menu]![ResteFiltre].Form.RecordSource = Forms![Menu]![ResteFiltre].Form.RecordSource
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...

  5. #5
    Membre régulier
    Inscrit en
    avril 2011
    Messages
    445
    Détails du profil
    Informations forums :
    Inscription : avril 2011
    Messages : 445
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    Si tu appliques une filtre sur la requête, cela ne changera rien d'enregistrer la requête car le sous-formulaire étant chargé, on a vu que le Requery ne fonctionne pas, d'autant plus que le formulaire Reservation affiche bien les bonnes données.
    Essaie ce code à la place du Requery, cela force la requête à se recharger après les changements:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![Menu]![ResteFiltre].Form.RecordSource = Forms![Menu]![ResteFiltre].Form.RecordSource
    J'ai rajouté ta ligne de code et remis Me.refresh

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DoCmd.Save
    DoCmd.OpenQuery "ResteFiltre", , acReadOnly
    Forms![Menu]![ResteFiltre].Form.RecordSource = Forms![Menu]![ResteFiltre].Form.RecordSource
    Me.Refresh
    DoCmd.OpenReport "Etiquette", acViewNormal
    DoCmd.Close acForm, "Reservation"

    Il y a du mieux mais ce n'est pas encore ça.
    Désormais, lorsque mon formulaire "Reservation" se ferme, je n'ai pas le sous-formulaire "ResteFiltre" qui s'actualise. Par contre si j'ouvre à nouveau le formulaire "Reservation" que je refais un mouvement ce qui le ferme à nouveau, là mon formulaire "ResteFiltre" s'actualise mais avec l'avant dernier mouvement réalisé.

    Ce n'est pas encore ça mais c'est déjà mieux

  6. #6
    Membre émérite Avatar de hyperion13
    Homme Profil pro
    Calot120 - Enseignant Post Bac
    Inscrit en
    octobre 2007
    Messages
    1 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Calot120 - Enseignant Post Bac
    Secteur : Enseignement

    Informations forums :
    Inscription : octobre 2007
    Messages : 1 849
    Points : 2 850
    Points
    2 850
    Par défaut
    Salut
    Possible d'avoir une capture d'écran de tes form et sform ?
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    GMT+4 - 21°19'18" S - 055°25'32" E
    Inutile de me contacter par MP
    Si l'une des réponses est pertinente, n'oubliez pas alors de clôturer le sujet en cliquant sur

  7. #7
    Membre régulier
    Inscrit en
    avril 2011
    Messages
    445
    Détails du profil
    Informations forums :
    Inscription : avril 2011
    Messages : 445
    Points : 95
    Points
    95
    Par défaut
    Oui bien sûr.

    Voici une capture d'écran en mode création.

    Pour information le formulaire "Reservation" s'ouvre en pop-up
    Nom : Base.jpg
Affichages : 25
Taille : 506,0 Ko

  8. #8
    Membre émérite Avatar de hyperion13
    Homme Profil pro
    Calot120 - Enseignant Post Bac
    Inscrit en
    octobre 2007
    Messages
    1 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Calot120 - Enseignant Post Bac
    Secteur : Enseignement

    Informations forums :
    Inscription : octobre 2007
    Messages : 1 849
    Points : 2 850
    Points
    2 850
    Par défaut
    Tu peux essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub PrintEtiquette_Click()
    If Me.Dirty = True Then Me.Dirty = False
    Forms![Menu]![ResteFiltre].Form.Requery
    DoCmd.OpenReport "Etiquette", acViewNormal
    DoCmd.Close acForm, "Reservation", acSaveYes
    End Sub
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    GMT+4 - 21°19'18" S - 055°25'32" E
    Inutile de me contacter par MP
    Si l'une des réponses est pertinente, n'oubliez pas alors de clôturer le sujet en cliquant sur

  9. #9
    Membre régulier
    Inscrit en
    avril 2011
    Messages
    445
    Détails du profil
    Informations forums :
    Inscription : avril 2011
    Messages : 445
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    Tu peux essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub PrintEtiquette_Click()
    If Me.Dirty = True Then Me.Dirty = False
    Forms![Menu]![ResteFiltre].Form.Requery
    DoCmd.OpenReport "Etiquette", acViewNormal
    DoCmd.Close acForm, "Reservation", acSaveYes
    End Sub
    Je ne sais pas comment tu as fais mais ça fonctionne!

    J'imagine que cela vient de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Me.Dirty = True Then Me.Dirty = False
    Pourrais-tu m'expliquer ce code?

    Merci

  10. #10
    Membre émérite Avatar de hyperion13
    Homme Profil pro
    Calot120 - Enseignant Post Bac
    Inscrit en
    octobre 2007
    Messages
    1 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Calot120 - Enseignant Post Bac
    Secteur : Enseignement

    Informations forums :
    Inscription : octobre 2007
    Messages : 1 849
    Points : 2 850
    Points
    2 850
    Par défaut
    Me.Dirty est une propriété de form qui permet de détecter une modification de données dans le form.
    La contribution Ms est ici.

    A priori ta sub ne détectait pas les modifications dans ton pop-up.
    La solution, il y en a peut-être d'autres, était de forcer la détection des modifs dans ton pop-up.
    Je ne connais que Me.Dirty

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub PrintEtiquette_Click()
    If Me.Dirty = True Then
        Forms![Menu]![ResteFiltre].Form.Requery
        Me.Dirty = False
    End If
    DoCmd.OpenReport "Etiquette", acViewNormal
    DoCmd.Close acForm, "Reservation", acSaveYes
    End Sub
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    GMT+4 - 21°19'18" S - 055°25'32" E
    Inutile de me contacter par MP
    Si l'une des réponses est pertinente, n'oubliez pas alors de clôturer le sujet en cliquant sur

  11. #11
    Membre régulier
    Inscrit en
    avril 2011
    Messages
    445
    Détails du profil
    Informations forums :
    Inscription : avril 2011
    Messages : 445
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    Je ne connais que Me.Dirty
    Et c'est suffisant

    Un grand merci à toi en tout cas. Je commençais à devenir fou !

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

Discussions similaires

  1. actualisation sous formulaire
    Par malabar92 dans le forum IHM
    Réponses: 13
    Dernier message: 01/06/2007, 01h50
  2. Réponses: 3
    Dernier message: 10/05/2007, 14h21
  3. Actualisation sous formulaire
    Par Mus30 dans le forum IHM
    Réponses: 2
    Dernier message: 21/12/2006, 18h31
  4. Réponses: 8
    Dernier message: 24/11/2006, 16h06
  5. actualisation sous formulaire
    Par nicolovitch dans le forum Access
    Réponses: 2
    Dernier message: 26/07/2006, 13h41

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