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éation d'un évènement commun à plusieurs CheckBox (Oleobjects) créées automatiquement


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 35
    Points : 22
    Points
    22
    Par défaut Création d'un évènement commun à plusieurs CheckBox (Oleobjects) créées automatiquement
    Bonjour,

    C'est après plusieurs essais totalement infructueux que je me résolue à demander votre aide.

    Je souhaite programmer des évènements commun à toutes les checkbox présentes sur une feuille Excel et auparavant créées automatiquement.

    Voici le code de création de la checkbox :

    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
    Private Sub btnAddNewTask_Click()
     
    Dim CheckBoxLeft As Single
    Dim CheckBoxTop As Single
    Dim RowNumber As Single
     
    CheckBoxLeft = Range("A2").End(xlDown).Offset(0, 9).Left + 30
    CheckBoxTop = Range("A2").End(xlDown).Offset(0, 9).Top - 3
    RowNumber = Range("a2").End(xlDown).Row
     
    Dim SelectBox As OLEObjects
     
    ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
            DisplayAsIcon:=False, Left:=CheckBoxLeft, Top:=CheckBoxTop, Width:=108, Height:= _
            21).Select
     
    With Selection
        .Object.Caption = ""
        .LinkedCell = "J" & NbOfRows
        .Object.Value = False
    End With
     
    End Sub
    A noter que j'ai choisi un Contrôle ActiveX plutôt qu'un Contrôle de formulaire parce que ca me permettait par la suite de redimensionner les lignes, tout en gardant le contrôle sur la même ligne (impossible avec un contrôle de formulaire, qui "flotte" sur la feuille).

    Je souhaite créer un évènement qui changerait la couleur de la ligne quand on clique sur le checkbox, c'est à dire quand celui-ci devient TRUE, et qui revient à sa couleur normale quand on reclique dessus, c'est à dire quand celui-ci devient FALSE.

    J'ai essayé de créer une classe et d'utiliser WithEvent, en m'inspirant des articles de Pierre Fauconnieret SilkyRoad, mais sans succès.

    Si vous pouviez m'aider la dessus je vous en serais très reconnaissant.

    Merci à vous tous,

    R.

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour,
    Pour ce que tu veux je pense que cette démo est plus complète
    A+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    J'ai regardé avec attention le lien proposé et en m'inspirant de la démo, j'ai modifié mon code comme suit :

    Dans un module de classe nommé "Classe1"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public WithEvents GroupCheckBoxes As msforms.checkbox
     
    Private Sub GroupCheckBoxes_Click()
        MsgBox ("Test")
    End Sub
    Dans le code de la feuille :

    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
    Option Explicit
     
    Dim CollectBouton As Collection
    Dim ClBouton As Collection
     
    Dim mBouton As Classe1
    Private Sub MakeCheckBox_Click()
     
    Dim CheckBoxLeft As Single
    Dim CheckBoxTop As Single
    Dim RowNumber As Single
     
    CheckBoxLeft = Range("A2").End(xlDown).Offset(0, 9).Left + 30
    CheckBoxTop = Range("A2").End(xlDown).Offset(0, 9).Top - 3
    RowNumber = Range("a2").End(xlDown).Row
     
    Dim SelectBox As OLEObjects
     
     
    ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
            DisplayAsIcon:=False, Left:=CheckBoxLeft, Top:=CheckBoxTop, Width:=108, Height:= _
            21).Select
     
     
    With Selection
        .Object.Caption = ""
        .LinkedCell = "J" & RowNumber
        .Object.Value = False
    End With
     
    Set CollectBouton = New Collection
    Set ClBouton = New Collection
    Set mBouton = New Classe1
    Set mBouton.GroupCheckBoxes = Selection
    CollectBouton.Add mBouton
    ClBouton.Add Selection
     
    End Sub
    Cependant je reçois une erreur :

    Erreur d'exécution '13':

    Incompatibilité de type
    Que devrais-je faire ?

    Merci pour vos réponse.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    L'erreur "Incompatibilité de type" est peut-être provoqué par une erreur dans la déclaration de SelectBox (code de la feuille).
    Il faudrait remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim SelectBox As OLEObjects
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim SelectBox As OLEObject
    A+

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Tu ne crée pas l'objet...
    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
    Private Sub MakeCheckBox_Click()
    Dim CheckBoxLeft As Single
    Dim Cel As Range, N
    Dim RowNumber As Long
    Dim SelectBox As OLEObjects
        RowNumber = Range("A2").End(xlDown).Row
        Set Cel = Cells(RowNumber, 9)
        Set SelectBox = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
            DisplayAsIcon:=False, Left:=Cel.Left + 30, Top:=Cel.Top - 3, Width:=108, Height:= _
            21)
        'Et si tu veux retrouver le CkckBox qui a été cliquer tu doit mettre un point de repère,
        'Par exemple le N° de la ligne
     
        N = Right("000" & RowNumber, 4) 'Peu aller jusque 9999
        SelectBox.Name = "Ckeck" & N
        SelectBox.Caption = ""
        SelectBox.LinkedCell = "J" & RowNumber
        SelectBox.Value = False
     
        Set CollectBouton = New Collection
        'Set ClBouton = New Collection 'Si tu refait chaque fois une
        'collection y aura jamais qu'un checkbox dans la collection !!
        'Faut créer la collection une seule fois, dans le Open par exemple.
        Set mBouton = New Classe1
        Set mBouton.GroupCheckBoxes = SelectBox
        CollectBouton.Add mBouton
        ClBouton.Add SelectBox
        Set SelectBox = Nothing
        Set mBouton = Nothing
    End Sub
    et dans le module de classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub GroupCheckBoxes_Click()
    Dim N
        N = Val(Right(GroupCheckBoxes.Name, 4))
        MsgBox ("Vous avez Cliqué sur le checkbox de la ligne") & N
    End Sub
    j'ai pas testé...
    EDIT:
    Pour certaine propriétés faut ajouter .Object, par ex..
    Set mBouton.GroupCheckBoxes = SelectBox.Object

Discussions similaires

  1. Gestionnaire d'évènement commun à plusieurs contrôles
    Par jacquesprogram dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 07/08/2011, 20h00
  2. Réponses: 5
    Dernier message: 20/09/2005, 22h48
  3. [VBA] Gestionnaire d'évènement commun
    Par Neilos dans le forum Access
    Réponses: 11
    Dernier message: 14/06/2005, 11h18
  4. Comment cocher/décocher plusieurs "checkbox"?
    Par Crazynoss dans le forum ASP
    Réponses: 2
    Dernier message: 15/05/2005, 23h38
  5. Cochage de plusieurs checkbox
    Par licorne dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 09/03/2005, 10h30

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