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 :

Passer une textbox en variable [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Par défaut Passer une textbox en variable
    ReEdit avant réponse code changer question changer:

    Bonjour,

    Je bloque sur un truc assez simple au premier abord ... je ne comprend pas pourquoi cela ne marche pas.
    Voici mon 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
    Private Sub ComboBoxType_Change()
    Call Tris_ligne
    Me.TextBoxEnCoursDRM.value = CInt(Me.TextBoxATraiter.value) + CInt(Me.TextBoxCADRM.value) + CInt(Me.TextBoxRESPDRM.value) + CInt(Me.TextBoxRESPM2I.value)
     
    Call ProcCouleurIndic(Me.TextBoxATraiter, 10)
    Call ProcCouleurIndic(Me.TextBoxCADRM, 10)
     
    Call ProcCouleurIndic(Me.TextBoxRESPDRM, 10)
     
    Call ProcCouleurIndic(Me.TextBoxRESPM2I, 10)
     
    Call ProcCouleurIndic(Me.TextBoxRESPM2I, 25)
    End Sub
     
     
    Sub ProcCouleurIndic(TextBoxUtil As Object, pas As Integer)
     
    If CInt(TextBoxUtil.value) >= 0 And CInt(TextBoxUtil(Name).value) < pas Then TextBoxUtil.floreColor.value = &HC000&
    If CInt(TextBoxUtil.value) >= pas And CInt(TextBoxUtil.value) < pas * 2 Then TextBoxUtil.floreColor.value = &HFFFF&
    If CInt(TextBoxUtil.value) >= pas * 2 And CInt(TextBoxUtil.value) < pas * 3 Then TextBoxUtil.floreColor.value = &H80FF&
    If CInt(TextBoxUtil.value) >= pas * 3 Then TextBoxUtil.floreColor.value = &HFF&
    End Sub
    En gros J'ai 5 textbox ou l'on retrouve forcément écrit des Chiffres entre 0 et 100.
    Je veux un code couleur qui s'affiche suivant le nombre qui y est affiché.
    J'ai donc crée une macro qui s'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub ProcCouleurIndic(TextBoxUtil As Object, pas As Integer)
    comme vous pouvez voir j'ai mit en variable un textbox
    je renseigne donc par exemple pour appeler cette macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call ProcCouleurIndic(Me.TextBoxATraiter, 10)
    .
    Me.TextBoxATraiter etant un textbox dans l'userform ME.

    Cependant ce code me revoir un chiffre (contenu de la textbox) et non l'object.
    j'ai donc sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBoxUtil.floreColor = &HFF&
    Ma macro me signifie un message d'erreur:
    "Propriété ou méthode non géré par cette Object"
    .

    Je pense que ca viens du faite qui ne reconnais pas mon textbox comme un object et je ne sais pas quoi faire pour qu'il le reconnaisse ...

    Avez-vous des suggestion ?

    Merci par avance,
    Cordialement,
    Passepartout007

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Un 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    Private Sub TextBox1_Change()
     
        Colorer TextBox1
     
    End Sub
     
    Private Sub TextBox2_Change()
     
        Colorer TextBox2
     
    End Sub
     
    Private Sub TextBox3_Change()
     
        Colorer TextBox3
     
    End Sub
     
    Sub Colorer(Txt As MSForms.TextBox)
     
        Select Case Txt.Text
     
            Case Is < 10: Txt.BackColor = &H80FF80
            Case Is < 20: Txt.BackColor = &H80FFFF
            Case Is < 30: Txt.BackColor = &HFF00FF
            Case Is < 40: Txt.BackColor = &H8080&
            Case Is < 50: Txt.BackColor = &HFFC0C0
            Case Is < 60: Txt.BackColor = &HFFFF80
            Case Is < 70: Txt.BackColor = &H8080FF
            Case Is < 80: Txt.BackColor = &HC000&
            Case Is < 90: Txt.BackColor = &HFFC0FF
            Case Is <= 100: Txt.BackColor = &HFF&
            Case Else: Txt.BackColor = &HFFFFFF
     
        End Select
     
    End Sub

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Par défaut Re
    Bonjour,
    Je sais que je peux passer par la te box change.
    Cependant il faudrais que je le fasse pour chaque textbox et cette solution n'est pas pratique à toute modification du code...
    Je souhaitais donc passer le textbox en variable mais je n'y arrive pas..

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    mise à jour via un bouton

    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 CommandButton1_Click()
    Dim MaTextBox As Control
        For Each MaTextBox In Me.Controls
            If TypeOf MaTextBox Is msforms.TextBox Then MetEnCouleur MaTextBox
        Next MaTextBox
    End Sub
     
    Sub MetEnCouleur(LaTextBox As msforms.TextBox)
        Select Case LaTextBox.Text
            Case Is < 10: LaTextBox.BackColor = &H80FF80
            Case Is < 20: LaTextBox.BackColor = &H80FFFF
            Case Is < 30: LaTextBox.BackColor = &HFF00FF
            Case Is < 40: LaTextBox.BackColor = &H8080&
            Case Is < 50: LaTextBox.BackColor = &HFFC0C0
            Case Is < 60: LaTextBox.BackColor = &HFFFF80
            Case Is < 70: LaTextBox.BackColor = &H8080FF
            Case Is < 80: LaTextBox.BackColor = &HC000&
            Case Is < 90: LaTextBox.BackColor = &HFFC0FF
            Case Is <= 100: LaTextBox.BackColor = &HFF&
            Case Else: LaTextBox.BackColor = &HFFFFFF
        End Select
    End Sub

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Cependant il faudrais que je le fasse pour chaque textbox et cette solution n'est pas pratique à toute modification du code...
    Je souhaitais donc passer le textbox en variable mais je n'y arrive pas..
    Ok, donc, en passant par un module de classe !

    Code à mettre dans l'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
    15
    16
    17
    18
    19
    20
    21
     
    Dim Txt() As New Classe1
     
    Private Sub UserForm_Initialize()
     
        Dim Ctrl As Control
        Dim I As Integer
     
        For Each Ctrl In Me.Controls
     
            If TypeName(Ctrl) = "TextBox" Then
     
                'stocke le TextBox dans le tableau
                I = I + 1: ReDim Preserve Txt(1 To I)
                Set Txt(I).Txt = Ctrl
     
            End If
     
        Next Ctrl
     
    End Sub
    Code à mettre dans le module de classe nommé Classe1 (nom par défaut) :
    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
     
    Public WithEvents Txt As MSForms.TextBox
     
    Private Sub Txt_Change()
     
        Select Case Txt.Text
     
            Case Is < 10: Txt.BackColor = &H80FF80
            Case Is < 20: Txt.BackColor = &H80FFFF
            Case Is < 30: Txt.BackColor = &HFF00FF
            Case Is < 40: Txt.BackColor = &H8080&
            Case Is < 50: Txt.BackColor = &HFFC0C0
            Case Is < 60: Txt.BackColor = &HFFFF80
            Case Is < 70: Txt.BackColor = &H8080FF
            Case Is < 80: Txt.BackColor = &HC000&
            Case Is < 90: Txt.BackColor = &HFFC0FF
            Case Is <= 100: Txt.BackColor = &HFF&
            Case Else: Txt.BackColor = &HFFFFFF
     
        End Select
     
    End Sub
    Quelque soit le nombre de TextBox sur l'UserForm, le code n'aura pas une ligne de plus ! Si tu veux modifier la procédure Change(), tu as juste à le faire dans le module de classe et elle le sera pour tous les TextBox puisqu'ils utilisent tous la même !

  6. #6
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    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 574
    Par défaut
    Bonsoir,
    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
     
    Public WithEvents Txt As MSForms.TextBox
     
    Private Sub Txt_Change()
     With Txt
        Select Case .Text
     
            Case 0 to 9: .BackColor = &H80FF80
            Case 10 to 19:.BackColor = &H80FFFF
            Case 20 to 29: .BackColor = &HFF00FF
            Case 30 to 39: .BackColor = &H8080&
            Case 40 to 49: .BackColor = &HFFC0C0
            Case 50 to 59: .BackColor = &HFFFF80
            Case 60 to 69: .BackColor = &H8080FF
            Case 70 to 79: .BackColor = &HC000&
            Case 80 to 89: .BackColor = &HFFC0FF
            Case 90 to 100: .BackColor = &HFF&
            Case Else: .BackColor = &HFFFFFF
     
        End Select
    End with

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Par défaut SOLUTION
    Bonjour,

    Je vous remercie pour votre aide.

    J'ai compris mon erreur et je me suis inspiré de ce que vous avez fais pour amélioré ce que j'avais déjà fais.

    Voici mon code, celui-ci fonctionne, il me permettra le jours ou je rajoute des textboxs de les rajouter facilement.
    Et ainsi, de vérifier par le nom de la textbox que ce soit bien celle que je veux et d'appeler la macro qui change la couleur suivant la contenu de celle-ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub ComboBoxType_Change()
    Dim MatextBox As Control
    For Each MatextBox In Me.Controls
        Select Case MatextBox.Name
                    Case Is = "TextBoxATraiter": Call ProcCouleurIndic(MatextBox.value, MatextBox.Name, 10)
                    Case Is = "TextBoxCADRM": Call ProcCouleurIndic(MatextBox.value, MatextBox.Name, 10)
                    Case Is = "TextBoxRESPDRM": Call ProcCouleurIndic(MatextBox.value, MatextBox.Name, 10)
                    Case Is = "TextBoxRESPM2I": Call ProcCouleurIndic(MatextBox.value, MatextBox.Name, 10)
                    Case Is = "TextBoxEnCoursDRM": Call ProcCouleurIndic(MatextBox.value, MatextBox.Name, 25)
        End Select
    Next MatextBox
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub ProcCouleurIndic(valeur As Integer, TextBoxUtil As String, pas As Integer)
     
    If CInt(valeur) >= 0 And CInt(valeur) < pas Then Controls(TextBoxUtil).BackColor = &HC000&
    If CInt(valeur) >= pas And CInt(valeur) < pas * 2 Then Controls(TextBoxUtil).BackColor = &HFFFF&
    If CInt(valeur) >= pas * 2 And CInt(valeur) < pas * 3 Then Controls(TextBoxUtil).BackColor = &H80FF&
    If CInt(valeur) >= pas * 3 Then Me.Controls(TextBoxUtil).BackColor = &HFF&
    End Sub
    Cordialement,

    Passepartout007

  8. #8
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    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 574
    Par défaut
    bonjour,
    pourquoi ces is?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Case "TextBoxATraiter" :

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

Discussions similaires

  1. passer une textbox en parametre d'une procedure sub
    Par gilles_906 dans le forum VB.NET
    Réponses: 3
    Dernier message: 02/04/2011, 15h11
  2. [XL-2007] Rendre visible une textbox avec variable
    Par Fred246 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/12/2009, 09h37
  3. Passer une structure par variable de session
    Par oclone dans le forum ASP.NET
    Réponses: 9
    Dernier message: 12/03/2009, 14h30
  4. Réponses: 4
    Dernier message: 15/01/2007, 00h13
  5. [POO] Passer une valeur de variable en variable
    Par hugo69 dans le forum Langage
    Réponses: 8
    Dernier message: 23/11/2006, 23h48

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