web-dev-qa-db-fra.com

Excel VBA: obtenir la ligne du bouton cliqué

J'essaie de créer un bouton dans Excel qui copie une certaine plage de cellules du classeur actif vers un autre classeur. La copie de cette plage fonctionne parfaitement lorsque je spécifie une plage fixe, mais je suis perplexe sur la façon de comprendre la ligne du bouton cliqué.

Chaque ligne contient environ 7 cellules, et la 8e cellule contient une forme avec une macro attachée (le bouton). Lorsque l'utilisateur appuie sur ce bouton, les 7 cellules de la même ligne que la ligne contenant le bouton enfoncé doivent être copiées.

L'utilisation d'ActiveCell est inutile, car appuyer sur le bouton ne définit pas réellement cette cellule comme active. J'ai beaucoup cherché mais je n'arrive pas à trouver comment obtenir cette valeur. Une fois que j'ai le numéro de ligne du bouton cliqué, je peux trouver le reste par moi-même.

16
Jort

Chaque Shape a une propriété TopLeftCell. Il contient une cellule dans laquelle réside le coin supérieur gauche de la forme.

22
GSerg

Il y a une excellente solution mentionnée ici: http://www.ozgrid.com/forum/showthread.php?t=33351&p=167317#post167317

Code d'or copié à partir du message ci-dessus:

Sub Mainscoresheet() 
     ' Mainlineup Macro
    Dim b As Object, cs As Integer 
    Set b = ActiveSheet.Buttons(Application.Caller) 
    With b.TopLeftCell 
        cs = .Column 
    End With 
    MsgBox "Column Number " & cs 
End Sub 
19
FraggaMuffin

Excellente réponse. Btw Cela fonctionne aussi pour Rownumber!

'Same for rownumbers!
Sub Mainscoresheet() 
     ' Mainlineup Macro
    Dim b As Object, RowNumber As Integer 
    Set b = ActiveSheet.Buttons(Application.Caller) 
    With b.TopLeftCell 
        RowNumber = .Row
    End With 
    MsgBox "Row Number " & RowNumber 
End Sub
6
Robert Nagtegaal