Balayage d'enregistrements sur formulaire filtré... Est ce possible ?

Balayage d'enregistrements sur formulaire filtré... Est ce possible ? - VB/VBA/VBS - Programmation

Marsh Posté le 12-05-2006 à 10:51:47    

Bonjour,
 
Le nouveau problème du jour vient du fait que j'essaye de balayer des enregistrements avec un formulaire que je lance sur un champs filtré dans Access 2003.
 
Est ce que c'est possible ?
 
A bientôt et merci d'avance.
 
Marco.
 
A titre d'exemple, voici le code associé aux bouttons qui me permettent de me déplacer d'un enregistrement à l'autre (FctDroitsEnregistrement est une fonction qui doit me permettre en fonction des droits associés à la fiche incident qui est visualisée de dire si l'utilisateur a droit ou non de voir/modifier...) :
 
 
Private Sub CmdPremier_Click()
On Error GoTo ErrHandler
 
    DoCmd.GoToRecord , , acFirst
    If Not ModDroits.FctDroitsEnregistrement(StrDroits, StrRegion, _
      Statut.Value, StrUser) Then
        Exit Sub
    End If
ExitHandler:
    Exit Sub
ErrHandler:
    MsgBox Err.Description
    Resume ExitHandler
 
End Sub
 
Private Sub CmdPrecedent_Click()
On Error GoTo ErrHandler
    DoCmd.GoToRecord , , acPrevious
    If Not ModDroits.FctDroitsEnregistrement(StrDroits, StrRegion, _
     Statut.Value, StrUser) Then
        Exit Sub
    End If
ExitHandler:
    Exit Sub
ErrHandler:
    MsgBox Err.Description, vbExclamation, CstAppName
    Resume ExitHandler
 
End Sub
 
Private Sub CmdSuivant_Click()
On Error GoTo ErrHandler
    DoCmd.GoToRecord , , acNext
    If Not ModDroits.FctDroitsEnregistrement(StrDroits, StrRegion, _
      Statut.Value, StrUser) Then
        Exit Sub
    End If
ExitHandler:
    Exit Sub
ErrHandler:
    MsgBox Err.Description, vbExclamation, CstAppName
    Resume ExitHandler
 
End Sub
 
Private Sub CmdDernier_Click()
On Error GoTo ErrHandler
    DoCmd.GoToRecord , , acLast
    If Not ModDroits.FctDroitsEnregistrement(StrDroits, StrRegion, _
      Statut.Value, StrUser) Then
        Exit Sub
    End If
ExitHandler:
    Exit Sub
ErrHandler:
    MsgBox Err.Description, vbExclamation, CstAppName
    Resume ExitHandler
 
End Sub
 
 
Cotmar


---------------
Marco
Reply

Marsh Posté le 12-05-2006 à 10:51:47   

Reply

Marsh Posté le 12-05-2006 à 14:48:07    

Personne n'a une idée pour m'aider ?
 
Peut être que ma question est mal posée...


---------------
Marco
Reply

Marsh Posté le 12-05-2006 à 15:38:29    

Je sais ce qu'est un formulaire intégrant une condition de filtre (propriétés .Filter et .FilterOn) mais je ne suis pas sûr de ce que tu veux dire par « balayer des enregistrements »


Message édité par tegu le 12-05-2006 à 15:38:53
Reply

Marsh Posté le 12-05-2006 à 16:05:10    

En fait ce que je veux faire c'est dans sélection d'enregistrements, me positionner directement sur celui qui a été choisi et ensuite pourvoir faire défiler tous les autres (premier, précédent, suivant, dernier avec les boutons sur le formulaire).
 
En fait mon problème vient du fait comme j'ouvre mon formulaire sur un filtre il me renvoie un message d'erreur lorsque je clique sur précédent, suivant... Le message est ainsi libellé : "Impossible d'atteindre l'enregistrement spécifié"
 
Je sais pas si c'est plus clair comme ça ?


Message édité par cotmar le 12-05-2006 à 16:22:36

---------------
Marco
Reply

Marsh Posté le 13-05-2006 à 20:42:58    

Utilises-tu la propriété .RecordsetClone de ton formulaire ?
Les formulaires Access ont des propriétés d'accès aux données qui leur sont liées. De mémoire tu dois avoir .RecordsetClone qui devrait te permettre de te positionner correctement sur un enregistrement particulier et .Bookmark pour synchroniser le recordset et l'affichage du formulaire (frm.Bookmark = rs.Bookmark).
Sans Access sous la main c'est difficile de t'aider plus.


Message édité par tegu le 13-05-2006 à 20:43:23
Reply

Marsh Posté le 13-05-2006 à 21:23:18    

Merci Tegu,
Merci de ton aide. C'est déjà un début de piste.
Est ce que tu aurais d'autres infos sur ces instructions ?
Un exremple de code par exemple ?
Par aavance je te remercie.
Bon week end.
Marco.


---------------
Marco
Reply

Marsh Posté le 15-05-2006 à 09:31:36    

Bonjour à tous,
 
J'espère que vous avez passé un très bon week end.
En fait je ne sais pas utiliser ces pripriétés (RecordsetClone et Bookmark).
Est ce que tu pourrais m'aider s'il te plait ?
 
Merci et à plus tard.
 
Marco.


---------------
Marco
Reply

Marsh Posté le 15-05-2006 à 17:54:53    

En fait je ne sais pas comment m'en sortir.
 
J'ai fais différents essais avec le "movefirst, movelast,movenext,moveprevious"...
 
Il se positionne systématiquement sur un enregistrement qui n'est pas spécialement le premier, mais qui semble être au millieu de ma liste.
 
Pour préciser un petit peut les choses à ce point :
 
-J'ai deux écrans qui s'enchainent,
-Dans le premier j'ai une liste d'incidents,
-Lorsque je clique sur un des incidents (n'importe lequel), j'ai son détail qui s'affiche dans un autre écran (qui me permet de faire de la mise à jour),
-Ensuite je veux pouvoir passer d'un enregistrement à l'autre sur l'écran "fiche des incidents" (écran nommé précédemment "détail" ).
 
Et en fait c'est ça que j'arrive pas à faire.
 
En fait mon écran "détail" reçoit pour recordset une requète (car l'utilisateur n'a pas le droit de voir tous les enregistrements).
 
Pour ouvrir l'écran "détail" je donne un argument dans la clause where (le numéro d'incident).
 
D'où ma question : est ce que mon problème pour utiliser "movefirst, movenext, movelast, moveprevious" ne viendrait pas de ma façon d'ouvrir le formulaire ?
 
Par avance merci.
 
Marco qui désespère de trouver réponse à sa question.


---------------
Marco
Reply

Marsh Posté le 15-05-2006 à 18:13:59    

Voici la manière dont j'ouvre le fameux formulaire "détail" :
 
    If StrDroits = CstAdmin Then
        DoCmd.OpenForm "FrmFormulaireIncident", acNormal, StrRequete, "[NumIncident] = " & Form_FrmListeDesIncidents.LstResultQuery.Column(0, Form_FrmListeDesIncidents.LstResultQuery.ItemsSelected(0)), acFormEdit, , StrOpenArgs
    ElseIf StrDroits = CstVisualisation Then '=> Attention au cas de l'accès en modif
        DoCmd.OpenForm "FrmFormulaireIncident", acNormal, StrRequete, "[NumIncident] = " & Form_FrmListeDesIncidents.LstResultQuery.Column(0, Form_FrmListeDesIncidents.LstResultQuery.ItemsSelected(0)), acFormReadOnly, , StrOpenArgs
    ElseIf StrDroits = CstCreation Then
        DoCmd.OpenForm "FrmFormulaireIncident", acNormal, StrRequete, "[NumIncident] = " & Form_FrmListeDesIncidents.LstResultQuery.Column(0, Form_FrmListeDesIncidents.LstResultQuery.ItemsSelected(0)), acFormAdd, , StrOpenArgs
    End If


---------------
Marco
Reply

Marsh Posté le 16-05-2006 à 13:42:52    

Donc Tegu,
 
Donc voici à présent ce que j'esaye de faire sur tes conseils :
 
 
 
Private Sub Form_Load()
On Error GoTo ErrHandler
    Dim StrArgs         As String
    Dim rs              As DAO.Recordset
    Dim StrRowSource    As String
 
    If Not IsNull(Me.OpenArgs) Then
        StrArgs = Me.OpenArgs
        StrDroits = Split(StrArgs, "¤" )(0)
        StrRegion = Split(StrArgs, "¤" )(1)
        StrStatut = Split(StrArgs, "¤" )(2)
        StrUser = Split(StrArgs, "¤" )(3)
    Else
        Exit Sub
    End If
 
    TxtRegionParam.SetFocus
    TxtRegionParam.Text = StrRegion
    NomRedacteur.SetFocus
    NomRedacteur.Text = StrUser
     
    If StrRegion = "NAT" Then
        DatAnalyseNational.Value = Date
    End If
    If Not IsNull(Me.NumSite.Column(0)) Then
    'Alimente les champs "Région" et "Ville" en fonction de la valeur de la combo "NumSite"
        Me.TxtRegion.SetFocus
        Me.TxtRegion.Text = Me.NumSite.Column(2)
        Me.TxtVille.SetFocus
        Me.TxtVille.Text = Me.NumSite.Column(1)
    End If
         
    If Not IsNull(Me.ClosLe.Value) Then
        CmdCloturer.Enabled = False
    End If
         
    Statut = IIf(Me.Statut.Value = "Privé", "Public", "Privé" )
    Me.Statut.Value = Statut
    Me.CmdPartager.Caption = IIf(Statut = "Public", "Isoler", "Partager" )
    Me.CmdPartager.Enabled = False
     
    If Not ModDroits.FctDroitsEnregistrement(StrDroits, StrRegion, Statut.Value, StrUser) Then
        Exit Sub
    End If
 
    If Not ModSQL.FctChargeRegion(StrRegion) Then
        Exit Sub
    End If
    Me.FilterOn = False
     
'=> Voici la partie qui m'intéresse
 
    Dim StrSearchName As String
    Set rs = Me.RecordsetClone
    StrSearchName = Str(Form_FrmListeDesIncidents.LstResultQuery.Column(0, Form_FrmListeDesIncidents.LstResultQuery.ItemsSelected(0)))
    rs.FindFirst "NumIncident = " & StrSearchName
     
    If rs.NoMatch Then
        Err.Description = "Enregistrement inexistant"
        Err.Raise 1
    Else
        Me.Bookmark = rs.Bookmark
    End If
    rs.Close
    Me.Refresh
    Me.Recalc
    Me.Requery
     
ExitHandler:
    Set rs = Nothing
    Exit Sub
ErrHandler:
    MsgBox Err.Description, vbExclamation, CstAppName
    Resume ExitHandler
End Sub
 
 
D'après vous, pourquoi est ce que ça ne fonctionne pas ?
 
Existe t il une autre méthode pour aboutir au résultat souhaité ?
 
Par avance merci.
 
 
Marco.


---------------
Marco
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed