Bonjour.

J'ai un formulaire dont le recordsource est lié à un objet requête de ma base de données. Dans celui-ci j'ai les habituelles commandes de navigation [Premier, précédent, suivant et Dernier].

Mon souci c'est que, parfois, j'ouvre ce formulaire avec un filtre pour qu'il m'affiche un enregistrement en particulier. Et à ce moment, je souhaiterai désactiver les boutons de navigation. Donc dans l'idée, au chargement du formulaire, je teste combien d'enregistrements compte le recordset du formulaire comme ceci :

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
Private Sub Form_Load()
 
    If Me.Recordset.RecordCount < 2 Then
        CmdPremier.Enabled = False
        CmdPrecedent.Enabled = False
        CmdSuivant.Enabled = False
        CmdDernier.Enabled = False
        CmdNvFigurant.Enabled = False
    Else
        CmdPremier.Enabled = True
        CmdPrecedent.Enabled = True
        CmdSuivant.Enabled = True
        CmdDernier.Enabled = True
        CmdNvFigurant.Enabled = True
    End If
 
End Sub
Eh bien, il s'avère que Me.Recordset.RecordCount vaut 1 au moment de vérifier la condition. Je le vois en mode d'exécution pas à pas... Puis la valeur du recordcount est mis à jour. Donc que mon formulaire ait un filtre ou pas, mes boutons de navigation sont toujours désactivés !

Avez-vous la solution (qui m'échappe) à ce problème ? Je pense pourtant être dans le bon événement du formulaire, quoique ?

Merci d'avance pour vos réponses.

Cordialement.

-- EDIT : solution trouvée --

Bon désolée pour le dérangement, j'ai trouvé la solution à mon problème http://www.pcreview.co.uk/forums/thread-1138627.php

En fait je suis sur l'enregistrement courant, et donc le recordset me renvoie 1 par rapport à celui-là. Pour que la propriété recordcount soit mise à jour, il me suffit de me déplacer jusqu'au dernier enregistrement du jeu :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
    Dim nbEnreg As Integer
 
    nbEnreg = Me.Recordset.RecordCount
 
    If nbEnreg > 0 Then
        Me.Recordset.MoveLast
        Me.Recordset.MoveFirst
    End If
    nbEnreg = Me.Recordset.RecordCount
Et à la fin je récupère la bonne valeur
Du coup je met ma condition juste après et ça fonctionne déjà mieux.

A++