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 SubAuriez 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