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 de checkbox Activex


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2024
    Messages : 3
    Par défaut Gestion de checkbox Activex
    Bonjour la commu!

    Je n'arrive décidément pas à trouver la solution à mon problème malgré beaucoup de recherches sur les forums ou de prompts à ChatGPT!!

    J'ai un tableau d'une 100aine de lignes
    Sur chaque ligne, j'ai une case à cocher ActiveX en colonne E.
    Chaque case à cocher est nommée par défaut (Checkbox1, Checkbox2, ..., Checkbox100)
    Je veux que lorsqu'on active une checkbox, la case d'à coté en colonne F, ressort un 1.

    (contexte: les utilisateurs se constituent ainsi une liste de projets)

    Voici le code que j'ai, qui n'est meme pas appelé, et que je ne comprends meme pas (c'est celui de ChatGPT ^^):

    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
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim checkBox As OLEObject
        Dim cell As Range
     
        If Not Intersect(Target, Me.Range("E:E")) Is Nothing Then
            For Each checkBox In Me.OLEObjects
                If TypeName(checkBox.Object) = "CheckBox" Then
                    If checkBox.TopLeftCell.Row = Target.Row Then
                        Set cell = Me.Cells(Target.Row, "F")
                        If checkBox.Object.Value = True Then
                            cell.Value = 1
                        Else
                            cell.Value = ""
                        End If
                        Exit For
                    End If
                End If
            Next checkBox
        End If
    End Sub

    HELP ME PLZZZZ...

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Un CheckBox a pour valeur VRAI ou FAUX et pour le placer dans une cellule, il suffit de l'indiquer dans sa propriété LinkedCell donc au lieu d'avoir 1 ou 0 vous aurez VRAI ou FAUX sans devoir écrire du code VBA.
    ChatGPT peut apporter de bonnes réponses si on lui pose les bonnes questions et donc il faut avoir en général de bonnes connaissances sur le sujet.
    Même si je trouve que c'est très lourd le seul code VBA à écrire c'est la création des CheckBox en remplissant la propriété LinkedCell avec l'adresse de la cellule et c'est à lancer une seule fois.

    [EDIT]
    Pour info, la procédure événementielle Worksheet_SelectionChange ne réagit qu'à la seule condition que l'on change de sélection de cellule donc pas un ActiveX.
    Pour intercepter le changement d'état d'un CheckBox c'est la procédure événementielle CheckBox1_Click ou encore CheckBox1_Change (pour un CheckBox nommé CheckBox1
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2024
    Messages : 3
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Un CheckBox a pour valeur VRAI ou FAUX et pour le placer dans une cellule, il suffit de l'indiquer dans sa propriété LinkedCell donc au lieu d'avoir 1 ou 0 vous aurez VRAI ou FAUX sans devoir écrire du code VBA.
    ChatGPT peut apporter de bonnes réponses si on lui pose les bonnes questions et donc il faut avoir en général de bonnes connaissances sur le sujet.
    Même si je trouve que c'est très lourd le seul code VBA à écrire c'est la création des CheckBox en remplissant la propriété LinkedCell avec l'adresse de la cellule et c'est à lancer une seule fois.

    [EDIT]
    Pour info, la procédure événementielle Worksheet_SelectionChange ne réagit qu'à la seule condition que l'on change de sélection de cellule donc pas un ActiveX.
    Pour intercepter le changement d'état d'un CheckBox c'est la procédure événementielle CheckBox1_Click ou encore CheckBox1_Change (pour un CheckBox nommé CheckBox1
    Merci Philippe Tulliez.
    Si je comprends bien, vous me proposez d'utiliser plutot des Checkbox classiques (pas des activex), et de paramétrer la LinkedCell. Seulement, il faudrait alors aller paramétrer manuellement une centaine de checkbox, sur une liste qui peut évoluer dans le temps. Ce n'est pas très évolutif.
    Auriez vous une autre idée?

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si je comprends bien, vous me proposez d'utiliser plutot des Checkbox classiques (pas des activex), et de paramétrer la LinkedCell
    Non pas du tout. Je pensais que vous aviez déjà écrit la procédure qui crée les CheckBox et qu'il suffisait d'ajouter la ligne qui alimente la propriété LinkedCell

    Voici un exemple d'une procédure qui fait ce travail

    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
    Sub CreateCheckBox()
      Const SheetName As String = "Question"   ' Nom de la feuille
      Const CellsAddr As String = "E2:E20"     ' Adresse de la plage
      Const PrefixName As String = "Question_" ' Préfixe du nom et de la légende du CheckBox
      Dim sht As Worksheet
      Dim rng As Range
      Dim Cell As Range
      Dim Chk As checkBox
      Set sht = ThisWorkbook.Worksheets(SheetName)
      Set rng = sht.Range(CellsAddr)
      If sht.CheckBoxes.Count = 0 Then
            For Each Cell In rng
              Set Chk = sht.CheckBoxes.Add(Cell.Left, Cell.Top, Cell.Width, Cell.Height)
              With Chk
              .LinkedCell = Cell.Offset(ColumnOffset:=1).Address
              .Value = False
              .Name = PrefixName & Cell.Row
              .Caption = PrefixName & Cell.Row
              End With
            Next
        Else
          MsgBox prompt:="Il y a déjà des CheckBox dans cette feuille", Buttons:=vbInformation, Title:="Création de CheckBox"
      End If
      Set sht = Nothing: Set sht = Nothing: Set rng = Nothing: Set Cell = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2024
    Messages : 3
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    Non pas du tout. Je pensais que vous aviez déjà écrit la procédure qui crée les CheckBox et qu'il suffisait d'ajouter la ligne qui alimente la propriété LinkedCell

    Voici un exemple d'une procédure qui fait ce travail

    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
    Sub CreateCheckBox()
      Const SheetName As String = "Question"   ' Nom de la feuille
      Const CellsAddr As String = "E2:E20"     ' Adresse de la plage
      Const PrefixName As String = "Question_" ' Préfixe du nom et de la légende du CheckBox
      Dim sht As Worksheet
      Dim rng As Range
      Dim Cell As Range
      Dim Chk As checkBox
      Set sht = ThisWorkbook.Worksheets(SheetName)
      Set rng = sht.Range(CellsAddr)
      If sht.CheckBoxes.Count = 0 Then
            For Each Cell In rng
              Set Chk = sht.CheckBoxes.Add(Cell.Left, Cell.Top, Cell.Width, Cell.Height)
              With Chk
              .LinkedCell = Cell.Offset(ColumnOffset:=1).Address
              .Value = False
              .Name = PrefixName & Cell.Row
              .Caption = PrefixName & Cell.Row
              End With
            Next
        Else
          MsgBox prompt:="Il y a déjà des CheckBox dans cette feuille", Buttons:=vbInformation, Title:="Création de CheckBox"
      End If
      Set sht = Nothing: Set sht = Nothing: Set rng = Nothing: Set Cell = Nothing
    End Sub


    Génial!! Merci beaucoup Philippe Tulliez, c'est parfait

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

Discussions similaires

  1. Création et gestion de checkbox en dynamique
    Par davinout dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 15/01/2007, 15h47
  2. gestion d'un ActiveX
    Par kurkaine dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/12/2006, 14h53
  3. la gestion de checkbox
    Par way66 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/11/2006, 13h06
  4. Gestion des checkbox en API32 ?
    Par pj69100 dans le forum MFC
    Réponses: 2
    Dernier message: 01/05/2006, 11h12

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