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 :

Récupérer l'Evenement ON_CHANGE quelque soit le contrôle


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 60
    Points : 38
    Points
    38
    Par défaut Récupérer l'Evenement ON_CHANGE quelque soit le contrôle
    Bonjour,

    J'ai X TextBox sur une feuille (pas une form)
    Pour chacunes d'entre elles j'ai la même action à appliquer sur l'évènement ON CHANGE.
    Ex : tout en majuscule

    De même j'ai une autre action à faire à chaque Got_FOCUS et Lost FOCUS.

    Je ne souhaite pas pourrir mon code en réécrivant X fois la même chose.

    Comment fait-on pour dire :
    Sur tout les évènements on change de toutes les textbox de ma page j'applique telle action.

    Merci d'avance

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Bon .....

    J'ai vue des infos en utilisant les modules de classes, mais ça me semble un peu complexe ...et cela semble gourmand en resssources.

    Je recherche plutot une fonction du genre get_event qui capterait n'imorte quel evenement de ma page.
    Si l'évènement capté est un ON_CHANGE sur une textbox quelconque alors je fais telle action sur cette textbox.
    Si c'est un évènement on_FOCUS je fais telle autre action ....

    Help !

  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
    Points : 15 546
    Points
    15 546
    Par défaut
    Mais non, ce n'est pas si compliqué
    Pour tester le code ci-après, tu insères un userform dans un classeur tout neuf
    Tu insères un module standard et un module de classe nommé classe1
    Dans userform, tu mets des textbox 1, 2, 3, beaucoup
    Ensuite, tu colles ça ou c'est dit que ça va
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    '*****************dans le module standard ***************
    Option Explicit
     
    Public Col1 As Collection
     
    Sub Ouvrir()
        Load UserForm1
        UserForm1.Show
    End Sub
    '********************************************************
     
    '********************** Dans l'UserForm *****************
     
    Private Sub UserForm_Initialize()
         Dim Cl1 As Classe1
        Dim txtbox As Control
        Dim i As Integer, nb As Byte, ctr As Control
     
        Set Col1 = New Collection
        For Each ctr In Me.Controls
            If InStr(ctr.Name, "TextBox") = 1 Then _
                nb = nb + 1
        Next
        For i = 1 To nb
            Set txtbox = Me.Controls("TextBox" & i)
     
            With txtbox
                Set Cl1 = New Classe1
                Set Cl1.Objtxt = txtbox
                Col1.Add Cl1
            End With
        Next
    End Sub
    '********************************************************
     
    '*********  Dans le module de classe "Classe1" **********
    Option Explicit
    Public WithEvents Objtxt As MSForms.TextBox
     
    Private Sub Objtxt_Enter()
        MsgBox Objtxt.Name
    End Sub
     
    Private Sub Objtxt_Change()
        MsgBox Objtxt.Name
    End Sub
     
    Private Sub Objtxt_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        MsgBox Objtxt.Name
    End Sub
     
    '********************************************************
    C'est fait ? Alors tu testes

    Avec l'aide "passive" de SilkyRoad (passive parce qu'il le sait pas encore) grâce auquel j'ai enfin pu comprendre comment et par quels méandres il faut passer pour jouer avec les collections toutes bêtes de contrôles tout simples.
    Plus un peu de lecture dans les FAQs et les discussions du forum

    NB - Les événements enter et click ne sont pas interceptés

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Merci Bien ouskel'n'or !

    Mais je n'ai pas de Form ! je sais ce n'est pas bien mais je n'ai pas le choix !
    Je suis dans une feuille et je ne suis pas sûre que ton code fonctionne.

    Je suis obligé de multiplier mon code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Private Sub TextBox_1_Change()
    Dim s As String
    TextBox_1.Value = UCase(TextBox_1.Value)
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Private Sub TextBox_2_Change()
    Dim s As String
    TextBox_2.Value = UCase(TextBox_2.Value)
    End Sub
    ..... X fois

  5. #5
    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
    Points : 15 546
    Points
    15 546
    Par défaut
    Vous êtes désespérants, vous les gens
    Je n'ai jamais fait ça pour une feuille de calculs, et ne le ferai jamais... Je ne sais donc pas si c'est faisable mais si j'avais des raisons de le faire (il faudra discuter longtemps pour me convaincre) je remplacerais l'userform pas la feuille de calculs puisque les contrôles lui sont alors liés.
    Mais je te laisse le découvrir. Tu en éprouveras une immense satisfaction et le plaisir de nous offrir la solution
    Bon courage
    Je suis tes progrès

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Bon et bien j'ai testéé 5 mnutes en remplacants
    les Me.Controls par des ActiveSheet.OLEObjects mais ce n'est pas concluant

    Et malheureusement je n'ai plus le luxe de tatonner
    C'est une urgence pour demain.

    Donc je vais multiplier mon code.
    Je sais je suis désepérante.
    Merci pour tout quand même.
    J'ai quand même testé ton code et ça marche super avec une UserForm

  7. #7
    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
    Points : 15 546
    Points
    15 546
    Par défaut
    Passe le code de tes essais... sait-on jamais... Mais pour demain, continue dans ta voie, c'est plus sûr

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    aie
    j'ai plus ce fichier là ! quand ça marche pas j'efface de rage

    Bref j'ai dupliquer mon code, je suis une as du copie/colle remplace.
    @+
    par contre mon fichie rfait presue 1Mo maintenant et ça c'est pas top.

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

Discussions similaires

  1. [c#] Récupérer un evenement d'un autre form
    Par kooljy dans le forum Windows Forms
    Réponses: 5
    Dernier message: 19/05/2006, 17h47
  2. [VB] ouvrir un fichier quelque soit son extension.
    Par gopal dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 05/05/2006, 21h59
  3. Réponses: 4
    Dernier message: 18/01/2006, 18h04
  4. Etirer le bacground quelque soit la résolution de l'écran
    Par hikosaijuro dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/09/2005, 15h39
  5. Réponses: 2
    Dernier message: 05/08/2005, 10h21

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