Bouton avec un argument

Bonjour à tous,

mon nouveau problème a un rapport avec l'utilisation des boutons. J'ai une macro d'insertion de nouvelle entrée (une simple copie de cellules "modèles" à la fin de mon tableau), lancée lorsque j'appuie sur un bouton.

Je souhaite adapter cette macro pour qu'elle ait un comportement différent en fonction du nombre de cellules sélectionnées : si j'ai sélectionné une ligne, la nouvelle entrée sera insérée au dessus de cette ligne (au milieu de mon tableau), sinon, elle est insérée à la fin du tableau.

J'ai pensé à mettre en argument de ma macro Target, pour avoir les cellules sélectionnées au moment où on appuie sur le bouton qui lance la macro, mais évidemment cela ne fonctionne pas, appuyer sur un bouton ne semble pas accepter des arguments en entrée. Voici la macro à laquelle j'avais pensé :

Sub NouvelleEntrée(ByVal Target As Range)
Application.ScreenUpdating = False
'test pour savoir si les cellules modèles n'ont pas été supprimées
If Range("AA1") <> "Ne pas supprimer ! Utile dans la macro" Then
    Output = MsgBox("Les cellules entre AA1 et AI3 ont été modifiées, impossible d'insérer une nouvelle entrée. Veuillez rétablir une version précédente", vbCritical, "Données modifiées")
    End
End If

If Target.Count > 7 Then 'si on sélectionne la ligne (plus de 7 cellules par exemple)
    ligne = Target.Row 'insertion de la nouvelle entrée au dessus de la ligne sélectionnée et adaptation du tableau
    Rows(ligne & ":" & ligne).Insert Shift:=xlDown
    Rows(ligne & ":" & ligne).Insert Shift:=xlDown
    Range("AA2:AI3").Copy
    Range("A" & ligne).Select
    ActiveSheet.Paste
    Range("B" & ligne - 2 & ":B" & ligne - 1).AutoFill Destination:=Range("B" & ligne - 2 & ":B" & ligne + 3), Type:=xlFillDefault
    Range("C" & ligne).Select

Else
    'Ligne d'insertion de la nouvelle entrée
        LigneEntrée = Range("A2").End(xlDown).Row + 1
    'Copie du journal, Numéro entrée, Pièce et date
        Range("AA2:AI3").Select
        Selection.Copy
        Cells(LigneEntrée, 1).Select
        ActiveSheet.Paste

        Application.CutCopyMode = False

    'Sélection de la première cellule de date
        Range("C" & LigneEntrée).Select
End If

End Sub

Auriez vous donc une solution ? Merci d'avance !

En me creusant un peu la tête, il suffisait de remplacer target par selection : les cellules sélectionnées le sont toujours pendant l'exécution de la macro.

Sub NouvelleEntrée()
If Selection.Count > 7 Then 'si on sélectionne la ligne (plus de 7 cellules par exemple)
   ligne = Selection.Row 'insertion de la nouvelle entrée au dessus de la ligne sélectionnée et adaptation du tableau
    Rows(ligne & ":" & ligne).Insert Shift:=xlDown
    Rows(ligne & ":" & ligne).Insert Shift:=xlDown
    Range("AA2:AI3").Copy
    Range("A" & ligne).Select
    ActiveSheet.Paste
    Range("B" & ligne - 2 & ":B" & ligne - 1).AutoFill Destination:=Range("B" & ligne - 2 & ":B" & ligne + 3), Type:=xlFillDefault
    Range("C" & ligne).Select

Else 'sinon on copie la nouvelle entrée à la fin
    'Ligne d'insertion de la nouvelle entrée
       LigneEntrée = Range("A2").End(xlDown).Row + 1
    'Copie du journal, Numéro entrée, Pièce et date
       Range("AA2:AI3").Select
        Selection.Copy
        Cells(LigneEntrée, 1).Select
        ActiveSheet.Paste

        Application.CutCopyMode = False

    'Sélection de la première cellule de date
       Range("C" & LigneEntrée).Select
End If

End Sub

 
Rechercher des sujets similaires à "bouton argument"