XL 2016 Ajouter des cellules copiées dans une feuille protégée

MELDIO

XLDnaute Nouveau
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..
 

danielco

XLDnaute Accro
Dans le module ThisWorkbook, mets :

VB:
Private Sub Workbook_Open()
  Sheets("Feuil1").Protect Password:="PWD", userinterfaceonly:=True
End Sub

Il faut remplacer "Feuil1" par le nom de la feuille et "PWD" par le mot de passe de la feuille.

Dans un module standard, mets :

Code:
Sub Coller()
  ActiveSheet.Paste
End Sub

Il faut ensuite attribuer un raccourci à la macro. Si tu ne sais pas comment insérer une macro ou attribuer un raccourci, dis-le.

Daniel
 

job75

XLDnaute Barbatruc
Bonjour MELDIO, danielco,

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
A+
 

Pièces jointes

  • Insertion(1).xlsm
    21.7 KB · Affichages: 9

MELDIO

XLDnaute Nouveau
Bonjour MELDIO, danielco,

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
A+


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).
 

MELDIO

XLDnaute Nouveau
Dans le module ThisWorkbook, mets :

VB:
Private Sub Workbook_Open()
  Sheets("Feuil1").Protect Password:="PWD", userinterfaceonly:=True
End Sub

Il faut remplacer "Feuil1" par le nom de la feuille et "PWD" par le mot de passe de la feuille.

Dans un module standard, mets :

Code:
Sub Coller()
  ActiveSheet.Paste
End Sub

Il faut ensuite attribuer un raccourci à la macro. Si tu ne sais pas comment insérer une macro ou attribuer un raccourci, dis-le.

Daniel


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

MELDIO

XLDnaute Nouveau
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?
 

job75

XLDnaute Barbatruc
A présent je voudrais voir la possibilité pour ajouter un bouton
Voyez ce fichier (2) et le code :
VB:
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
La macro Inserer est affectée au bouton.
 

Pièces jointes

  • Insertion(2).xlsm
    22.9 KB · Affichages: 7

job75

XLDnaute Barbatruc
Prenez ce fichier (3), ceci est mieux :
VB:
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
Bonne nuit.
 

Pièces jointes

  • Insertion(3).xlsm
    23 KB · Affichages: 7

MELDIO

XLDnaute Nouveau
Prenez ce fichier (3), ceci est mieux :
VB:
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
Bonne nuit.

Merci bien job75 ..
 

Discussions similaires

Réponses
4
Affichages
945

Statistiques des forums

Discussions
315 080
Messages
2 116 023
Membres
112 637
dernier inscrit
pseudoinconnu