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 :

code défile trop vite


Sujet :

Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations forums :
    Inscription : Juin 2006
    Messages : 35
    Points : 23
    Points
    23
    Par défaut code défile trop vite
    Bonjour
    J'ai un formulaire 'Totaux banques' pour calculer les sommes débit et crédit ainsi que solde issus d'autres formulaires (banques), exemple:
    débit1, crédit1, solde1
    débit2, crédit2, solde2
    TotalSolde
    Celà fonctionne si je laisse défiler le code VB pas à pas détaillé, mais non en enlevant les points d'arrêt dans le code. Est-ce que le code défile trop vite et ainsi le programme n'a pas le temps de calculer les totaux?
    Peut-on faire les calculs sans ouvrir et fermer le formulaire en question?
    Merci d'avance pour me donner un conseil

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Puisqu'apparemment c'est un pb de code, il faut nous en montrer un peu et notammement le module critique.

    A+
    "Always look at the bright side of life." Monty Python.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    il faut demander le rafraichissement du formulaire
    Elle est pas belle la vie ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations forums :
    Inscription : Juin 2006
    Messages : 35
    Points : 23
    Points
    23
    Par défaut code défile trop vite
    Voici une partie du code en question.

    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
    Private Sub Form_Current()
     
        Dim curDébit55, curCrédit55, curSolde55 As Currency ‘ banque A
        Dim curDébit56, curCrédit56, curSolde56 As Currency ‘ banque B
        ‘etc pour banques C,D
     
        DoCmd.OpenForm "frm55"
        curDébit55 = Forms!frm55!txtTotalDébit
        curCrédit55 = Forms!frm55!txtTotalCrédit
        curSolde55 = Forms!frm55!txtSolde
        Forms!frmTotaux!Débit55 = curDébit55
        Forms!frmTotaux!Crédit55 = curCrédit55
        Forms!frmTotaux!Solde55 = curSolde55
        DoCmd.Close acForm, "frm55"
     
        DoCmd.OpenForm "frm56"
        curDébit56 = Forms!frm56!txtTotalDébit
        curCrédit56 = Forms!frm56!txtTotalCrédit
        curSolde56 = Forms!frm56!txtSolde
        DoCmd.Close acForm, "frm56"
        Forms!frmTotaux!Débit56 = curDébit56
        Forms!frmTotaux!Crédit56 = curCrédit56
        Forms!frmTotaux!Solde56 = curSolde56
     
    ‘ etc code pour autres banques    
    End Sub

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations forums :
    Inscription : Juin 2006
    Messages : 35
    Points : 23
    Points
    23
    Par défaut code défile trop vite
    Bonjour
    J'ai ajouté en dernière ligne:
    me.refresh
    mais les totaux débit et crédit restent en blanc, tandis que les soldes indiquent 0.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    ajoute un doevents
    Elle est pas belle la vie ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations forums :
    Inscription : Juin 2006
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    J'ai ajouté le doevents au début du code mais ça fonctionne toujours pas.
    Les totaux en blanc et les soldes à 0.

  8. #8
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour,

    Je ne comprends pas bien ton code. Pourquoi pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DoCmd.OpenForm "frm55"
    DoEvents
    Forms!frmTotaux!Débit55 = Forms!frm55!txtTotalDébit
    Forms!frmTotaux!Crédit55 = Forms!frm55!txtTotalCrédit
    Forms!frmTotaux!Solde55  = Forms!frm55!txtSolde
    DoCmd.Close acForm, "frm55"
     
    ...
    Bon courage,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations forums :
    Inscription : Juin 2006
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Merci PGZ (et tous les autres)
    J'ai fait le code comme tu me l'as proposé mais le problème reste le même.
    Celà ne fonctionne que si j'interromps le code à la 2. ligne (après DoEvents)avec un point d'arrêt.
    J'ai bien peur que je dois faire un nouveau formulaire (ou état) d'autre manière, mais j'ai aucune idée comment procéder, quoi faire d'autre façon.

  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Il faut commencer par maitriser l'évenement d'affectation.

    1) Apparamment tu ouvres les formulaires frm & UnChiffre (form55) pour affecter le résultat des débits, crédit et solde. Est ce exact?

    2) Pourquoi ne pas faire les affectations à la fermeture des formulaires du type frm5..?
    Amicalement

  11. #11
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    bonsoir,

    Celà ne fonctionne que si j'interromps le code à la 2. ligne (après DoEvents)avec un point d'arrêt.
    Je dis : bizarre...

    Tu peux montrer la procédure en entier? Elle est déclenchée par quoi?

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations forums :
    Inscription : Juin 2006
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Merci DMboup pour ta réponse
    Les résultats se trouvent dans le pied de formulaire de chaque formulaire banque (frm55, frm56 etc):
    txtTotalDébit -> source controle =Somme([Débit])
    txtTotalCrédit -> source controle =Somme([Crédit])
    txtSolde -> source controle =Somme([Débit])-Somme([Crédit])

    Dans le code du formulaire frmTotaux j'ouvre les formulaires de banque pour avoir accès aux objets txtTotalDébit etc du formulaire en question.
    Voici le code du formulaire frmTotaux pour avoir accès au formulaire banque en question (proposé par pgz).
    Avant je stockais les résultats dans des variables, mais le résultat est le même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_Current()
      DoCmd.OpenForm "frm55"
      DoEvents
      Forms!frmTotaux!Débit55 = Forms!frm55!txtTotalDébit ' Ici le point d'arrêt
      Forms!frmTotaux!Crédit55 = Forms!frm55!txtTotalCrédit
      Forms!frmTotaux!Solde55  = Forms!frm55!txtSolde
      DoCmd.Close acForm, "frm55"
    End Sub
    Celà fonctionne seulement si je mets un point d'arrêt dans la 3me ligne, sinon Débit55 et Crédir55 restent vides et le solde55 indique 0.

  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par Kenia
    Les résultats se trouvent dans le pied de formulaire de chaque formulaire banque (frm55, frm56 etc):
    txtTotalDébit -> source controle =Somme([Débit])
    txtTotalCrédit -> source controle =Somme([Crédit])
    txtSolde -> source controle =Somme([Débit])-Somme([Crédit])
    Oui ici j'avais deviné bien que un formulaire pour chaque banque me fait hurler..

    Citation Envoyé par Kenia
    Dans le code du formulaire frmTotaux j'ouvre les formulaires de banque pour avoir accès aux objets txtTotalDébit etc du formulaire en question.

    Private Sub Form_Current()
    DoCmd.OpenForm "frm55"
    DoEvents
    Forms!frmTotaux!Débit55 = Forms!frm55!txtTotalDébit ' Ici le point d'arrêt
    Forms!frmTotaux!Crédit55 = Forms!frm55!txtTotalCrédit
    Forms!frmTotaux!Solde55 = Forms!frm55!txtSolde
    DoCmd.Close acForm, "frm55"
    End Sub
    Donc dans le formulaire frmTotaux tu as tous les champs

    Débit5?, Débit5?, Solde5?
    Débit55, Débit55, Solde55
    Débit56, Débit56, Solde56
    ...
    ...
    Débit5?, Débit5?, Solde5?

    Pour remplir cette ligne Débit55, Débit55, Solde55, tu ouvres le formulaire frm55

    Pour cette ligne Débit56, Débit56, Solde56, tu ouvres le formulaire frm56

    Etc..

    C'est soit cette construction qui ne vas pas ou c'est je ne comprends toujours pas.

    Question
    1. Est ce que les formulaires banques (frm5?) sont tous basés sur la même source?
    2. Pourquoi à l'ouverture de frmTotaux tu ne peux pas faire un Recordset qui puisse directement dans les tables sources les données pour faire le calcul et remplir tous tes champs Débit5?, Débit5?, Solde5? ?
    Amicalement

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations forums :
    Inscription : Juin 2006
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Voici le code en entier du formulaire frmTotaux:

    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
    Private Sub Form_Current()
     
        DoCmd.OpenForm "frm55"
        DoEvents
        Forms!frmTotaux!Débit55 = Forms!frm55!txtTotalDébit
        Forms!frmTotaux!Crédit55 = Forms!frm55!txtTotalCrédit
        Forms!frmTotaux!Solde55 = Forms!frm55!txtSolde
        DoCmd.Close acForm, "frm55"
     
        DoCmd.OpenForm "frm550"
        DoEvents
        Forms!frmTotaux!Débit550 = Forms!frm550!txtTotalDébit
        Forms!frmTotaux!Crédit550 = Forms!frm550!txtTotalCrédit
        Forms!frmTotaux!Solde550 = Forms!frm550!txtSolde
        DoCmd.Close acForm, "frm550"
     
        DoCmd.OpenForm "frm56"
        DoEvents
        Forms!frmTotaux!Débit56 = Forms!frm56!txtTotalDébit
        Forms!frmTotaux!Crédit56 = Forms!frm56!txtTotalCrédit
        Forms!frmTotaux!Solde56 = Forms!frm56!txtSolde
        DoCmd.Close acForm, "frm56"
     
        DoCmd.OpenForm "frm57"
        DoEvents
        Forms!frmTotaux!Débit57 = Forms!frm57!txtTotalDébit
        Forms!frmTotaux!Crédit57 = Forms!frm57!txtTotalCrédit
        Forms!frmTotaux!Solde57 = Forms!frm57!txtSolde
        DoCmd.Close acForm, "frm57"
     
        DoCmd.OpenForm "frm58"
        DoEvents
        Forms!frmTotaux!Débit58 = Forms!frm58!txtTotalDébit
        Forms!frmTotaux!Crédit58 = Forms!frm58!txtTotalCrédit
        Forms!frmTotaux!Solde58 = Forms!frm58!txtSolde
        DoCmd.Close acForm, "frm58"
     
        DoCmd.OpenForm "frm580"
        DoEvents
        Forms!frmTotaux!Débit580 = Forms!frm580!txtTotalDébit
        Forms!frmTotaux!Crédit580 = Forms!frm580!txtTotalCrédit
        Forms!frmTotaux!Solde580 = Forms!frm580!txtSolde
        DoCmd.Close acForm, "frm580"
     
        Me.Refresh
     
    End Sub
    Chaque formulaire est basé sur sa table spécifique:
    frm55 sur tbl55
    frm56 sur tbl56
    etc.

  15. #15
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Je trouves que ca irait mieux comme ca par exemple

    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
     
    Private Sub Form_Current()
    Dim Mbd as Database, DTable As Recordset
    Set Mbd=Currentdb()
     
    ' MAJ tbl55
    Set DTable=Mbd.OpenRecordset("Select Sum(txtTotalDébit) As Debit, Sum(txtTotalCrédit) As Credit From tbl55")
     
            Forms!frmTotaux!Débit55 = DTable("Debit")
            Forms!frmTotaux!Crédit55 = DTable("Credit") 
            Forms!frmTotaux!Solde55 = DTable("Debit")-DTable("Credit") 
     
    ' MAJ tbl56
    Set DTable=Mbd.OpenRecordset("Select Sum(txtTotalDébit) As Debit, Sum(txtTotalCrédit) As Credit From tbl56")
     
            Forms!frmTotaux!Débit56 = DTable("Debit")
            Forms!frmTotaux!Crédit56 = DTable("Credit") 
            Forms!frmTotaux!Solde56 = DTable("Debit")-DTable("Credit") 
     
    ' MAJ tbl550
    idem
     
     
    End Sub
    Amicalement

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations forums :
    Inscription : Juin 2006
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Merci encore une fois DMboup pour ta patience,
    mais je n'arrive pas à ouvrir la variable
    # Dim Mbd as Database #
    Un message d'erreur me dit : erreur de compilation
    type défini par l'utilisateur non défini
    Est-ce que je dois ouvrir une nouvelle bibliothèque, si oui laquelle, pour accéder à ce type?
    Comme tu vois je suis encore bien au début avec mes connaissances de programmation.

  17. #17
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    C'est peut être les références DAO qu'il faut activé.
    dans la fenettre de code Menu=>Outil=>Référence.
    Amicalement

  18. #18
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour,

    Je suis d'accord pour dire que la méthode choisie n'est pas optimale, mais elle devrait marcher. J'ai essayé de reproduire le pb et j'ai compris que la difficulté venait de champs calculés sur l'ensemble des enregistrements du formulaire. Il y a une façon de pallier le problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_Current()
      DoCmd.OpenForm "frm55"
      Docmd.GoToRecord acDataForm,"frm55",acLast
      Forms!frmTotaux!Débit55 = Forms!frm55!txtTotalDébit 
      Forms!frmTotaux!Crédit55 = Forms!frm55!txtTotalCrédit
      Forms!frmTotaux!Solde55  = Forms!frm55!txtSolde
      DoCmd.Close acForm, "frm55"
    End Sub
    Tu consultes ainsi les formulaires 55, 550, 56, 57, 58, 580. Le code peut aussi être condensé.
    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
    Private Sub Form_Current()
    Dim sfrmname As Variant, varfrm as variant
     
    sfrmname = Array("55", "550", "56", "57", "58", "580")
    For i = 0 To 5
      DoCmd.OpenForm "frm" & sfrmname(i)
      Docmd.GoToRecord acDataForm,"frm" & sfrmname(i),acLast
      set varfrm = Forms("frm" & sfrmname)
      Me.Controls("Débit" & sfrmname(i)) = varfrm.txtTotalDébit
      Me.Controls("Crédit" & sfrmname(i)) = varfrm.txtTotalCrédit
      Me.Controls("Solde" & sfrmname(i)) = varfrm.txtTotalSolde
      DoCmd.Close acForm, varfrm.name
    next i
    Me.Refresh
    End Sub
    A débuguer, c'est pour l'idée.

    Maintenant si ces formulaires ont pour source de simples tables, on devrait pouvoir renseigner les champs de frmTotaux avec des fonctions de recherche dans les tables. Je n'en sais rien, mais on peut imaginer par exemple que la valeur TotalCrédit du frm55 c'est aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DSum("Crédit","tbl55")
    Auquel cas la procédure pourrait devenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Form_Current()
    Dim sfrmname As Variant
    sfrmname = Array("55", "550", "56", "57", "58", "580")
    For i = 0 To 5
      Me.Controls("Débit" & sfrmname(i)) = DSum("Débit","tbl" & sfrmname(i))
      Me.Controls("Crédit" & sfrmname(i)) = DSum("Crédit","tbl" & sfrmname(i))
      Me.Controls("Solde" & sfrmname(i)) = DSum("Solde","tbl" & sfrmname(i))
    next i
    Me.Refresh
    End Sub
    Toujours à débuguer. Mais c'est devenu très court et plus rationnel.

    Enfin, on pourrait se demander si connaissant la somme des crédits et des débits, s'il faut lire aussi les soldes ou les calculer directement à partir des deux premiers...

    En espérant que cela t'aide et cordialement,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations forums :
    Inscription : Juin 2006
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    1000 fois merci à pgz et tous les autres qui m'ont aidé.
    Le dernier code de pgz fonctionne.

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

Discussions similaires

  1. [Dev-Pascal] Mon programme se ferme trop vite après la dernière instruction
    Par am002r dans le forum Autres IDE
    Réponses: 4
    Dernier message: 08/05/2007, 10h25
  2. [Free Pascal] La fenêtre console se ferme trop vite
    Par SimoBenz dans le forum Free Pascal
    Réponses: 2
    Dernier message: 02/12/2006, 15h45
  3. Code son trop long
    Par Belegkarnil dans le forum Multimédia
    Réponses: 3
    Dernier message: 28/02/2006, 09h06
  4. Trop vite...
    Par olive-sjs dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/03/2004, 22h51

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