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 SubDans 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 SubAvec un mot de passe :
Sub InsertDate()
ActiveSheet.Unprotect "aaaa"
ActiveCell = Date
ActiveSheet.Protect "aaaa"
End SubLa 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.
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.