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 :

EXCEL VBA - Comment éviter si possible de créer sub textbox_Enter pour une quarantaine de Textbox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Par défaut EXCEL VBA - Comment éviter si possible de créer sub textbox_Enter pour une quarantaine de Textbox
    Bonjour,
    Après des recherches sur Internet infructueuses, je me dirige pour la première fois vers le forum.
    Dans un userform, j'ai besoin de créer une quarantaine de sub textbox_Enter afin d'appeler un module.
    Je souhaitais savoir s'il est possible et si oui par quel moyen d'éviter l'écriture de tous ces sub.

    Explications plus détaillées :
    J'appelle un formulaire pour enregistrer les différents arrêts maladie (initial et prolongation) d'un salarié.
    Sur ce formulaire, une ligne (composé de plusieurs checkbox et textbox) par arrêt.
    Sur les 2 premiers textbox, j'appelle un autre formulaire qui contient le calendrier d'où mes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub textbox1_Enter
    Call BdaCalendrier2.show
    end sub
    J'ai créé 19 lignes et j'appelle le calendrier sur 2 textbox par ligne (un pour la date de début et un pour la date de fin).

    Question : est-ce que je peux éviter l'écriture de ces 38 subs ?

    Est-ce que quelqu'un pourrait m'aider ?
    Merci par avance pour vos réponses.

    Nadège

  2. #2
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonsoir à tous
    Bonsoir badege3378

    J'ai un doute sur la compréhension de ton problème, mais si j'ai bon, je me dirigerai vers les modules de classe. Cela reste à vérifier.

    Eric

  3. #3
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    bonjour,

    Citation Envoyé par badege3378
    Question : est-ce que je peux éviter l'écriture de ces 38 subs ?
    la question ne se pose pas , il faut les éviter, rien qu'une notion de maintenance....

    comme le suggère edelweisseric, oriente-toi vers les modules de classe, il y a des exemples et des tutos sur DVP...
    vois ce lien entre-autres : http://www.developpez.net/forums/d96...urs-controles/

    cordialement,

    Didier

  4. #4
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Par défaut
    Bonjour,

    Je viens effectivement de m'orienter vers les modules de classe suite à vos recommandations.

    J'ai inséré les code suivants suite à un ex. trouvé sur developpez.net

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub UserForm_Initialize()
    Dim Obj As Control
    Dim Cl As Classe1
     
    Set Collect = New Collection
     
    For Each Obj In Me.Controls
    If TypeOf Obj Is MSForms.TextBox Then
    Set Cl = New Classe1
    Set Cl.objTxt = Obj
    Collect.Add Cl
    End If
    Next Obj
    J'ai créé un module avec juste les infos suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Public Collect As Collection
    et en dernier mon module de classe Classe1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Explicit
    Public WithEvents objTxt As MSForms.TextBox
     
    Private Sub objTxt_Change()
        objTxt = objTxt.Name
     
     
    End Sub
    Le code fonctionne, c'est-à-dire qu'il m'affiche le nom du textbox dans le textbox concerné sauf que ce n'est pas ce que je souhaite faire.
    Je souhaite éviter d'écrire le code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub TextBox10_Enter() 'Calendrier Début Arrêt initial'
    LeControl = TextBox10.Name
    Call Calendrier
    End Sub
    J'ai bien trouvé un truc pour ne prendre en compte que certains textbox mais je n'arrive pas à l'appliquer.

    J'espère que vous pourrez m'aider et merci par avance.

    Nadège

  5. #5
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonjour à tous
    Bonjour badege3378

    Ce que je te propose.
    Pour les TextBox qui appellent, tu mets les TextBox.Tag = "tbox", ce qui te permets d'en avoir d'autres.
    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
    Option Explicit
    Dim CtrlGrptext() As New ClLabel
     
    Private Sub UserForm_Initialize()
    Dim ctrl As Control, Index As Integer
        For Each ctrl In Me.Controls
            If ctrl.Tag = "tbox" Then
                Index = Index + 1
                      ReDim Preserve CtrlGrptext(1 To Index)
                With CtrlGrptext(Index)
                    Set .GroupText = ctrl
                End With
            End If
        Next ctrl
    End Sub
    dans un module de classe nommé : "ClLabel"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Public WithEvents GroupText As MSForms.TextBox
     
    Private Sub GroupText_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    MsgBox "bonjour"   ' à remplacer par ce que tu veux faire
    End Sub
    Si j'ai bien compris
    Eric

  6. #6
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Par défaut
    Bonjour Eric,

    Je viens de tester ta proposition au moins pour avoir le message Bonjour mais rien ne se passe.
    Je n'ai pas le message Bonjour.
    Le code ne s'arrête pas dans le module de classe avec un point d'arrêt. Est-ce normal ?
    Quand l'userform est affiché à l'écran et que je cherche à obtenir le message : rien.
    Peux-tu encore m'aider ?

    Merci par avance pour tes réponses ou celles de quelqu'un d'autre.

    Nadège

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

Discussions similaires

  1. Comment créer un ID pour une réunion
    Par ylabarre dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 17/08/2007, 12h29
  2. Réponses: 1
    Dernier message: 18/06/2007, 16h10
  3. Réponses: 1
    Dernier message: 01/05/2007, 08h44
  4. Réponses: 7
    Dernier message: 15/12/2006, 16h14
  5. excel VBA comment recopier sur plusieurs feuilles
    Par floflo2006 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/11/2005, 15h56

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