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 :

Modules de classe événement click sur OLEObjects [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut Modules de classe événement click sur OLEObjects
    Bonjour,
    En aide à un forumeur, je me trouve exposé à un problème que je ne saisis pas... J'ai beau chercher, m'arracher les cheveux, rien n'y fait. Je fais donc appel àvos lumières. Merci de vous pencher sur ce cas...
    Voici ce que j'ai fait (et qui ne fonctionne pas!)

    Dans un module standard :
    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
    Public Bouton() As New Classe1
    Dim Obj As OLEObject
     
    Sub CreateButton()
    Worksheets("Principal").Select
    Set Obj = ActiveSheet.OLEObjects.Add("Forms.CommandButton.1", Left:=100, Top:=150, Width:=80, Height:=30)
    With Obj
        .Name = "ButtonInitFeuille"
        .Object.Caption = "Initialisation"
    End With
    InitBoutons
    End Sub
     
    Sub InitBoutons()
    Dim Cpt As Integer
     
    For Each Obj In Worksheets("Principal").OLEObjects
        'If oleObj.Name = "ButtonInitFeuille" Then
        If TypeOf Obj.Object Is MSForms.CommandButton Then
            Cpt = Cpt + 1
            ReDim Preserve Bouton(1 To Cpt)
            Set Bouton(Cpt).ButtonInitFeuille = Obj.Object
       End If
    Next
    Set Obj = Nothing
    End Sub
     
    Sub InitFeuilleTab()
        MsgBox "Ca fonctionne!"
    End Sub
    Dans le module de classe (nommé Classe1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Public WithEvents ButtonInitFeuille As MSForms.CommandButton
     
    Private Sub ButtonInitFeuille_Click()
        Call InitFeuilleTab
    End Sub
    Voilà. Lorsque je créé un bouton en lançant "CreateButton", il le créé bien. Cependant, le clic n'a aucun effet. Pour obtenir un résultat, il faut lancer "CreateButton" puis, manuellement (ALT+F8) "InitBoutons"... J'en perds mon lâtin.
    Merci.
    Vous dites, si vous voulez un classeur exemple ou de plus amples indications...

  2. #2
    Membre chevronné
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Par défaut
    Bonjour Pijaku,

    Donc, en pas à pas, tu ne passe même pas dans ta sub InitBoutons() ?
    A tout hasard, essaye avec un

  3. #3
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Salut,
    Le mode pas à pas ne semble pas fonctionner.
    Il passe de toutes façons par InitButons. j'ai essayé de mettre un MsgBox dans la boucle de InitButons et il s'affiche bien à chaque Bouton...
    Call n'apporte rien de plus.
    Merci quand même

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Il y a des bizarreries dans ton code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Bouton() As New Classe1
    Les parenthèses sont de trop. Je suppose que tu veux manipuler une classe qui serait en quelque sorte une collection de boutons, mais tu ne peux faire cela comme ça.

    Dès lors, ta ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Bouton(Cpt).ButtonInitFeuille = Obj.Object
    pose problème également.

    Dans la classe, tu déclares un bouton comme variable puis une procédure sur évènement, mais il faudrait encore attribuer un objet à cette variable.

    A ce stade, il serait utile que tu expliques d'abord en français ce que tu souhaites réaliser, au lieu de donner du code qui ne correspond probablement pas à ton objectif, et nous pourrons alors de guider au mieux.

    A toutes fins utiles, tu peux lire mon tuto sur la création de classes personnalisées.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour Pierre,

    Ce que je souhaite réaliser :
    A l'ouverture du classeur :
    1- Ajout d'une feuille nommée "principal",
    2- suppression de toutes les autres feuilles,
    3- ajouter un bouton de commande dans ma feuille,
    ================> Jusqu'ici tout va bien

    4- l'affecter à une classe d'objet pour pouvoir déclencher un événement (toujours le même) au clic.
    5- Lorsque je le souhaite, re-lancer (par : ALT+F8) les points 3 (création) et 4 (affectation).

    Le 5- pourra être fait à volonté.

    Je suis parti de la réponse de Patrick dans cette discussion en essayant de l'adapter. Je pensais naïvement changer "Image" en "CommandButton" et que ça roulerai, mais...

    De plus, ce que je ne saisis pas dans ce que j'ai réalisé, c'est que les 2 codes fonctionnent. Lancés séparément, "CreateButton" me créé bien mon CommandButton et "InitButton" fait en sorte que mon bouton réagisse au clic.
    Par contre, la réunion des deux codes en une seule procédure créé mon bouton mais ne "l'initialise" pas...

    J'ai lu votre tuto avant de me lancer dans cette histoire... Très explicite, mais je dois être encore trop novice pour bien le comprendre... Je vais le lire autant de fois que nécessaire pour enfin comprendre.

    Merci.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    La réponse sera différente si tu souhaites un résultat ou si tu souhaites, par goût d'apprendre, à ajouter des éléments qui réagissent au même évènement.

    Si le but est le résultat, je serai pragmatique en ajoutant des boutons de formulaires (des "shape") sur les feuilles et en leur renseignant comme propriété le nom de la macro qui doit être activée au clic (propriété OnAction).

    Cela éviterait la manipulation de classe et de collection d'objets
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. Lier un évènement click sur un tabItem
    Par m-mas dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 09/12/2011, 18h13
  2. l'évènement click sur une ligne de datagrid
    Par ayouta.gfs dans le forum C#
    Réponses: 11
    Dernier message: 25/05/2011, 03h22
  3. [2.0] Générer un événement click sur un textbox
    Par dieuzorro dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 27/02/2008, 21h26
  4. Problème d'évènement click sur mon onglets
    Par bitou11 dans le forum Access
    Réponses: 7
    Dernier message: 02/08/2006, 23h24
  5. événement Click sur Check et option button ??
    Par badsepuku dans le forum IHM
    Réponses: 3
    Dernier message: 09/02/2006, 12h51

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