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

Macros et VBA Excel Discussion :

Aide pour simplifier un code


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 75
    Par défaut Aide pour simplifier un code
    Bonjour

    Faire une comparaison de 2 textbox par rapport à 2 tolérances avec affichage d'un label

    pour le moment
    je fais la comparaison sur la textbox1 avec la tolérance 1 et affiche le label conforme ou non-conforme
    je fais la comparaison sur la textbox2 avec la tolérance 2 et affiche le label conforme2 ou non-conforme2

    Voici le 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
    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
     
    Private Sub UserForm_Initialize()
     
    Dim tol1, tol2 As Single
    tol1 = 95
    tol2 = 120
     
    txt1.Value = tol1
    txt2.Value = tol2
     
    labYes.Visible = False
    LabNo.Visible = False
    labYes2.Visible = False
    labNo2.Visible = False
     
    End Sub
    Private Sub txt3_AfterUpdate()
     
     
    If txt3.Value = "" Then
    labYes.Visible = False
    LabNo.Visible = False
    Exit Sub
    End If
     
    Dim tol1 As Single
    Dim val1 As Single
     
    tol1 = UserForm1.txt1.Value
    val1 = UserForm1.txt3.Value
     
     
        If val1 < tol1 Then
            LabNo.Visible = True
            labYes.Visible = False
        ElseIf val1 >= tol1 Then
            labYes.Visible = True
            LabNo.Visible = False
        End If
    End Sub
     
    Private Sub txt4_AfterUpdate()
     
     
    If txt4.Value = "" Then
    labYes2.Visible = False
    labNo2.Visible = False
    Exit Sub
    End If
     
    Dim tol2 As Single
    Dim val2 As Single
     
    tol2 = UserForm1.txt2.Value
    val2 = UserForm1.txt4.Value
     
     
        If val2 < tol2 Then
            labNo2.Visible = True
            labYes2.Visible = False
        ElseIf val2 >= tol2 Then
            labYes2.Visible = True
            labNo2.Visible = False
        End If
    End Sub
    Ce que je cherche a faire

    afficher le label "non conforme" ou " conforme" qu'une seule fois c'est a dire (comme la formule SI OU)

    Si textbox1 et textbox2 sont supérieur ou égale alors on affiche le label "conforme"
    Si textbox1 ou textbox2 sont conforme alors on affiche le label "non-conforme"
    si textbox1 et textbox2 sont non-conforme alors on affiche le label "non-conforme"

    et ne plus avoir besoin des label conforme2 et non-conforme2

    Voili voilou

    merci pour vos retour

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut et bienvenu sur le Forum,

    Utilise l'instruction Select Case avec pour argument la valeur booléenne True.
    Le code considèrera la première instruction vraie.

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    comment peut-on raisonnablement écrire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Tol1 = usfPVTG.txt1.Value ' ---
                           '        | ----------->> donc Tol1 = val1
    val1 = usfPVTG.txt1.Value ' ---
     
        If val1 < Tol1 Then ' -------------------->> ne risque pas d'être le cas puisqu'égaux
            '......
        ElseIf val1 >= Tol1 Then ' -------------------->> ne risque pas d'être le cas puisqu'égaux
             '......
        End If
    End Sub
    Pas d'autre commentaire.

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 75
    Par défaut
    Citation Envoyé par unparia Voir le message
    Bonjour
    comment peut-on raisonnablement écrire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Tol1 = usfPVTG.txt1.Value ' ---
                           '        | ----------->> donc Tol1 = val1
    val1 = usfPVTG.txt1.Value ' ---
     
        If val1 < Tol1 Then ' -------------------->> ne risque pas d'être le cas puisqu'égaux
            '......
        ElseIf val1 >= Tol1 Then ' -------------------->> ne risque pas d'être le cas puisqu'égaux
             '......
        End If
    End Sub
    Pas d'autre commentaire.
    une erreur de frappe
    je corrige le message

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut Unparia.

    je corrige le message
    D'accord, mais tu regardes du côté de Select Case comme indiqué précédemment.

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 75
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    Salut Unparia.



    D'accord, mais tu regardes du côté de Select Case comme indiqué précédemment.

    Je suis entrain ;-)

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 75
    Par défaut
    En fait ça ne change rien

    je suis toujours obligé d'utiliser labYes2 et labNo2

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Re

    on va commencer par être à la fois concis, succinct et clair :
    Commençons par le double tandem "interactif" txt1, txt3 et labno, labyes

    Si je regarde ton code j'en déduis que tu cherches à faire ce que résume ceci :
    labno ne doit être visible que si, à la fois, txt1 <> "", txt2 <> "", txt3 < txt1
    labyes ne doit être visible que si, à la fois, txt1 <> "", txt2 <> "", txt3 >= txt1

    Est-ce le cas ?
    Si oui, la réponse sera simple et tu verras que ce seul effort d'exposé du but est déjà à lui seul (comme c'est souvent le cas) le début de la solution, sinon la solution elle-même
    Si non, il va te falloir faire des efforts pour exposer précisément ce que tu veux

  9. #9
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Par défaut
    Bonjour ...

    et avec cela ?
    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
    Private Sub Txt1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
       If Txt1 = "" Or Txt3 = "" Then Exit Sub
        LabNo.Visible = Txt3 < Txt1: LabYes.Visible = Txt3 >= Txt1
    End Sub
    Private Sub Txt3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If Txt1 = "" Or Txt3 = "" Then Exit Sub
        LabNo.Visible = Txt3 < Txt1: LabYes.Visible = Txt3 >= Txt1
    End Sub
    Private Sub Txt2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If Txt2 = "" Or Txt4 = "" Then Exit Sub
        LabNo2.Visible = Txt4 < Txt2: LabYes2.Visible = Txt4 >= Txt2
    End Sub
    Private Sub Txt4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If Txt2 = "" Or Txt4 = "" Then Exit Sub
        LabNo2.Visible = Txt4 < Txt2: LabYes2.Visible = Txt4 >= Txt2
    End Sub
    Edit : je n'ai pas intégré les contrôles de validité (saisies numériques)

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour à tous,

    pour simplifier aussi, tu peux ne t'occuper que de LabNo.Visible.
    Et à la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LabYes.Visible = Not LabNo.Visible
    eric

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 75
    Par défaut
    Citation Envoyé par unparia Voir le message
    Re

    on va commencer par être à la fois concis, succinct et clair :
    Commençons par le double tandem "interactif" txt1, txt3 et labno, labyes

    Si je regarde ton code j'en déduis que tu cherches à faire ce que résume ceci :
    labno ne doit être visible que si, à la fois, txt1 <> "", txt2 <> "", txt3 < txt1
    labyes ne doit être visible que si, à la fois, txt1 <> "", txt2 <> "", txt3 >= txt1

    Est-ce le cas ?
    Si oui, la réponse sera simple et tu verras que ce seul effort d'exposé du but est déjà à lui seul (comme c'est souvent le cas) le début de la solution, sinon la solution elle-même
    Si non, il va te falloir faire des efforts pour exposer précisément ce que tu veux
    Re..
    bon je n'ai pas fait gaffe je viens de changer mon code sans avoir vu vos réponses (mode boulet)
    sinon oui je pense que mon exposé n'est pas très claire.

    alors ce que je cherche à faire
    labNo doit être visible que si txt3 < txt1 et/ou txt4 < txt2
    labYes doit être visible que si à la fois txt3 >= txt1 et txt4 >= txt2

    voili voulou

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    voili voulou
    ?
    -->> que nenni
    Commence par compléter. Juste pour me montrer que tu sais t'appliquer, au moins ...
    Et confirme ton ou du "et/ou" (car je devine une "pagaille").
    Prends ton temps, mais sois très, très, très clair. Dans le cas contraire, je ne reviendrai plus dans cette discussion.

    EDIT : des adieux à faire m'appellent à m'absenter trois jours. Je te relirai donc Lundi matin.

  13. #13
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 75
    Par défaut
    Citation Envoyé par unparia Voir le message
    ?
    -->> que nenni
    Commence par compléter. Juste pour me montrer que tu sais t'appliquer, au moins ...
    Et confirme ton ou du "et/ou" (car je devine une "pagaille").
    Prends ton temps, mais sois très, très, très clair. Dans le cas contraire, je ne reviendrai plus dans cette discussion.

    EDIT : des adieux à faire m'appellent à m'absenter trois jours. Je te relirai donc Lundi matin.
    bonjour

    je vois 4 possibilités

    Si txt3 < txt1 et txt4 < txt2 alors labNo visible
    Si txt3 < txt1 et txt4 >= txt2 alors labNo visible
    Si txt3 >= txt1 et txt4 < txt2 alors labNo visible
    Si txt3 >= txt1 et txt4 >= txt2 alors labYes visible

    PS: Posté depuis un smartphone à petites touches et gros doigts

  14. #14
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    tu ne fais que le dernier (pas trop dur) et tu finis par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LabNo.Visible = Not LabYes.Visible
    eric

  15. #15
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour à vous, Bonjour au Forum,

    Pour ma part, je ne démords pas d'une instruction Select Case avec True pour argument.
    Les cas gérés seraient ceux exposés au post #13.

  16. #16
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 75
    Par défaut
    Bonjour

    Tu ne fais que le dernier (pas trop dur) et tu finis par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LabNo.Visible = Not LabYes.Visibleeric
    A la fin de quoi ? je pige pas


    Bonjour à vous, Bonjour au Forum,

    Pour ma part, je ne démords pas d'une instruction Select Case avec True pour argument.
    Les cas gérés seraient ceux exposés au post #13.
    Un peu la même chose ou je mets l'instruction Select Case ?

  17. #17
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Un peu la même chose ou je mets l'instruction Select Case ?
    Tout d'abord, tu t'informes sur cette instruction.
    Et tu tiens compte de l'argument que je t'ai indiqué.

    Tu peux placer cette instruction sur l'évènement Exit de la dernière zone de texte informée, dont va dépendre l'affichage.

  18. #18
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 75
    Par défaut
    Bon là les gars vous m'avez complément perdu
    Tant pis pour moi.

  19. #19
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    1 - Tu cherches à te documenter sur l'instruction VBA Excel Select Case, notamment en ce qui concerne l'argument True
    2 - Tu observes le cheminement de saisie du formulare, et tu places cette instruction à l'évènement Exit du dernier Textbox.

    Tu dois t'informer, observer la logique de saisie puis gérer un évènement.
    Et cela, tu peux le faire.

    Bien entendu, tu peux revenir sur le Forum avec un code complet en explicitant ton éventuelle problématique.

    En espérant avoir été clair.

    P.S. Ci-joint une liste de liens utiles
    Fichiers attachés Fichiers attachés

  20. #20
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 75
    Par défaut
    Bon après avoir fait une pause café, pris l'air et fait 2 ou 3 trucs au boulot

    Voici un exemple de code que je viens de faire

    Dans cette exemple c'est conforme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Select_Case_true()
    tol1 = 95
    tol2 = 120
    val1 = 95
    val2 = 120
     
    Select Case True
     
        Case val1 >= tol1 And val2 >= tol2
            MsgBox "Conforme"
       Case Else
            MsgBox "Non-conforme"
    End Select
    End Sub
    dans celui là c'est non-conforme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Select_Case_true()
    tol1 = 95
    tol2 = 120
    val1 = 98
    val2 = 119
     
    Select Case True
     
        Case val1 >= tol1 And val2 >= tol2
            MsgBox "Conforme"
       Case Else
            MsgBox "Non-conforme"
    End Select
    End Sub
    Ai-je bon ?

Discussions similaires

  1. [XL-2007] Besoin d'aide pour simplifier le code répétitif
    Par Nomorerulz dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/05/2016, 22h41
  2. Aide pour simplifier un code et comprendre le mécanisme
    Par nicdodo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/04/2015, 15h50
  3. Aide pour simplifier code macros
    Par gatecrash182 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/08/2014, 18h16
  4. Aide pour simplifier un code VBA Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 24/01/2008, 16h15
  5. Je besoin d'aide pour terminer mon code
    Par Paulinho dans le forum C++
    Réponses: 7
    Dernier message: 06/11/2005, 23h30

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