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

VBA Access Discussion :

Re-exécuter la requête qui alimente un formulaire


Sujet :

VBA Access

  1. #1
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Points : 142
    Points
    142
    Par défaut Re-exécuter la requête qui alimente un formulaire
    Re-bonjour tout le monde.

    Je suis tout fier d'avoir réussi à programmer la modification d'un champ d'une table en cliquant sur une case à cocher dans un formulaire, et ça marche comme je le souhaitais, j'ai vérifié. Je l'ai fait en une seule ligne "DoCmd.RunSQL...".

    Mais maintenant, je voudrais ré-exécuter la requête qui alimente ce formulaire, et qui combine cette table avec une autre. Est-ce que c'est possible (franchement, j'espère !), est-ce que ça se fait par "DoCmd.RunCommand". J'ai cherché chez Google, mais je n'ai pas (encore !) trouvé.

    AMIcalement.

  2. #2
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Points : 142
    Points
    142
    Par défaut
    En continuant à chercher, j'ai trouvé un message où l'on suggérait de faire suivre par un "Me.Requery", alors je l'ai essayé. Le code se compile, mais... le requête n'est pas ré-exécutée : le champ est une case à cocher, associé à une valeur "Vrai/Faux". La requête sous-jacente ne retourne que les enregistrements où la case est "Faux". Avec mon truc, la valeur passe bien à "Faux", mais la requête retourne quand-même l'enregistrement.

    Merci de me corriger.

    AMIcalement.

  3. #3
    Membre éprouvé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 904
    Points : 1 069
    Points
    1 069
    Par défaut
    Bonjour,
    Google est ton ami
    Mais, la doc Access en local l'est encore plus : https://www.microsoft.com/en-us/down....aspx?id=40326
    .

  4. #4
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Points : 142
    Points
    142
    Par défaut
    C'est gentil, merci, mais :
    - c'est Access 2010 que j'ai : je vais essayer de l'installer, on va voir, mais j'ai un gros doute.
    - quand tu es sur la page, ils te proposent très gentiment de choisir la langue, entre ... l'anglais. Je suis tout à fait capable de lire la doc anglaise, mais d'abord, j'ai du mal avec l'hégémonisme de l'anglais partout (pour moi, le grand remplacement se situe plutôt là !) et, en plus, pour apprendre, c'est quand même la double peine.

    AMIcalement.

  5. #5
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Points : 142
    Points
    142
    Par défaut
    J'ai trouvé un "OfficeResKit14itpro.chm" qui a bien l'air d'être prévu pour Office 2010, et en français, qui plus est, mais à le regarder comme ça, vite fait, je ne vois pas bien ce que je vais pouvoir en faire : il m'a l'air d'être plein d'un baratin infiniment touffu sur toutes les extraordinaires amélioration que Microsft n'arrête pas d'apporter à toutes ses applications, pourtant déjà extraordinairement pleines d'un nombre incalculable de chose extraordinairement merveilleuses, mais à part ça, comment trouver l'instruction miraculeuse qui va faire que ma requête sous-jacente va bien s'exécuter pour prendre en compte ma modification d'une valeur dans une table...

    Il est trop tard ce soir...

    AMIcalement.

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 653
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 653
    Points : 34 370
    Points
    34 370
    Par défaut
    Salut,

    tu parles d'une requête qui alimente un formulaire, mais le requery ne ferait pas l'affaire ?

    C'est quoi ton SQL qui alimente le dit formulaire, qu'on se fasse une tête stp ?

  7. #7
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Points : 142
    Points
    142
    Par défaut
    Merci de répondre.

    Deux tables sont combinées dans la requête, dont les lignes sont affichées successivement, en boucle, dans un formulaire. Une case à cocher permet de désigner une ligne comme "effectuée" : elle n'a plus à apparaître dans les résultats de la requête : il faut donc que la requête soit ré-évaluée. Voici le code :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Effectué_Click()
        DoCmd.RunSQL "UPDATE Rendez-vous SET Effectué = TRUE WHERE Numéro = " & Me("Numéro"), False
        Me.Requery
    End Sub
    Mais la requête n'est pas ré-exécutée. Peut-être faudrait-il fermer et ré-ouvrir le formulaire ?

    AMIcalement

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 653
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 653
    Points : 34 370
    Points
    34 370
    Par défaut
    OK,

    est-ce que tu peux nous montrer la requête qui alimente les données de ton formulaire stp ?

    Quel type de donnée contient le champ Numéro ?

  9. #9
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Points : 142
    Points
    142
    Par défaut
    Encore merci.

    Je ne sais pas comment "montrer" la requête, elle est graphique. La table "Rendez-vous" est indexée par le fameux "numéro". Elle contient une champ numérique qui contient l'index de la personne avec le rendez-vous est prévu, et la requête construit des enregistrement dans lesquels la personne apparaît avec son nom son prénom et son adresse. Elles est construite avec l'outil de création de requêtes d'Access, et les enregistrements sont filtrés avec "Effectué =False".

    Ai-je assez répondu à ta question ?

    AMIcalement.

  10. #10
    Membre émérite Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 486
    Points : 2 269
    Points
    2 269
    Par défaut
    Bonjour,
    Dans certains cas il peut s'avérer utile de faire un Me.Refresh après un Me.Requery

  11. #11
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Points : 142
    Points
    142
    Par défaut
    J'essaie de vous montrer les images demandées :
    Le formulaire
    Nom : Post-it.jpg
Affichages : 55
Taille : 13,5 Ko

    et la requête qui l'alimente Nom : Requête.jpg
Affichages : 52
Taille : 110,5 Ko

    et le code associé au formulaire
    Code VBA : 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    Option Compare Database
    #If VBA7 Then
    Private Declare PtrSafe Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
    ( _
        ByVal lpszSoundName As String, _
        ByVal uFlags As Long _
    ) As Long
    #Else
    Public Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
    ( _
        ByVal lpszSoundName As String, _
        ByVal uFlags As Long _
    ) As Long
    #End If
     
    Private Function Alarme()
        sndPlaySound "c:\Windows\media\ring06.wav", &H1
    End Function
     
    Private Sub Effectué_Click()
        DoCmd.RunSQL "UPDATE Rendez-vous SET Effectué = TRUE WHERE Numéro = " & Me("Numéro"), False
        Me.RecordSource = "SELECT * FROM ReqRendez-vous WHERE Effectué = False"
        Me.Requery
    End Sub
     
    Private Sub Form_Current()
     
    End Sub
    Private Sub Form_Open(Cancel As Integer)
    '    CommandBars("MenuContextuelPourFormulaires").Delete ' supprime la barre d'outils avant de la re-créer
     
        Me.TimerInterval = 5000
        Me.Controls("Effectué").SetFocus
    End Sub
     
    Private Sub Form_timer()
        If Me.Recordset.RecordCount = Me.Recordset.AbsolutePosition + 1 Then
            DoCmd.GoToRecord acDataForm, Me.Name, acFirst
        Else
            DoCmd.GoToRecord acDataForm, Me.Name, acNext
        End If
        DoEvents
        If Me("Date-RV") > Me("Jour") Then
            Me.Section(acDetail).BackColor = RGB(255, 255, 0) 'jaune
        ElseIf Me("Date-RV") = Me("Jour") Then
            Me.Section(acDetail).BackColor = RGB(128, 255, 128)  'vert
            If Me("Maintenant") > Me("Heure-alarme") Then
                Alarme
            End If
        Else
            Me.Section(acDetail).BackColor = RGB(255, 128, 128) 'Rouge
        End If
        DoEvents
    End Sub
     
    Private Sub Nom_Click()
        Debug.Print "Numéro : " & Format(Me.NumP)
        Me.TimerInterval = 0 'Arrète la roue des rendez-vous
        DoCmd.OpenForm "Personne", acNormal, , "Numéro = " & Format(Me.NumP), acFormReadOnly, acDialog
     
    End Sub

    En espérant que vous pourrez m'aider.

    AMIcalement.

  12. #12
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 817
    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 817
    Points : 14 911
    Points
    14 911
    Par défaut
    le bon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Effectué_Click()
    '   INUTILE  DoCmd.RunSQL "UPDATE Rendez-vous SET Effectué = TRUE WHERE Numéro = " & Me("Numéro"), False   
    '  INUTILE   Me.RecordSource = "SELECT * FROM ReqRendez-vous WHERE Effectué = False"
        Me.Requery
     
    End Sub

  13. #13
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Points : 142
    Points
    142
    Par défaut
    Il n'y a pas de doute, ça marche. Les deux instructions que tu as "flaguées" ne sont pas "inutiles", elles étaient nuisibles !

    Merci !

    En route pour de nouvelles aventures !

    AMIcalement.

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

Discussions similaires

  1. [AC-2013] Formulaire qui alimente ma table en heure et date
    Par othmane.badri dans le forum IHM
    Réponses: 8
    Dernier message: 03/07/2019, 15h27
  2. Réponses: 2
    Dernier message: 06/03/2014, 07h49
  3. Réponses: 3
    Dernier message: 26/09/2011, 21h27
  4. Réponses: 5
    Dernier message: 04/10/2008, 17h15
  5. Réponses: 1
    Dernier message: 22/09/2005, 16h15

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