Microsoft 365 Associer lancement macro à une CheckBox

Fab117

XLDnaute Impliqué
Hello,

J'ai une macro qui reprend certaines informations de l'onglet "Source" vers l'onglet "Cible".

Dans la colonne "A" de "Cible", je lui fais créer des Checkbox (une par ligne reportée).

Forum01.png


VB:
Sub CopieDesDonnes()
Dim wsSource As Worksheet
Dim wsCible As Worksheet
Dim lastRow As Long
Dim i As Long
Dim chkBox As Object

' Définition des feuilles de calculs
Set wsSource = ThisWorkbook.Worksheets("Source")
Set wsCible = ThisWorkbook.Worksheets("Cible")

' Détermination de la dernière ligne de la liste
lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row

' Nettoyage de l'onglet
wsCible.Cells.ClearContents

'Effacement des checkbox présentes sur l'onglet cible
For Each chkBox In wsCible.OLEObjects
    If TypeOf chkBox.Object Is MSForms.CheckBox Then
        chkBox.Delete
    End If
Next chkBox


 ' Définit les en-tête des colonnes
wsCible.Cells(1, "B").Value = "Project ID"
wsCible.Cells(1, "C").Value = "Owner"
wsCible.Cells(1, "D").Value = "Project Name"


' Recréé le contenu de l'onglet "Cible"
For i = 3 To lastRow ' Boucle sur les lignes de la liste
    wsCible.Cells(i - 1, "B").Value = wsSource.Cells(i, "A").Value ' Il reporte l'ID projet, le owner et le titre du projet dans l'onglet Cible
    wsCible.Cells(i - 1, "C").Value = wsSource.Cells(i, "D").Value
    wsCible.Cells(i - 1, "D").Value = wsSource.Cells(i, "B").Value


Set chkBox = wsCible.OLEObjects.Add(ClassType:="Forms.CheckBox.1")
With chkBox
    .Top = wsCible.Cells(i - 1, "A").Top
    .Left = wsCible.Cells(i - 1, "A").Left
    .Width = wsCible.Cells(i - 1, "A").Width
    .Height = wsCible.Cells(i - 1, "A").Height
    .LinkedCell = ""
End With

Next i

End Sub



Cela fonctionne correctement.

Ensuite, je souhaite que lorsque l'utilisateur cliquera sur une de ces checkbox je puisse récupérer le numéro de la ligne correspondant à la CheckBox cliquée.

J'ai essayé une multitude d'options sans succès jusque là.

L'option qui semble être la plus simple serait de "lier" la CheckBox à une macro => lorsque l'utilisateur clique sur la checkBox, cela déclenche la nouvelle macro (Test23) qui va récupérer le numéro de la ligne active.

Je pensais que ce serait possible en ajoutant " OnAction = "Test23"" durant la création de la CheckBox :

Code:
Set chkBox = wsCible.OLEObjects.Add(ClassType:="Forms.CheckBox.1")

With chkBox

    .Top = wsCible.Cells(i - 1, "A").Top

    .Left = wsCible.Cells(i - 1, "A").Left

    .Width = wsCible.Cells(i - 1, "A").Width

    .Height = wsCible.Cells(i - 1, "A").Height

    .LinkedCell = ""
    
    .OnAction = "Test23"

End With


Sub Test23()
MsgBox ("Hello")
End Sub

Malheureusement ça ne fonctionne pas.

Quelqu'un aurait-il une idée de comment procéder ?



Merci d'avance.



Fab
 

Fab117

XLDnaute Impliqué
Bonjour
Pour ma part je trouve ces checkbox lourdes : les installer, les gérer et le poids qu'elles ajourent au fichier

Un simple double clic géré te permet de cocher/decocher la cellule et/ou agir
Hello Chris,
Merci d'avoir pris le temps de regarder mon problème.
Qu'entends tu par un double clique géré ?
Suggère tu de lier la macro aux cellules de la colonne "A" ?
 

Fab117

XLDnaute Impliqué
RE

Oui tu gères l'évenement Worksheet_BeforeDoubleClick de la feuille concernée et si colonne A + valeur en B tu agis...
Un exemple parmi d'autres https://excel-downloads.com/threads...lcul-selon-la-reponse.20069787/#post-20527898
Chris,

J'ai regardé ton fichier démo. Mais malheureusement je suis toujours perdu sur comment faire.

Je joins un fichier démo avec mon code pour transférer les infos relevantes de l'onglet "Source" vers l'onglet "Cible".

J'ai rajouté un "X" en colonne "A"

Sur la base de ce fichier démo, pourrais-tu stp m'indiquer comment exécuter la macro si l'utilisateur click (simple ou double, ça m'est égal) sur le "X" de la ligne qu'il veut développer.

Avec un peu d'avance bon appétit



Fab
 

Pièces jointes

  • Demo v01.xlsm
    18.1 KB · Affichages: 1

chris

XLDnaute Barbatruc
Bonsoir

La journée a été plus compliquée que prévue

J'ai remplacé tes plages par des tableaux structurés respectivement nommés T_Source et T_Cible: (on les utilises depuis 15 ans dans Excel). On n'a donc plus besoin de définir leurs position (ni feuille ni adresse).

La colonne A peut être double-cliquée : cela fait apparaitre une coche dans la cellule et fait suivre une action (pour l'instant Msgbox, à adapter) ou fait disparaitre la coche s'il y en avait une selon le même principe que les cases à cocher
 

Pièces jointes

  • CopieTableau_Coches.xlsm
    22.7 KB · Affichages: 5

Fab117

XLDnaute Impliqué
Bonsoir

La journée a été plus compliquée que prévue

J'ai remplacé tes plages par des tableaux structurés respectivement nommés T_Source et T_Cible: (on les utilises depuis 15 ans dans Excel). On n'a donc plus besoin de définir leurs position (ni feuille ni adresse).

La colonne A peut être double-cliquée : cela fait apparaitre une coche dans la cellule et fait suivre une action (pour l'instant Msgbox, à adapter) ou fait disparaitre la coche s'il y en avait une selon le même principe que les cases à cocher

Bonjour Chris,
Non seulement, ça fonctionne parfaitement (j'ai pu sans problème transposer à mon cas réel), mais j'ai aussi appris à utiliser les tableaux structurés.
Un grand merci.
Très bon début de semaine.

Fab
 

Discussions similaires

Réponses
9
Affichages
146

Statistiques des forums

Discussions
313 320
Messages
2 097 130
Membres
106 848
dernier inscrit
toufk