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 :

Variable TextBox dans une Userform [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de pastis.vi
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 251
    Par défaut Variable TextBox dans une Userform
    Bonjour à tous !

    J'ai une USF avec beaucoup de TextBox (de façon à faire un formulaire).
    Lorsque l'utilisateur valide le formulaire je vais vérifier la présence de mes TextBox.Value dans une base de donnée. Dans le cas où je ne le trouve pas je souhaite faire rougir ma case TextBox pour indiquer à l'utilisateur quelle TextBox est en défaut.
    Voici le code que j'ai fait pour la macro principale qui teste (je vous l'ai simplifié):
    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
    Public varbox As TextBox
     
    Private Sub CommandButton1_Click()
    ' MISE EN FORME DES RESULTATS
    Application.ScreenUpdating = False
     
    ' On filtre notre base de données pour n'avoir que les résultats recherchés
    With Sheets("Données")
        ' Nom
        If TextBox1.Value <> "" Then
            If Not .Range("F:F").Find(TextBox1.Value, LookIn:=xlValues) Is Nothing Then
                .Range(.Range("$A$1"), .Range("$F$60000").End(xlUp).Offset(0, 11)).AutoFilter Field:=6, Criteria1:="=" & TextBox1.Value, Operator:=xlAnd
            Else
                MsgBox "Il n'existe aucun contact correspondant à votre recherche !", vbOKOnly + vbInformation, "Aucun affichage possible"
                varbox = TextBox1
                Call alerte
                Exit Sub
            End If
        End If
     
        ' Prénom
        If TextBox2.Value <> "" Then
            If Not .Range("G:G").Find(TextBox2.Value, LookIn:=xlValues) Is Nothing Then
                .Range(.Range("$A$1"), .Range("$F$60000").End(xlUp).Offset(0, 11)).AutoFilter Field:=7, Criteria1:="=" & TextBox2.Value, Operator:=xlAnd
            Else
                MsgBox "Il n'existe aucun contact correspondant à votre recherche !", vbOKOnly + vbInformation, "Aucun affichage possible"
                varbox = TextBox2
                Call alerte
                Exit Sub
            End If
        End If
    Voici la macro qui alerte l'utilisateur (elle est appelée par la macro principale):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub alerte()
     
    With varbox
        .BackColor = RGB(255, 230, 230)
        p = 0.01: s = Timer: Do While Timer < s + p: DoEvents: Loop
        .BackColor = RGB(255, 220, 220)
        p = 0.01: s = Timer: Do While Timer < s + p: DoEvents: Loop
        .BackColor = RGB(255, 210, 210)
        p = 0.01: s = Timer: Do While Timer < s + p: DoEvents: Loop
        .BackColor = RGB(255, 200, 200)
    '...
    End With
    J'ai déclaré la variable varbox as TextBox mais j'ai une erreur "Variable objet ou variable de bloc with non définie" dans ma macro principale.
    Ensuite j'ai essayé de déclarer la variable varbox as Variant mais j'ai une erreur "Objet requis" dans ma macro alerte().

    Je ne vois pas comment déclarer ma variable, pouvez-vous me dire comment faire svp?

    ps: toutes les lignes de code que je vous ai mis se trouvent dans mon code de ma USF

    Merci !

  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
    Bonjour Pastis,

    Plutôt déclarer ta variable comme .

    De plus, j'aurais tendance à envisager dans ce cas une procédure argumentée.

    Puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub alerte(varbox As Control)
     
    With varbox
    'etc

  3. #3
    Membre éclairé Avatar de pastis.vi
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 251
    Par défaut
    Bonjour Marcel !

    J'ai essayé de déclarer ma variable avec Control mais j'ai la même erreur: "Variable objet ou variable de bloc with non définie"

  4. #4
    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,

    Le mieux est de passer ton TextBox en argument à ta Sub "alerte" il est de ce fait initialisé au moment de l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sub alerte(Txt As MSForms.TextBox)
    Sinon, ta TextBox doit être déclarée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim varbox As MSForms.TextBox
    Public n'étant pas nécessaire car tu ne souhaite qu'une portée dans le Module de la Form et ensuite, il te faut l'initialiser avec Set :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set varbox = TextBox1
    alerte 'appel de la Sub (Call pas nécessaire, le compilateur interprète très bien)
    Hervé.

    Re,

    "Control" étant générique, lors de l'écriture du code tu n'auras pas toutes les propriétés et méthodes dans l'intellisense (en tapant le point) mais seulement celles communes à tous les contrôles, ce qui n'empêche pas le bon fonctionnement bien sûr.

    Hervé.

  5. #5
    Membre éclairé Avatar de pastis.vi
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 251
    Par défaut
    Salut Hervé !

    Ça marche nickel là !

    Merci bien

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

Discussions similaires

  1. [XL-2003] pb dans textbox d'une userform
    Par kidone dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/02/2010, 17h01
  2. [XL-2007] Valeur textbox dans une colonne de longueur variable
    Par luko6 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/10/2009, 14h42
  3. Réponses: 4
    Dernier message: 21/05/2009, 01h59
  4. TextBox dans une Userform
    Par jepac dans le forum VBA Word
    Réponses: 3
    Dernier message: 23/01/2008, 00h05
  5. Réponses: 3
    Dernier message: 26/06/2007, 18h00

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