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 :

gestion des evenements dynamique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 47
    Par défaut gestion des evenements dynamique
    bonjour, j'ai un soucis je crée ds ma form un textbox dynamique aucun soucis
    seulement je voudrai que lorsque j'appuye sur "entre" que ceal le ferme.
    j'ai modifier mon code mais je suis en manque d'inspiration si une lanterne pouvait m'éclairer merci

    voici le bout de 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    '-----------------------------------
       ' MODIFICATION DES CAPTIONS
       '-----------------------------------
       'avant toute modif, on verifie qu'il n'y en a pas d'autre en cours
        If modif = 1 Then
        MsgBox " valider votre changement avant de modifier un autre critère"
        GoTo fin
        Else
        modif = 1
        End If
                ' on parcour le control multipage
             For Each CtrlPage In Me.MultiPage1.Pages
                 For Each CtrlFrame In MultiPage1.Pages.Item(CtrlPage.name).Controls
                    ' si on trouve des frames alors on poursuit, sinon on sort
                         If TypeOf CtrlFrame Is MSForms.Frame Then GoTo suite1
                         GoTo fin2
    suite1:
     
                        'Boucle sur tous les contrôles de la frame
                        For Each CtrlOption In CtrlFrame.Controls
                            'Vérifie qu'il s'agit d'un OptionButton, sinon on sort
                            If TypeOf CtrlOption Is MSForms.OptionButton Then GoTo suite2
                            GoTo fin3
    suite2:
                                     ' une fois trouve on affiche à sa place un textbox
                                        If CtrlOption.Value = True Then
     
                            Set Mycmd = Interface.MultiPage1.Pages.Item(ItemP).Controls.Item(itemBut).Add("Forms.textbox.1")
                                Mycmd.left = CtrlOption.left
                                Mycmd.top = CtrlOption.top
                                Mycmd.width = 210
                                Mycmd.height = 18
                                Mycmd.Font.name = tahoma
                                Mycmd.Font.Size = 8
                                Mycmd.Font.Bold = False
                                Mycmd.text = CtrlOption.Caption
     
                                     With Mycmd
                                        .SetFocus
                                        .SelStart = 0
                                        .SelLength = Len(Mycmd.text)
                                        .MaxLength =
                                    End With
    .....
    et voici ce que j'ai ecrit pour la fermeture:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Mycmd_KeyPress(ByVal KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then
        lecontrolselect.Caption = Mycmd.text
     Interface.Repaint
     DoEvents
    Mycmd.Visible = False
     modif = 0
    End If
    End Sub
    j'ai essayé en remplacant mycmd par textbox.1 rien.
    l'appuie de la touche entre n'est pas reconnue ?

    merci de votre lecture

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonsoir,

    D'apres ce que j'ai compris tu veux executer un evenement KeyPress sur un textbox généré à l'éxecution.

    Pour ce faire il te faut déclarer ta variable comme ceci, en tete du module:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim WithEvents Mycmd As MSForms.TextBox
    Et ensuite écrire la ou les procédures évènementielles, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Mycmd _KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'ton code
    End Sub
    Cette procédure ne devient active qu'après avoir établi la connexion entre ta variable et un objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set Mycmd = Me.MultiPage1(ItemP).Controls.Item(itemBut).Add("Forms.textbox.1")
    'Me renvoie l'userform qui est en cours d'execution
    'Multipage1.Pages.Item(ItemP) <=> Multipage1(ItemP)
    Si tu affecte un autre objet à ta variable, la procédure se déclenchera pour ce nouvel objet. Pour stopper les procédures évènementielles il suffit de détruire la référence à l'objet:

    Si tu as besoin d'éxecuter la même procédure pour plusieurs controles il faudra passer par un module de classe.

    Cordialement,

    Tirex28/

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Essaie de remplacer vbKeyReturn par vbcr ou simplement 13.
    Ensuite, si tu as instancié ton contrôle, pour le supprimer, c'est simplement set mycmd = nothing.
    Enfin je ne pense pas que ton Repaint soit indispensable.

Discussions similaires

  1. Réponses: 8
    Dernier message: 22/06/2007, 18h35
  2. Problème avec la "Gestion des bibliothèques dynamiques"
    Par GoustiFruit dans le forum Delphi
    Réponses: 15
    Dernier message: 31/05/2006, 09h54
  3. Question pas difficile sur la gestion des listes dynamiques
    Par mulbek dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/04/2006, 13h57
  4. Réponses: 11
    Dernier message: 15/02/2006, 14h45
  5. [C#] Gestion des evenements
    Par zebulix13 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/06/2004, 18h40

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