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 :

Créer un textbox et un code textbox clic par userform initialize


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Citation Envoyé par Kestion100 Voir le message
    Je serais peut être voir certainement ok avec toi mais il faut que tu éclaire ma lanterne: notation hongroise?
    Google est ton ami: https://fr.wikipedia.org/wiki/Notation_hongroise
    Cette notation avait du sens lorsque notre seul outil de développement était un simple éditeur texte, mais depuis l'avènement des interfaces graphiques (il y a au moins 30 ans) les environnements de développement (IDE) offrent suffisamment de fonctionnalités pour rendre cette pratique obsolète.
    Oublie cette pratique issue du crétacé.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    En tout cas, je suis dépatouillé de mon blocage pour l'instant. MERCI

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Ouais heu .....
    1) Prévoir un nombre maximum de contrôles, c'est l'opposé du principe dynamique, et ça gaspille des ressources
    2) Ecrire du code qui écrit du code, c'est marrant mais c'est super casse-gueule.
    Dans les 2 cas, la maintenance est absolument dégueulasse.

    On a de meilleurs outils: Les classes.
    L'idée consiste à encapsuler ton contrôle dynamique et ses gestionnaires d'évènements dans une classe, que tu instancieras à la demande.
    Il nous faut d'abord une classe:
    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
    '// Class DynamicTextBox
    '// Classe encapsulant un textbox
    Option Explicit
     
    Private Form As UserForm    '// reference vers le formulaire parent
     
    Private WithEvents TextBox As MSForms.TextBox   '// instance du textbox
                                                    '// On oublie pas le mot clef WithEvents pour pouvoir ecrire les gestionnaires d'evennement
     
        '// pseudo-constructeur (pour nous faciliter la vie)
    Public Sub Create(ByRef Form As UserForm, ByVal Name As String, ByVal Top As Long)
            '// creation et positionnement du textbox
        Set TextBox = Form.Controls.Add("Forms.TextBox.1", Name, True)
        TextBox.Top = Top
    End Sub
     
        '// gestionnaires d'evennements du textbox
    Private Sub TextBox_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        MsgBox "You clicked on " & TextBox.Name
    End Sub
    Puis, dans un module standard, une fonction utilitaire chargée d'instancier la classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    '// Module Factory
    Option Explicit
     
        '// Fonction qui encapsule l'instanciation de la classe DynamicBox
    Public Function Create_TextBox(ByRef Form As UserForm, ByVal Name As String, ByVal Top As Long) As DynamicTextBox
        Dim TextBox As DynamicTextBox
        Set TextBox = New DynamicTextBox
        TextBox.Create Form, Name, Top
        Set Create_TextBox = TextBox
    End Function
    Enfin, un peu de code dans le 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
    '// UserForm UserForm1
    Option Explicit
     
    Private Textboxes As Collection '// collection pour ranger les textbox
     
    Private Sub UserForm_Initialize()
        Set Textboxes = New Collection
     
            '// Ajoute 3 textbox dynamiques et les range dans une collection
        Dim i As Integer
        For i = 0 To 2
            Dim TextBox As DynamicTextBox
            Set TextBox = Factory.Create_TextBox(Me, "MyTextBox" & i, i * 20)
            Textboxes.Add TextBox
        Next
    End Sub

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    deedolith, Je crois avoir compris le mécanisme et l'intérêt de ton codemais loupe une marche.
    J'ai copié tes codes dans un module de classe, un module standard et dans le userform mais rien ne se passe, je ne vois pas trop comment le déclencher.

    PS: petite précision pour l'ordre et le nom des textebox, j'en ai déjà une dans un frame.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Quand de lance à partir d'un module standard userform8.show (c'est le numéro de mon userform), j'obtiens une erreur sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox As DynamicTextBox
    Erreur de compilation type défini parr l'utilisateur non défini dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub UserForm_Initialize()

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Valtrase, ton code a provoqué un plantage complet du fichier "erreur irrémédiable" de mémoire, je n'ai aucune envie de reproduire la chose pour retrouver le nom exact de l'erreur....

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Citation Envoyé par Kestion100 Voir le message
    PS: petite précision pour l'ordre et le nom des textebox, j'en ai déjà une dans un frame.
    Le nom des contrôles dynamique n'a que peu d'importance, la seule exigeance est qu'il soit unique. Calcul le comme tu en as envie (mon code n'a pour but que démonstration).
    Citation Envoyé par Kestion100 Voir le message
    Quand de lance à partir d'un module standard userform8.show (c'est le numéro de mon userform), j'obtiens une erreur sur TextBox As DynamicTextBox:
    Erreur de compilation type défini par l'utilisateur non défini
    As-tu nommé tes modules correctement ?
    Sinon, peux-tu uploader ton fichier ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Créer une textbox
    Par lepgwen dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/06/2008, 13h37
  2. Créer une textBox "mot de passe"
    Par loic20h28 dans le forum C#
    Réponses: 2
    Dernier message: 22/02/2008, 15h48
  3. Créer une textbox en vba
    Par Dryss51 dans le forum IHM
    Réponses: 2
    Dernier message: 24/07/2007, 15h08
  4. Réponses: 2
    Dernier message: 25/05/2007, 14h16
  5. [VB.NET] Créer une textbox from scratch
    Par AP dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/04/2006, 10h09

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