Bonjour le forum!
J'ai réalisé une facture modèle qui contient des formules. J'ai essentiellement protégée les cellules (contenant des formules et autres informations fixes) qui ne nécessiteront pas de modification. Mais toutefois ma feuille de calcul est destinée à être flexible et modifiables (en ce qui concerne les les cellules qui ne sont pas protégées). Ce que j'ai réalisé sans souci sauf la partie pour insérer de nouvelles lignes. En effet, pas pour insérer une ligne simple et vide, mais une ligne précédemment copiée sur la même feuille en faisant un clic droit et "insérer les cellules copiées".. Comme c'est cette option seule qui me permet d'ajouter de nouvelles lignes avec les formules contenues dans les précédentes. Elle ne marche que lorsque la feuille n'est pas protégée, moi j'aimerais le second cas pour éviter les modifications par erreur (des formules par exemple).
Je veux une sortie pour cette problématique ou une autre approche pour contourner le genre de problème.. Merci d'avance de votre aide..
Ca peut se faire par macro, en utilisant un raccourci clavier. Si tu es d'accord, dis-le. Cependant, ça implique d'ôter la protection par macro, donc il y a un risque d'écraser des formules.
Ca peut se faire par macro, en utilisant un raccourci clavier. Si tu es d'accord, dis-le. Cependant, ça implique d'ôter la protection par macro, donc il y a un risque d'écraser des formules.
Voyez le fichier joint et cette macro (clic droit sur l'onglet et Visualiser le code) :
VB:
Dim plage As Range 'mémorise la variable
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.CutCopyMode And Not plage Is Nothing Then
If ActiveCell.Column + plage.Columns.Count - 1 <= Columns.Count Then
If MsgBox("Insérer la plage copiée au-dessus de " & ActiveCell.Address(0, 0) & " ?", 4) = 7 Then Exit Sub
Protect "toto", UserInterfaceOnly:=True
Application.CutCopyMode = 0
ActiveCell.Resize(, plage.Columns.Count).Insert xlDown
plage.Copy ActiveCell
Set plage = Selection
End If
Else
Selection.Areas(1).Select 'zones multiples non autorisées
Set plage = Selection
End If
End Sub
Voyez le fichier joint et cette macro (clic droit sur l'onglet et Visualiser le code) :
VB:
Dim plage As Range 'mémorise la variable
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.CutCopyMode And Not plage Is Nothing Then
If ActiveCell.Column + plage.Columns.Count - 1 <= Columns.Count Then
If MsgBox("Insérer la plage copiée au-dessus de " & ActiveCell.Address(0, 0) & " ?", 4) = 7 Then Exit Sub
Protect "toto", UserInterfaceOnly:=True
Application.CutCopyMode = 0
ActiveCell.Resize(, plage.Columns.Count).Insert xlDown
plage.Copy ActiveCell
Set plage = Selection
End If
Else
Selection.Areas(1).Select 'zones multiples non autorisées
Set plage = Selection
End If
End Sub
Hello, Merci beaucoup job75..
En effet, votre fichier est parfait. L'insertion marche quand même le la feuille est protégée.
Mais à moi je ne réussi pas encore à l'adapter dans mon fichier défaut de manipulation des macros..
J'ai adopter le code, mais rien n'y fit.
J'ai enregistreé moi même le macro, mais ne marche pas après verrouillage de la feuille. Réagit uniquement quand j'exécuté le macro manuellement depuis l'onglet "affichage>>macro>>exécuter".. : ce qui n'est pas pratique pour un usager lamda..
Je voudrais svp que vous me définissez ici votre procédure que je puisse réaliser ça pas à pas. Merci d'avance.
A la fin j'aimerais aussi ajouter un bouton pour insérer les lignes en questions en fonction de là ou e curseur est posé sans pour autant faire les clics droits.. (mais lui c'est après avoir réussir le premier cas).
Oui, j'ai besoin d'éclaircissement par rapport à la manipulation des macros.. L'insertion surtout car j'ai essayé le code de job75 sans succès.. Merci beaucoups d'avance..
C'est évidemment magique..
Merci danielco..
Merci beaucoups job75..
A présent je voudrais voir la possibilité pour ajouter un bouton raccourci pour exécuter cette action si possible..
J'ai aussi essayer pour le raccourci clavier mais la macro ne s'affiche pas dans la liste des macros. Que faire?
Dim plage As Range 'mémorise la variable
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.CutCopyMode = 0 Or plage Is Nothing Then Selection.Areas(1).Select: Set plage = Selection 'zones multiples non autorisées
End Sub
Sub Inserer()
If Application.CutCopyMode = 0 Or plage Is Nothing Then Exit Sub
If ActiveCell.Column + plage.Columns.Count - 1 <= Columns.Count Then
If MsgBox("Insérer la plage copiée au-dessus de " & ActiveCell.Address(0, 0) & " ?", 4) = 7 Then Exit Sub
Protect "toto", UserInterfaceOnly:=True
Application.CutCopyMode = 0
ActiveCell.Resize(, plage.Columns.Count).Insert xlDown
plage.Copy ActiveCell
Set plage = Selection
End If
End Sub
Dim plage As Range 'mémorise la variable
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.CutCopyMode = 0 Then Selection.Areas(1).Select: Set plage = Selection 'zones multiples non autorisées
End Sub
Sub Inserer()
If plage Is Nothing Then Application.CutCopyMode = 0
If Application.CutCopyMode = 0 Then Exit Sub
If ActiveCell.Column + plage.Columns.Count - 1 <= Columns.Count Then
If MsgBox("Insérer la plage copiée au-dessus de " & ActiveCell.Address(0, 0) & " ?", 4) = 7 Then Exit Sub
Protect "toto", UserInterfaceOnly:=True
Application.CutCopyMode = 0
ActiveCell.Resize(, plage.Columns.Count).Insert xlDown
plage.Copy ActiveCell
Set plage = Selection
End If
End Sub
Dim plage As Range 'mémorise la variable
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.CutCopyMode = 0 Then Selection.Areas(1).Select: Set plage = Selection 'zones multiples non autorisées
End Sub
Sub Inserer()
If plage Is Nothing Then Application.CutCopyMode = 0
If Application.CutCopyMode = 0 Then Exit Sub
If ActiveCell.Column + plage.Columns.Count - 1 <= Columns.Count Then
If MsgBox("Insérer la plage copiée au-dessus de " & ActiveCell.Address(0, 0) & " ?", 4) = 7 Then Exit Sub
Protect "toto", UserInterfaceOnly:=True
Application.CutCopyMode = 0
ActiveCell.Resize(, plage.Columns.Count).Insert xlDown
plage.Copy ActiveCell
Set plage = Selection
End If
End Sub