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 :

Lancer Action sur dernier enregistrement


Sujet :

Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Lancer Action sur dernier enregistrement
    Bonjour, me revoilà avec une question simple mais qui m'agace :

    J'écris un fichier TXT à partir d'un formulaire access.

    Grosso modo, je lui dis d'aller au premier enregistrement, d'écrire la valeur d'un champ dans mon fichier.txt, puis d'aller au suivant, jusqu'à âtre au dernier. Là on doit quitter l'action et la procédure.

    Le code simplifié donne ça actuellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set a = fs.CreateTextFile("c:\LIENECR.DAT", True)
    DoCmd.OpenForm "F EXTRACT LIEN"
    DoCmd.GoToRecord , "F EXTRACT LIEN", acFirst
     
    ECRIRE:
    a.WriteLine Forms![F EXTRACT LIEN]![NUMFACTCOMPLET] & Forms![F EXTRACT LIEN]![TOTAL TTC]
    If... "C'est là où je ne trouve pas l'expression qui devrait dire que si on est sur le dernier enregistrement on va à FIN"
    DoCmd.GoToRecord , , acNext
    docmd.goto ECRIRE
     
    FIN:
    'a.Close
    Quelle est la solution ?

  2. #2
    jfc
    Invité(e)
    Par défaut
    Utilise plutôt un Recordset DAO et tu fais ce qui suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim strsql as string
    strsql = "SELECT ...."   ' utilise ta clause SQL du formulaire
    Set rst = currentdb.openrecordset(strsql)
     
    if rst.recordcount > 0 then
       do until rst.eof
           a.WriteLine rs!NUMFACTCOMPLET & rs!TOTAL TTC
           rst.movenext
       loop
     
     
     
    end if

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup, mais il n'y a pas plus simple ? je ne comprends rien !

    En fait, je n'arrive pas à adaper le code à mon projet.

    Il n'y a pas un code ultra basique (?) pour dire :

    1 Aller au premier enregirstrement
    2 Si c'est le dernier, aller à FIN et (end sub)
    3 Si ce n'est pas le dernier, aller et prochain, et ainsi de suite.

    Je croyais qu'il y avait une expression pour dire un truc du style
    if Record=last record then...

    Merci pour ton aide.

  4. #4
    jfc
    Invité(e)
    Par défaut
    la propriété Me.Recordset.RecordCount te donne le nombre d'enregistrements affichés dans ton formulaire

    la propriété Me.CurrentRecord te donne le numéro de l'enregistrement en cours.

    Attention (extraction de l'aide de Microsoft) : La propriété RecordCount n'indique pas le nombre d'enregistrements contenus dans un objet Recordset de type Feuille de réponses dynamique (Dynaset), Instantané (Snapshot) tant que vous n'avez pas eu accès à tous les enregistrements. Ton formulaire est normalement de type Feuilles de répondes dynamique.

    Cela veut dire que pour aussurer le coup, tu dois aller au dernier enregistrement, sauver dans une variable déclarée au niveau du formulaire, le nombre d'enregistrements, retourner à l'enregistrement de départ et commencer ta routine.

    A mon humble avis, la solution de parcourir le recordset est plus simple une fois que l'on a compris comment fonctionne DAO.

    toujours à mon avis, cela vaut la peine de consacrer un peu de temps à apprendre DAO. Par expérience et pour avoir formé 4 apprentis, lorsqu'ils ont compris DAO, de nombreuses actions ont été beaucoup plus simples à réaliser, respectivement DAO te donne une nouvelle puissance à ta base.

  5. #5
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut,

    Un tutoriel à lire : manipulation des enregistrements avec DAO

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci encore JFC, tu viens de nous sortir d'une mauvaise impasse. On a simplement utilisé la commande CurrentRecord en allant au dernier pour mettre en mémoire le nombre d'enregistrements :

    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
    DoCmd.GoToRecord acDataForm, "F LISTE FACTURES LIEN", acLast
    Dim TOTENR As String
    TOTENR = CurrentRecord
    DoCmd.GoToRecord acDataForm, "F LISTE FACTURES LIEN", acFirst
     
    BOUCLE:
    Dim NUMENR As String
    NUMENR = CurrentRecord
    MsgBox [NUMENR] & [TOTENR]
    If NUMENR = TOTENR Then GoTo FIN
    DoCmd.GoToRecord acDataForm, "F LISTE FACTURES LIEN", acNext
    GoTo BOUCLE
     
    FIN:
    MsgBox "FINI"
    C'était tout bête en fait comme souvent, mais on pensait que recordcount permettait de mettre en mémoire le nbre d'enregistrements, un peu comme Current Record. Merci encore.

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

Discussions similaires

  1. [AC-2007] Formulaire/sous formulaire sur dernier enregistrement
    Par Dahitaa dans le forum IHM
    Réponses: 5
    Dernier message: 20/08/2011, 11h00
  2. Réponses: 1
    Dernier message: 26/03/2010, 19h18
  3. Lancer Action sur touche entrée
    Par maxime350 dans le forum VBA Access
    Réponses: 4
    Dernier message: 29/07/2008, 18h08
  4. HFiltre : va sur dernier enregistrement
    Par Harry dans le forum WinDev
    Réponses: 3
    Dernier message: 13/04/2007, 17h46
  5. Réponses: 2
    Dernier message: 21/12/2006, 09h26

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