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 les enregistrements


Sujet :

Access

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 86
    Points
    86
    Par défaut Se déplacer dans les enregistrements
    Bonjour,

    Me revoilà, je ne comprends pas ceci: malgré l'action movenext, le code reste bloqué sur le premier enregistrement. Pourquoi? Et comment résoudre ce problème?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    oRst.MoveFirst
    x = 0
    i = 1
           Do Until (i > NbEnregistrement) Or (x <> 0)
               If (oRst.Fields("Code_Fournisseur").Value <> i) Then
                   x = i
               End If
           i = i + 1
           oRst.MoveNext
           Loop
    Merci de votre aide.

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Peut-être que la valeur du champ "Code_Fournisseur" dans le premier enregistrement est différente de 1.
    Du coup le code met une valeur différente de 0 dans x et tu quittes la boucle quand x <>0.

    Pour vérifier :
    - Mets un point d'arrêt sur la ligne i = 1
    - Continue l'exécution pas à pas avec la touche F8

    Tu verra exactement comment le programme se déroule.

    A+

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 86
    Points
    86
    Par défaut
    Non c'est pas le problème.
    J'ai déjà vérifier cela. Il reste vraiment sur le premier enregistrement.

  4. #4
    Faw
    Faw est déconnecté
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    1 169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 169
    Points : 1 383
    Points
    1 383
    Par défaut
    Salut, que retourne NbEnregistrement? (que tu peux remplacer par
    )
    Je ne comprends rien à Access...Mais je me soigne.
    Moteur de recherche
    DAO

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    et en écrivant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    oRst.MoveFirst
    x = 0
    i = 1
          Do Until oRst.Eof
              If oRst.Fields("Code_Fournisseur").Value <> i Then
                   x = i
                   Exit Do
               End If
               i = i + 1
             oRst.MoveNext
          Loop
    que se passe t'il?

    Cordialement,

    Philippe

  6. #6
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 86
    Points
    86
    Par défaut
    Nbenregistrement retourne le nombre d'enregistrement de ma table, car j'en ai besoin ds mon code.
    Donc je n'utilise pas oRst.eof, à la place je vérifie que NbEnregistrement<>0.

  7. #7
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 86
    Points
    86
    Par défaut
    Merci pr ton code philben, mais ca donne rien de satisfaisant.

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    La vérité est donc ailleurs...

    Quel est le type de la colonne "Code_Fournisseur" (numérique ?)

    Quelle est la syntaxe d'ouverture du recordset oRst ?

    Cordialement,

    Philippe

  9. #9
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 86
    Points
    86
    Par défaut
    Voici pour tes questions:
    C'est du numérique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim oRst As DAO.Recordset
    Dim oDb As DAO.Database
    Set oDb = CurrentDb
    Set oRst = oDb.OpenRecordset("tblFournisseur")
    Sinon j'ai essayé avec une boucle for next et un exit for, j'ai le même problème.
    Je crois que je vais reprendre l'ensemble du code à 0.

  10. #10
    Faw
    Faw est déconnecté
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    1 169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 169
    Points : 1 383
    Points
    1 383
    Par défaut
    Ca ne nous apprend rien sur le reste du code, et comment tu vas chercher
    ton fameux NbEnregistrement qui pour l'occasion est le même que oRst.Recordcount...

    http://access.developpez.com/faq/?page=SQL#Parcourirrst
    http://access.developpez.com/faq/?pa...es#Recordcount
    Je ne comprends rien à Access...Mais je me soigne.
    Moteur de recherche
    DAO

  11. #11
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 86
    Points
    86
    Par défaut
    Voici l'ensemble du code:

    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
    Sub AjoutCode_Fournisseur()
    Dim oRst As DAO.Recordset
    Dim oDb As DAO.Database
    Dim Resultat As String
    Set oDb = CurrentDb
    For i = 1 To (Forms!frmEntree!lstCodeFournisseur.ListCount)
        If (Forms!frmEntree!txtOrigine = Forms!frmEntree!txtOrigine.Column(0, i - 1)) Then
            Resultat = "Existant"
        End If
    Next
    Set oRst = oDb.OpenRecordset("tblFournisseur")
    If (Resultat <> "Existant") And (IsNull(Forms!frmEntree!txtOrigine) = False) Then
            NbEnregistrement = oRst.RecordCount
            If (NbEnregistrement = 0) Then
                x = 1
                Else:   oRst.MoveFirst
                        x = 0
                            For i = 1 To NbEnregistrement
                                If (oRst.Fields("Code_Fournisseur").Value = i) Then
                                    x = 0
                                    Else: x = i
                                End If
                                oRst.MoveNext
                            Next
                        If x = 0 Then
                            x = NbEnregistrement + 1
                        End If
            End If
        oRst.AddNew
        oRst.Fields("Code_Fournisseur").Value = x
        oRst.Fields("Origine").Value = Forms!frmEntree!txtOrigine
        oRst.Update
    End If
     
    DoCmd.Requery "txtOrigine"
    oRst.Close
    oDb.Close
    Set oRst = Nothing
    Set oDb = Nothing
    End Sub

  12. #12
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Qu'est-ce qui te fais dire que le code reste sur le 1er enregistrement (ce qui sous-entendrait que MoveNext n'a aucun effet) ?

    Sinon, à la place de je mettrai A+

  13. #13
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 86
    Points
    86
    Par défaut
    En fait j'avais une erreur ds la suite du code, et à ce moment i était = 2, c'est à dire que normallement j'aurais du etre sur le deuxième enregistrement. Or la valeur du champs était celle du premier enregsitrement.

  14. #14
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    re bonjour,

    il manque <oRst.MoveLast> avant
    <NbEnregistrement = oRst.RecordCount>

    Le compte n'est donc pas bon.

    Philippe

  15. #15
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Est-ce que la table tblFournisseur a une clé primaire ou des indexes ?
    Dans le cas contraire les enregistrements n'ont pas d'ordre défini.
    Si tu as une clé ou un indexe sur Code_Fournisseur utilise le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set oRst = oDb.OpenRecordset("tblFournisseur")
    oRst.Index = "NomIndexe"  ' PrimaryKey pour la clé primaire

  16. #16
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 86
    Points
    86
    Par défaut
    Code_Fournisseur est l'index de la table, et c'est numero auto donc les enregistrements sont classé par ordre croissant.

    Pour l'histoire du compte, je ne pense pas que ce soit nécessaire moveLast, j'ai déjà vérifier la valeur de cette variable elle fonctionne correctement.

  17. #17
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Je viens de faire l'expérience.
    J'ai créé une table tblFournisseur (Code_Fournisseur, Nom), clé primaire=Code_Fournisseur (Entier Long)

    Je crée dans l'ordre les fournisseurs 1, 2, 3, 4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim oRst As DAO.Recordset
    Dim oDb As DAO.Database
     
    Set oDb = CurrentDb
    Set oRst = oDb.OpenRecordset("tblFournisseur")
     
    Do While Not oRst.EOL
       Debug.Print oRst("Code_Fournisseur")
       oRst.MoveNext
    Loop
    Avec ce code j'obtiens
    1
    2
    3
    4

    Je supprime l'enregistrement du fournisseur 3
    J'ajoute un nouvel enregistrement avec code fournisseur = 3.

    J'ouvre la table. J'ai bien
    1
    2
    3
    4

    J'exécute le même code, j'obtiens
    1
    2
    4
    3

    Je reprends le code et j'ajoute l'indexe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim oRst As DAO.Recordset
    Dim oDb As DAO.Database
     
    Set oDb = CurrentDb
    Set oRst = oDb.OpenRecordset("tblFournisseur")
    oRst.index = "Primarykey"
     
    Do While Not oRst.EOF
       Debug.Print oRst("Code_Fournisseur")
       oRst.MoveNext
    Loop
    j'obtiens
    1
    2
    3
    4

    Par ailleurs, si tu as un champ Numéro Auto, tu ne peux pas boucher les "trous".

    A+

  18. #18
    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
    Citation Envoyé par philben
    re bonjour,

    il manque <oRst.MoveLast> avant
    <NbEnregistrement = oRst.RecordCount>

    Le compte n'est donc pas bon.

    Philippe

    Tout dépend le type de recordset utilisé. Ici, s'il s'agit d'une table simple (non liée à une autre base) alors comme aucun paramètre n'est spécifié, le recordset sera de type dbopentable. Dans ce type de recordset (et uniquement dans ce type), la propriété recordcount retourne le nombre d'enregistrements présents dans le curseur

  19. #19
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour Tofalu,

    En effet, j'étais en tables liées et le RecordCount n'était pas bon.

    Merci pour vos lumières, Monsieur

    Cordialement,

    Philippe

  20. #20
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 86
    Points
    86
    Par défaut
    Ca fonctionne.
    Merci beaucoup LedZeppII et à ceux qui m'ont aidé.

    Je laisse le code final:
    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
    Sub AjoutCode_Fournisseur()
    Dim oRst As DAO.Recordset
    Dim oDb As DAO.Database
    Dim Resultat As String
    Set oDb = CurrentDb
    For i = 1 To Forms!frmEntree!txtOrigine.ListCount
        If Forms!frmEntree!txtOrigine = Forms!frmEntree!txtOrigine.Column(0, i - 1) Then
            Resultat = "Existant"
        End If
    Next
    Set oRst = oDb.OpenRecordset("tblFournisseur")
    oRst.Index = "Primarykey"
    If (Resultat <> "Existant") And (IsNull(Forms!frmEntree!txtOrigine) = False) Then
            NbEnregistrement = oRst.RecordCount
            If (NbEnregistrement = 0) Then
                x = 1
                Else:   oRst.MoveFirst
                        x = 0
                            For i = 1 To NbEnregistrement
                                If (oRst.Fields("Code_Fournisseur").Value = i) Then
                                    x = 0
                                    Else: x = i
                                    Exit For
                                End If
                                oRst.MoveNext
                            Next
                        If x = 0 Then
                            x = NbEnregistrement + 1
                        End If
            End If
        oRst.AddNew
        oRst.Fields("Code_Fournisseur").Value = x
        oRst.Fields("Origine").Value = Forms!frmEntree!txtOrigine
        oRst.Update
    End If
     
    DoCmd.Requery "txtOrigine"
    oRst.Close
    oDb.Close
    Set oRst = Nothing
    Set oDb = Nothing
    End Sub

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

Discussions similaires

  1. recherche dans les enregistrements
    Par Invité dans le forum VBA Access
    Réponses: 4
    Dernier message: 20/01/2009, 17h40
  2. Se déplacer dans les enregistrements
    Par dakota77 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/12/2008, 22h32
  3. Se déplacer dans les colonnes
    Par deaqu1 dans le forum Excel
    Réponses: 1
    Dernier message: 25/03/2007, 16h55
  4. Rechercher un mot dans les enregistrements d'une table access
    Par codial dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/11/2006, 21h35

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