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 :

[Vba access 97] Procédure trop longue


Sujet :

Access

  1. #1
    Membre à l'essai
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Points : 12
    Points
    12
    Par défaut [Vba access 97] Procédure trop longue
    Bonjours à tous,

    j'ai un nouveau problème, décidément, je ne m'en sors pas!!

    lors de la compilation de mon module, message d'erreur : "Procédure trop longue"
    Effectivement ma procédure est trés trés longue...
    Elle effectue une multitude de tests sur mes zones de formulaires (35 tests + 8 autres tests imbriqués dans chacun des 35 tests) pour savoirs lesquelles sont remplies afin de determiner quelle fonction lancer...
    Dans cette procédure, il n'y a que des tests, rien d'autres.

    Ma question, comment puis-je réduire ma procédure efficacement?

    Merci a vous d'avance

  2. #2
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Est-ce que tu peux mettre une partie de ton code?

    Mais à mon avis, le plus simple, c'est de créer une fonction paramétrée qui contient tes huit test imbriqué.
    Sa te réduira déjà pas mal je pense.

  3. #3
    Membre à l'essai
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    Voila la partie de code, il s'agit d'un seul test, il y en a 35 comme celui ci

    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
         If Me.TexteLundi1.Text = "" And Me.TexteLundi2.Text = "" And Me.TexteLundi3.Text = "" And Me.TexteLundi4.Text = "" And Me.CocherLundi1.Value = False And Me.CocherLundi36.Value = False Then
            Nbh = Nbh
            NbHS = NbHS
        Else
            If Me.CocherLundi36.Value = False Then
                If Me.TexteLundi1.Text <> "" And Me.TexteLundi2.Text <> "" And Me.TexteLundi3.Text <> "" And Me.TexteLundi4.Text <> "" And Me.CocherLundi1.Value = False Then
                    ' appel fonction pas encors fait
                Else
                If Me.TexteLundi1.Text <> "" And Me.TexteLundi2.Text <> "" And Me.TexteLundi3.Text = "" And Me.TexteLundi4.Text = "" And Me.CocherLundi1.Value = False Then
                        ' appel fonction pas encors fait
                    Else
                    If Me.TexteLundi1.Text <> "" And Me.TexteLundi2.Text <> "" And Me.TexteLundi3.Text = "" And Me.TexteLundi4.Text = "" And Me.CocherLundi1.Value = False Then
                            ' appel fonction pas encors fait
                        Else
                        If Me.TexteLundi3.Text <> "" And Me.TexteLundi4.Text = "" And Me.TexteMardi5.Text = "" And Me.TexteMardi6.Text <> "" And Me.CocherLundi1.Value = True Then
                                ' appel fonction pas encors fait
                            Else
                            If Me.TexteLundi1.Text <> "" And Me.TexteLundi2.Text = "" And Me.TexteLundi3.Text = "" And Me.TexteLundi4.Text <> "" And Me.CocherLundi1.Value = False Then
                                    ' appel fonction pas encors fait
                                Else
                                    msg = MsgBox("Veuillez saisir correctement vos données", vbOKOnly, "Erreur de saisie")
                                    Form_FormHoraire.TexteLundi1.SetFocus
                                End If
                            End If
                        End If
                    End If
                End If
            Else
                If Me.TexteLundi1.Text <> "" And Me.TexteLundi2.Text <> "" And Me.TexteLundi3.Text = "" And Me.TexteLundi4.Text = "" And Me.CocherLundi1.Value = False Then
                        ' appel fonction pas encors fait
                    Else
                    If Me.TexteLundi1.Text <> "" And Me.TexteLundi2.Text <> "" And Me.TexteLundi3.Text = "" And Me.TexteLundi4.Text = "" And Me.CocherLundi1.Value = False Then
                            ' appel fonction pas encors fait
                        Else
                        If Me.TexteLundi3.Text <> "" And Me.TexteLundi4.Text = "" And Me.TexteMardi5.Text = "" And Me.TexteMardi6.Text <> "" And Me.CocherLundi1.Value = True Then
                                ' appel fonction pas encors fait
                            Else
                                msg = MsgBox("Veuillez saisir correctement vos données", vbOKOnly, "Erreur de saisie")
                                Form_FormHoraire.TexteLundi1.SetFocus
                            End If
                        End If
                    End If
            End If
        End If
    Je sais je sais c'est du bidouillage!!
    Les 35 autres tests sont identiques à l'exception de mes noms de zones du formulaires qui changent a chaque test et donc je ne vois pas comment je peux m'y prendre autrement

    Merci de votre aide

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    A mon avis, essai de scinder ton 2ème IF...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    If Me.TexteLundi1.Text = "" And Me.TexteLundi2.Text = "" And Me.TexteLundi3.Text = "" And Me.TexteLundi4.Text = "" And Me.CocherLundi1.Value = False And Me.CocherLundi36.Value = False Then
            Nbh = Nbh
            NbHS = NbHS
    Else
        If Me.CocherLundi36.Value = False Then
            'appel de fonction contenant tout tes test
        Else
            'appel de fonction contenant tout tes test
        End If
    End If
    Sa réduira ta procédure.

    Si ces test sont souvent répété, met les dans une fonction paramétrée. Je ne sait pas comment tu as procédé mais je te conseil de faire un algo sur papier et de voir ensuite à quel endroit tu peut réduire ton code en insérant des fonctions.

    Voila, j'espère que sa t'aideras un peu.

    Bon courage pour la suite

  5. #5
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    et il est censé servir à quoi ce code ?

    donne nous l'objectif fonctionnel, on verra si on ne peut pas optimiser cela.

  6. #6
    Membre à l'essai
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    Tout d'abord Merci de votre aide

    En fait, mon projet consiste à calculer le nombre d'heures qu'un salarié a travaillé dans le mois. (C'est un projet de stage pour ma formation de développeur d'application)
    Donc, les utilisateurs saisirons les heures d'entrées/sorties matin/aprem qu'il y a sur les cartons de pointages de chaque salariés.
    en cliquant sur le bouton valider ils aimerais avoir le nombre d'heures normales et le nombre d'heures supp qu'il a fait dans le mois.

    Mon formulaire se présente comme le carton de pointage, a savoir

    Quatre colonnes :
    - jours de la semaine
    - matin (deux sous colonnes entrée sortie)
    - aprem (deux sous colonnes entrée sortie)
    - Irrégularité (deux sous colonnes sortie entrée)

    Le but du bouton valider est d'aller chercher les horaires d'origines dans la tables horaires ( fait, a l'aides de requetes et de dfirst sur le résultat de la requete) suivant les zones remplies d'où tout mes tests si c'est telle ou telle zone alors appel fonction jours ou matin ou aprem ou nuit ou continu ou mi temps matin ou mi temps aprem ou mi temps nuit. et de calculer le nombre d'heures.

    Mais ces calculs se font sur une seules ligne à la fois d'où 35 test car sur 5semaines...

    Voila pourquoi tout mes test assez long.

    J'éspère que je me suis bien expliqué , si vous avez des autres questions, n'hésitez pas

    Merci d'avance

  7. #7
    Membre à l'essai
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Points : 12
    Points
    12
    Par défaut Un grand Merci
    bonjours à tous,

    C'est bon, problème résolu, j'ai pris la solution de djidanestribbal ci-dessus
    En appelant d'autres procédures dans mon 2ème IF, ça marche impeccable.

    Merci à vous pour votre aide si précieuse

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

Discussions similaires

  1. Formulaire de saisie en VBA, procédure trop longue
    Par Karine2014 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 16/04/2014, 08h45
  2. Réponses: 4
    Dernier message: 04/07/2007, 09h14
  3. Une procédure trop longue
    Par lola06 dans le forum VBA Access
    Réponses: 2
    Dernier message: 15/05/2007, 14h02
  4. [ASE] Procèdure trop longue
    Par Benjamin78 dans le forum Sybase
    Réponses: 2
    Dernier message: 11/04/2006, 10h01
  5. [ASE][T-SQL]Procédure trop longue
    Par Benjamin78 dans le forum Sybase
    Réponses: 5
    Dernier message: 21/03/2006, 12h25

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