Macro - Suppression des erreurs lors du verrouillage de la feuille

Bonjour,

J'ai une feuille excel avec quelques macros qui fonctionnent parfaitement grâce aux talents de ce site cependant lorsque je veux verrouille la feuille ça bug sur les macros.

Peut-on modifier ces macros pour qu'elles fonctionnent lorsque ce fichier est verrouillé?

Je n'arrive malheureusement pas à envoyer le fichier car il est trop volumineux mais voici le code en question:

Option Explicit


'Pour insérer 3 lignes vides en dessous de la cellule sélectionnée


Sub insertion2()
Application.EnableEvents = False
ActiveCell.Offset(1, 0).EntireRow.Resize(3).Insert Shift:=xlDown
Application.EnableEvents = True
End Sub

'Pour insérer la date du jour dans la cellule sélectionnée

Sub InsertDate()
ActiveCell = Date
End Sub

'Pour imprimer la feuille sans les lignes vides


Sub ImprimeSansVide()
Dim Plage As Range
On Error Resume Next
Application.ScreenUpdating = False
With ActiveSheet
Set Plage = .Range("C3:C250").Cells.SpecialCells(xlCellTypeBlanks)
If Not Plage Is Nothing Then Plage.Rows.Hidden = True
.PrintPreview 'pour voir sans imprimer
'.PrintOut 'pour imprimer directement
.Rows.Hidden = False
End With
End Sub

'Pour mettre le texte de certaines cellules en majuscule


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range("E3:E250"), Target.Cells(1)) Is Nothing Then
If Not IsEmpty(Target) Then
Target.Value = UCase(Target.Value)
End If
End If
Exit Sub
End Sub

' Masquer les lignes ou les cellules de la colonne D sont remplies


Sub masquer_ligne_vide_TEST2()
Dim Cel As Range
For Each Cel In Worksheets(1).Range("d3:d250").Cells
If Cel <> vbNullString And Cel.Value <> "" Then
Cel.EntireRow.Hidden = True
End If
Next
End Sub

' Afficher les lignes masquées


Sub AfficherColonneLigne()
Columns.EntireColumn.Hidden = False
Rows.EntireRow.Hidden = False
End Sub

Mes meilleures salutations,

Thierry

Salut Thierry,

Un fichier simplifié aurait fait l'affaire

Dans le fichier V1, il y a un code placé à l'ouverture (ThisWorkbook.Open) qui permet les macros sur la ''Feuil1", malgré qu'elle est protégée. La même macro ne fonctionne pas sur la ''Feuil2" :

Private Sub Workbook_Open()
    Sheets("Feuil1").Protect , UserInterfaceOnly:=True
End Sub

Dans le fichier V2, la feuille est déprotégée directement dans le code pour permettre une action précise :

Sub InsertDate()
    ActiveSheet.Unprotect
    ActiveCell = Date
    ActiveSheet.Protect
End Sub

Avec un mot de passe :

Sub InsertDate()
    ActiveSheet.Unprotect "aaaa"
    ActiveCell = Date
    ActiveSheet.Protect "aaaa"
End Sub

La première solution est intéressante si tu as plusieurs codes pour lesquels il est nécessaire de déprotéger une ou plusieurs feuilles.

Amicalement.

7thierry-v1.xlsm (21.74 Ko)
6thierry-v2.xlsm (17.52 Ko)

Bonjour Yvouille,

Merci pour votre réponse; ça fonctionne parfaitement bien. Voici le code:

Option Explicit


'Pour insérer 3 lignes vides en dessous de la cellule sélectionnée:


Sub insertion2()
ActiveSheet.Unprotect "."
Application.EnableEvents = False
ActiveCell.Offset(1, 0).EntireRow.Resize(3).Insert Shift:=xlDown
Application.EnableEvents = True
ActiveSheet.Protect "."
End Sub

'Pour insérer la date du jour dans la cellule sélectionnée:

Sub InsertDate()
ActiveSheet.Unprotect "."
ActiveCell = Date
ActiveSheet.Protect "."
End Sub

'Pour imprimer la feuille sans les lignes vides:


Sub ImprimeSansVide()
ActiveSheet.Unprotect "."
Dim Plage As Range
On Error Resume Next
Application.ScreenUpdating = False
With ActiveSheet
Set Plage = .Range("C3:C250").Cells.SpecialCells(xlCellTypeBlanks)
If Not Plage Is Nothing Then Plage.Rows.Hidden = True
.PrintPreview 'pour voir sans imprimer
'.PrintOut 'pour imprimer directement
.Rows.Hidden = False
End With
ActiveSheet.Protect "."
End Sub

'Pour mettre le texte de certaines cellules en majuscule:


Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect "."
If Not Application.Intersect(Range("E3:E250"), Target.Cells(1)) Is Nothing Then
If Not IsEmpty(Target) Then
Target.Value = UCase(Target.Value)
End If
End If
Exit Sub
ActiveSheet.Protect "."
End Sub

' Masquer les lignes si les cellules de la colonne D sont remplies:


Sub masquer_ligne_vide_TEST2()
ActiveSheet.Unprotect "."
Dim Cel As Range
For Each Cel In Worksheets(1).Range("d3:d250").Cells

If Cel <> vbNullString And Cel.Value <> "" Then
Cel.EntireRow.Hidden = True
End If
Next
ActiveSheet.Protect "."
End Sub

' Afficher les lignes masquées:


Sub AfficherColonneLigne()
ActiveSheet.Unprotect "."
Columns.EntireColumn.Hidden = False
Rows.EntireRow.Hidden = False
ActiveSheet.Protect "."
End Sub

Meilleures salutations et belles fêtes!

Tu n'as pas dû lire mon info ci-dessous :-)

La première solution est intéressante si tu as plusieurs codes pour lesquels il est nécessaire de déprotéger une ou plusieurs feuilles.

Chaleureusement.

Bonjour Yvouille,

J'ai bien essayé le premier code mais il y avait un bug lorsque je cliquait sur le bouton imprimer.

Mes meilleurs messages,

Thierry

Y a-t-il une solution sur ce site pour pouvoir envoyer des fichiers plus volumineux? Ce serait plus simple.

Rechercher des sujets similaires à "macro suppression erreurs lors verrouillage feuille"