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 :

Problème de classe.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut Problème de classe.
    Bonjour à tous,
    Je voulais un code qui n'autorise que les chiffres dans un textbox de formulaire. Dans un tutoriel sur les classes, je récupère donc ce code de Emmanuel Tissot et qui fonctionne parfaitement.

    Module de classe appelé NumBox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public WithEvents TargetBox As MSForms.TextBox
     
    Private Sub TargetBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
       If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
    End Sub
    et dans le code du userform:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim NumBoxes As Collection             'Stocke les références à chaque instance
     
    Private Sub UserForm_Initialize()
       Dim Ctl As MSForms.Control
       Dim MyNumBox As NumBox
       Set NumBoxes = New Collection
       For Each Ctl In Me.Controls
          If TypeOf Ctl Is MSForms.TextBox Then
             Set MyNumBox = New NumBox     'Crée une nouvelle instance
             Set MyNumBox.TargetBox = Ctl  'Connecte la variable à l'objet
             NumBoxes.Add MyNumBox         'Ajoute l'instance à la collection
          End If
       Next
    End Sub
    Maintenant je voudrais changer la couleur de fond et de police quand j'entre et sors d'un textbox.
    Je me dis, facile, je n'ai qu'à intercepter les 2 évènements avec ce code dans la classe NumBox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TargetBox_Enter()
        With TargetBox
            .BackColor = &H80000002
            .ForeColor = &H80000005
        End With
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TargetBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        With TargetBox
            .BackColor = &H80000005
            .ForeColor = &H80000008
        End With
    End Sub
    et là...rien ne se passe, pas d'erreur de compilation ni d'exécution mais les couleurs ne changent pas. Quelqu'un sait où est le problème ?

  2. #2
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 579
    Par défaut
    Bonjour,
    Oui effectivement les évènements Enter et Exit n'existe pas dans WithEvents pour contrôle textbox.

  3. #3
    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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il y a évidemment moyen d'obtenir le même résultat sans passer par ces deux événements.
    Voir la réponse de Maxence Hubiche dans cette discussion Changer la couleur des TextBox et Combobox dans un USF
    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

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 576
    Par défaut
    je testerais les événements GotFocus et LostFocus

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Citation Envoyé par umfred Voir le message
    je testerais les événements GotFocus et LostFocus
    J'ai testé ces 2 évènements mais ils ne sont pas interceptés, il ne se passe donc rien.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Citation Envoyé par Franc Voir le message
    Je voulais un code qui n'autorise que les chiffres dans un textbox de formulaire. Dans un tutoriel sur les classes, je récupère donc ce code de Emmanuel Tissot et qui fonctionne parfaitement.
    Ça me paraît relativement injustifié d'utiliser un textbox pour cet usage.

    Utilisez tout simplement le contrôle NumericUpDown. Il est conçu pour ça et se comporte comme un textbox.
    Doc: https://learn.microsoft.com/en-us/do...orkdesktop-4.8

  7. #7
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    J'ai finalement trouvé un moyen de changer la couleur des textbox quand j'entre et je sors sans module de classe (trop compliqué pour moi).
    Je crée une macro commune que j'appelle dans les évènements _Enter et _Exit, ce qui fait une ligne de code au lieu de réécrire chaque fois le même code dans chaque textbox. Je mets le code à des fins didactiques, on ne sait jamais que ça intéresserait quelqu'un.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox1_Enter()
        MacroCommune Me.TextBox1, True
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        MacroCommune Me.TextBox1, False
    End 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
    Sub MacroCommune(tb As MSForms.TextBox, ByVal entering As Boolean)
        If entering Then
            ' Changer la couleur de fond lors de l'entrée
            tb.BackColor = RGB(255, 255, 0) ' Jaune
     
            ' Changer la couleur de police lors de l'entrée
            tb.ForeColor = RGB(255, 0, 0) ' Rouge
        Else
            ' Réinitialiser la couleur de fond lors de la sortie
            tb.BackColor = RGB(255, 255, 255) ' Blanc
     
            ' Réinitialiser la couleur de police lors de la sortie
            tb.ForeColor = RGB(0, 0, 0) ' Noir
        End If
    End Sub

  8. #8
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 247
    Par défaut
    Hello,
    il y a une solution pour pouvoir utiliser les événements Enter et Exit dans un module de classe :
    c'est l'utilisation de l'API Windows ConnectToConnectionPoint
    C'est ce que nous propose notre ami japonais K.Tsunoda ici
    La classe et un classeur exemple se trouve dans le fichier Bpca_Class_V40E.zip
    clsBpca supports the following controls and events, and it works in x64.
    -- Controls --
    Label , TextBox , CommandButton , OptionButton
    CheckBox , ComboBox , SpinButton , ToggleButton
    Among standard controls, ListBox/Frame/TabStrip/ MultiPage/ScrollBar is excluded
    from supported controls. It is the reason that is not placed much so that these controls
    becomes Control-Array.


    -- Events --
    Enter , Exit , BeforeUpdate , AfterUpdate
    Change , Click , DblClick , KeyDown , KeyPress , KeyUp
    MouseMove , MouseDown , MouseUp
    SpinDown , SpinUp , DropButtonClick
    FakeExit
    Nom : ClsBpca.gif
Affichages : 172
Taille : 186,7 Ko

    Ami calmant, J.P

  9. #9
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Très intéressant, merci J.P

  10. #10
    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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le lien de la conversation que j'ai donné fait exactement ce que tu attends, une couleur dans le TextBox à l'entrée de celui-ci et à la sortie la couleur disparait.
    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

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

Discussions similaires

  1. Problème de classe.
    Par maminova77 dans le forum Langage
    Réponses: 5
    Dernier message: 30/01/2006, 21h39
  2. Problème sur classe Transformer avec les <!--
    Par tykool dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/01/2006, 10h20
  3. Problème de classe
    Par DeusXL dans le forum DirectX
    Réponses: 15
    Dernier message: 04/12/2005, 14h37
  4. Problème de classe
    Par tidou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 14/10/2005, 17h49
  5. [FLASH MX2004] Problème de classe
    Par JulPoWeR dans le forum Flash
    Réponses: 1
    Dernier message: 10/07/2005, 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