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 :

Simplification de code


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 56
    Par défaut Simplification de code
    Bonjour le forum, existe-t'il un moyen de simplifier ce code qui se répète 27 fois sur les zones de texte (avec des noms différents) du formulaire ?
    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
    Private Sub Fax_GotFocus()
        Me.TimerInterval = 700
        With Me.Fax_Étiquette
            .SpecialEffect = 2
            .BackColor = vbRed
            .ForeColor = vbWhite
        End With
        Set Etiquette = Me.Fax_Étiquette
        Cont = Me.Fax.Name
     
        ' Vérification Internet
        VerifInternet
    End Sub
     
    Private Sub Fax_LostFocus()
        Me.TimerInterval = 0
        With Me.Fax_Étiquette
            .SpecialEffect = 1
            .BackColor = RGB(204, 200, 194)
            .ForeColor = vbBlack
        End With
    End Sub
    et l'action sur le Timer du formulaire
    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_Timer()
        If Me.Etiquette.ForeColor = vbBlack Then
            With Me.Etiquette
                .SpecialEffect = 2
                .BackColor = vbRed
                .ForeColor = vbWhite
            End With
        Else
            With Me.Etiquette
                .SpecialEffect = 1
                .BackColor = RGB(204, 200, 194)
                .ForeColor = vbBlack
            End With
        End If
    End Sub
    Merci de votre aide.

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour

    Regarde du côté des modules de classe.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 56
    Par défaut
    Merci mercatog, j'y pensais mais je ne sais pas comment faire…

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 182
    Billets dans le blog
    53
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 56
    Par défaut
    Merci Philippe, je vais voir ça.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonsoir

    désolé de t'arréter dans ton élan mais si tes fax... sont des textboxs les modules classe ne gerent pas les evenement focus

    Nom : demo2.gif
Affichages : 226
Taille : 373,5 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 56
    Par défaut
    Bonsoir Patrick, pas de solution alors ?

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    ben faudrait deja savoir quel type de control a cet evenement dispo chez moi les textboxs et compagnie ne l'ont pas

    parlerais tu de l'evenement exit par hasard ????
    regarde comment je gere 3 evenement exit en une sub
    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
    option explicit
    Dim act As Boolean
     
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean): lostfocus TextBox1: End Sub
    Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean): lostfocus TextBox2: End Sub
    Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean): lostfocus TextBox3: End Sub
     '
    Private Sub UserForm_Activate(): act = True: End Sub
    '
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer):    act = False: End Sub
    '
    Private Sub lostfocus(ctrl)
        If act = True Then
        With ctrl
            Select Case True
            Case .Value < 10: .BackColor = vbRed
            Case .Value > 10 And .Value < 20: .BackColor = vbGreen
            Case .Value < 30 And .Value > 20: .BackColor = vbMagenta
            End Select
        End With
    End If
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 56
    Par défaut
    tant qu'à faire, si on peut remplacer GotFocus par Enter et LostFocus par Exit, ça me convient

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    je sais pas il va faloir que je test

    le enter se declanche quand tu entre dans le textbox avec la souris
    je sais pas si quand tu change la valeur par vba il se declanche a tester
    cela dit ce que je t'ai donné en exemple peut parfaitement etre classé le resultat sera le meme
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 56
    Par défaut
    dis-moi, ce code, je le mets ou?

    je n'ai pas l'habitude des modules de classe

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    c'est pas un module classe c'est juste les meme eveement qui vont vers une seule sub dans le userform
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 56
    Par défaut
    voila, j'ai droit à une erreur :


    L'expression Sur sortie entrée comme paramètre de la propriété de type événement est à l'origine d'une erreur. La déclaration de la procédure ne correspond pas à la description de l'événement ou de la procédure de même nom.


    * Le résultat de l'expression n'est pas le nom d'une macro, le nom d'une fonction définie par l'utilisateur ou [Event Procedure].
    * Une erreur a peut-être été commise lors de l'évaluation d'une fonction, d'un événement ou d'une macro.
    &Afficher l'aide >>


    502473

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 56
    Par défaut
    J'ai expérimenter ceci sur GotFocus et LostFocus de touts les TextBox (toutes les étiquette associées aux TextBox portent comme nom le "NomDuTextBox_Étiquette")
    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 Adresse_1_GotFocus()
        TexteGotFocus
        '    Me.TimerInterval = 700
        '    With Me.Adresse_1_Étiquette
        '        .SpecialEffect = 2
        '        .BackColor = vbRed
        '        .ForeColor = vbWhite
        '    End With
        '    Set Etiquette = Me.Adresse_1_Étiquette
        '    Cont = Me.Adresse_1.Name
     
        '    ' Vérification Internet
        '    VerifInternet
    End Sub
     
    Private Sub Adresse_1_LostFocus()
        TexteLostFocus
        '    Me.TimerInterval = 0
        '    With Me.Adresse_1_Étiquette
        '        .SpecialEffect = 1
        '        .BackColor = RGB(204, 200, 194)
        '        .ForeColor = vbBlack
        '    End With
    End Sub
    et le code commun à touts les TextBox
    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
    Private Sub TexteGotFocus()
        Dim eti As Label
        Set eti = Me.Controls(Me.ActiveControl.Name & "_Étiquette")
        Me.TimerInterval = 700
        With eti
            .SpecialEffect = 2
            .BackColor = vbRed
            .ForeColor = vbWhite
        End With
        Set Etiquette = eti
        Cont = Me.ActiveControl.Name
        Set eti = Nothing
     
        ' Vérification Internet
        VerifInternet
    End Sub
     
    Private Sub TexteLostFocus()
        Me.TimerInterval = 0
        Dim eti As Label
        Set eti = Me.Controls(Me.ActiveControl.Name & "_Étiquette")
        With eti
            .SpecialEffect = 1
            .BackColor = RGB(204, 200, 194)
            .ForeColor = vbBlack
        End With
        Set eti = Nothing
    End Sub
    Merci à vous tous. J'ai pu éliminer 436 lignes.

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    je viens a peine de realioser que tu parlais de controls sur un sheets
    comme tu parlais de formulaire je pensait que tu parlais d'userform
    c'est different
    bref tu a opté pour la fonction commune
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 56
    Par défaut
    Bonjour Patrick, c'est bien sur un formulaire et ça fonctionne comme je le voulais. Merci encore, vous m'avez mis sur la voie. Ça sert uniquement à faire clignoter le label associé au TextBox.

  17. #17
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    que les choses soient claires quand tu dis formulaire tu parle bien d'userform ??

    si oui tu a un excel que personne n'a

    car les evenement gotfocus et lostfocus pour quelque controls que se soit dans un userform n'existent pas

    il faudrait savoir de quoi on parle la userform ou feuille de calcul(sheets)

    une feuille n'est pas un formulaire
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 56
    Par défaut
    Ne nous énervons pas, ce sont bien des formulaires, mais j'ai mer** pour le forum, ce sont des Form Access. Désolé mais vous m'avez mis sur les rails, et j'ai trouvé ma solution. Mes excuses pour votre temps perdu.

Discussions similaires

  1. Simplification de code
    Par lodan dans le forum Langage
    Réponses: 4
    Dernier message: 20/09/2006, 20h28
  2. Simplification de code
    Par lodan dans le forum Langage
    Réponses: 2
    Dernier message: 31/08/2006, 22h51
  3. Simplification de code (suite)
    Par Jeffboj dans le forum Access
    Réponses: 1
    Dernier message: 12/04/2006, 23h34
  4. simplification de code
    Par Jeffboj dans le forum Access
    Réponses: 11
    Dernier message: 11/04/2006, 16h09
  5. [c#] Simplification de code
    Par Revan012 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/02/2006, 17h44

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