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 :

Se déplacer dans un recordset : premier, dernier, précédent, suivant...


Sujet :

Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut Se déplacer dans un recordset : premier, dernier, précédent, suivant...
    Bonjour,

    Mon problème est le suivant :

    J'ai une liste d'incidents dans une liste,
    Je lique sur une des lignes et àa m'ouvre un formulaire qui correspond à l'incident sélectionné.
    Ensuite ce que j'aimerais faire c'est pouvoir passer d'un incident à l'autre (enregistrement précédent, suivant...) mais là ça ne marche pas, car il me dit : "impossible d'atteindre l'enregistrement spécifié".

    Est ce que tu pourrais m'aider s'il te plait ?

    Je précise que j'ouvre le formulaire de la manière suivante :

    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
    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
    62
    63
    64
    65
    66
     
     
     
    Public Function FctOpenFicheIncident( _
        ByRef StrRegion As String, _
        ByRef StrDroits As String, _
        ByRef StrStatut As String, _
        ByRef StrUser As String) As Boolean
     
    On Error GoTo ErrHandler
     
        Dim StrSvDroits       As String
        Dim StrSvRegion       As String
        Dim StrSvStatut       As String
        Dim StrSvUser         As String
     
        Dim StrCheminPJ As String
     
        FctOpenFicheIncident = False
     
     
        If IsNull(Form_FrmListeDesIncidents.LstResultQuery.Column(7)) Then
            GoTo ExitHandler
        Else
            StrStatut = Form_FrmListeDesIncidents.LstResultQuery.Column(7)      
        End If
     
        DoCmd.OpenForm "FrmFormulaireIncident"
     
        If Not ModDroits.FctDroitsEnregistrement(StrDroits, StrRegion, StrStatut, StrUser) Then
            Exit Function
        End If
        If Not ModSQL.FctGetRowSourceFicheIncident(StrRowSource) Then
            Exit Function
        Else
            Form_FrmFormulaireIncident.Filter = "[NumIncident] = " & Form_FrmListeDesIncidents.LstResultQuery.Column(0, Form_FrmListeDesIncidents.LstResultQuery.ItemsSelected(0))
            Form_FrmFormulaireIncident.FilterOn = True
    'Me.Filter = "Country = 'USA'"
    'Me.FilterOn = True
        End If
     
        Form_FrmFormulaireIncident.Requery
     
        Form_FrmFormulaireIncident.TxtRegionParam.Value = StrRegion 'IIf(StrRegion = "NAT", "*", StrRegion)
     
        If Not FctChargeRegion(StrRegion) Then
            Exit Function
        End If
     
        If Not ModFichier.FctChercheCheminPJ(StrCheminPJ) Then
            Exit Function
        End If
     
        If IsDate(Form_FrmFormulaireIncident.ClosLe) Then
            Form_FrmFormulaireIncident.CmdCloturer.Enabled = False
        End If
     
        FctOpenFicheIncident = True
    ExitHandler:
        Exit Function
    ErrHandler:
    'Resume
        MsgBox Err.Description, vbExclamation, CstAppName
        Resume ExitHandler
     
    End Function
    Est ce que quelqu'un pourrait m'aider s'il vous plait ? J'avoue que je ne sais plus trops quoi faire.

    Merci d'avance.

    Marco.

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Euh, il faudrait soigner la mise en page, le code est illisible et le titre ne correpsond pas du tout au problème puisque ce n'est pas openform qui lève l'erreur

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut Enregistrement précédent, suivant, premier, dernier... ?
    excuses moi, mais je ne comprends pas. Pourquoi le code est illisible ? Il est correctement indenté...
    Est ce qu'il y a quelquechose que je fais mal ou qui maque ?
    C'est peut être un problème d'affichage car chez moi ça s'affiche correctement.

    En fait ici ce que je montre c'est la manière dont j'ouvre la formulaire... C'eszt important cdar il est possible que l'erreur qui se produit ensuite soit dûe à celà ?

    Enfin tu as sans doute raioson et je vais te donner la partie du code du formulaire qui génère l'erreur.

    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
    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
    62
     
     
    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:
        If Err.Number = 2499 Then
            Resume Next
        End If
        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:
        If Err.Number = 2499 Then
            Resume Next
        End If
        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:
        If Err.Number = 2499 Then
            Resume Next
        End If
        MsgBox Err.Description, vbExclamation, CstAppName
        Resume ExitHandler
    End Sub
    Par avance je te remercie.

    Marco.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut
    Oups pardon,
    Désolé je me suis trompé, j'ai mis les précisions sur ce source dans un autre de mes posts.

    Je rajoute donc le bout de code en pièce attachée, puiqsu'apparemment on m'a signalé que ça ne s'affichait pas correctement chez certains.

    Merci.

    Marco.
    Fichiers attachés Fichiers attachés

  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Plutot que les docmd.gotorecord, utilise les méthodes du recordset

    Me.Recordset.MoveFirst
    Me.Recordset.MoveLast
    Me.Recordset.MoveNext
    Me.Recordset.MovePrevious

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut
    Est ce qu'on les utilise tout seuls comme ça ou est ce qu'il faut rajouter un refresh ou un requery après ?

    Parceque chez moi apapremment ça n'a pas d'effet.

    Par avance merci.

    Marco.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut
    En fait apparemment ça ne marche pas.
    Il se positionne systématiquement sur un enregistrement qui n'est aps 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.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut
    Voici mon bout de code qui correspond à l'ouverture du formulaire "détail" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
        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

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut
    En fait je crois que j'ai trouvé un début de piste :

    Si j'invalide la partie du code dans laquelle je donne un filtre pour l'ouverture du formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
            Form_FrmFormulaireIncident.Filter = "[NumIncident] = " & Form_FrmListeDesIncidents.LstResultQuery.Column(0, Form_FrmListeDesIncidents.LstResultQuery.ItemsSelected(0))
            Form_FrmFormulaireIncident.FilterOn = True
    Apparemment les "movenext, moveprevious, movelast, movefirst" se remettent à fonctionner correctement.

    Question : y a t il un moyen pour ouvrir un enregistrement précis sans passer par le filtre dont je donne la syntaxe ici ?

    Par avance merci.

    Marco.

  10. #10
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Dans le cas qui est le tiens :

    Me.Recordset.FindFirst "[NumIncident] = " & Form_FrmListeDesIncidents.LstResultQuery.Column(0, Form_FrmListeDesIncidents.LstResultQuery.ItemsSelected(0))
    ça devrait coller

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut
    Bonjour Tofalu,

    Merci beaucoups de ta réponse.
    Je suis en train d'essayer en ce momment même et pour le momment ça ne marche pas.
    Il ne se positinne pas sur le bon enregistrement.

    Est ce que tu aurais une idée de là où ça pourrait venir ?

    Par avance merci.

    Marco.

  12. #12
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    slt,

    ce serait sympa de ne pas ouvrir plusieurs messages avec différents codes (une fois un filtre dans docmd.openform, une fois le filtre à l'ouverture du formulaire)
    http://www.developpez.net/forums/sho...d.php?t=145276

    on n'est pas là pour le faire le tri et réfléchir sur du code abandonné

    merci

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut
    Salut,

    Apparemment ces différentes solutions ne fonctionnent pas.

    J'avoue que je ne sais plus trops quoi tenter.

    Merci si jamais vous avez une idée.

    A bientôt.

    Marco.

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut
    Salut,

    Donc voici à présent ce que j'esaye de faire :

    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
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
     
    
    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.

  15. #15
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    slt,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         Me.Refresh
        Me.Recalc
        Me.Requery
    à quoi ça sert tout ça? il ne faut essayer tout au hasard sinon ça ne marche pas

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut
    Merci Arkham,
    Effectivement c'est ce que j'ai fais il y a un petit instant et effectvement en enlevant ces tois lignes, ça marche.
    Par contre maintent j'arrive plus à lancer mon application Access... Mais c'est une autre histoire.

    On peut dire que ce problème là est résolu.

    Merci à tous les deux.

    Marco.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/05/2006, 16h19
  2. Problème de valeur null dans un recordset
    Par Petzouille57 dans le forum Access
    Réponses: 3
    Dernier message: 19/05/2005, 11h27
  3. [C#] Modifier et se déplacer dans un DataGrid
    Par fabrice1596 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 16/09/2004, 22h10
  4. [Fichiers] Enregistrer/Déplacer dans un répertoire
    Par babyboy dans le forum Entrée/Sortie
    Réponses: 19
    Dernier message: 12/05/2004, 14h33
  5. [VB6] Sauvegarder la position dans un Recordset
    Par inotna2099 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 29/04/2003, 17h35

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