Erreur de compilation 1004

  • Initiateur de la discussion Initiateur de la discussion chris6999
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

chris6999

XLDnaute Impliqué
Bonjour le FORUM

Quelqu'un pourrait-il m'expliquer pourquoi ma macro affiche une erreur de type 1004 (impossible d'exécuter car feuille protégée).

Le principe est le suivant:
La macro filtre sur la valeur contenue dans B4 et retire le filtre lorsque B4 vide.
Le filtre fonctionne nickel lorsque la feuille n'est pas protégée mais impossible de l'exécuter dans le cas contraire (bloque sur la ligne en rouge)
Je préfèrerais ne pas alourdir à mon code avec des ordres de type protect et unprotect.
Je précise que dans les paramètres de protection j'ai autorisé l'utilisation des filtres automatiques

SI quelqu'un a une idée sur la question!
Merci d'avance et bonne journée à tous

Private Sub Worksheet_Change(ByVal Target As Range)

'fitre les lignes à partir du nom


' Si modification de la cellule B4
If Target.Address(0, 0) = "B4" Then
' Si la cellule contient une valeur
If Target.Value <> "" Then
' Filter sur cette valeur
Range("A6:F6").AutoFilter Field:=1, Criteria1:="=*" & Target.Value & "*"
Else
' Supprimer le filtre
Range("A6:F6").AutoFilter Field:=1
If Range("B4") = "" Then
Exit Sub
End If
 

Pièces jointes

Re : Erreur de compilation 1004

Bonjour à tous,

Peux-tu essayer en enlevant la Protection et en la remettant en fin de procédure :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)


 'fitre les lignes à partir du nom
 
 ActiveSheet.Unprotect
   ' Si modification de la cellule B4
   If Target.Address(0, 0) = "B4" Then
     ' Si la cellule contient une valeur
     If Target.Value <> "" Then
       ' Filter sur cette valeur
       Range("A6:F6").AutoFilter Field:=1, Criteria1:="=*" & Target.Value & "*"
           
     Else
       ' Supprimer le filtre
       Range("A6:F6").AutoFilter Field:=1
 If Range("B4") = "" Then
 Exit Sub
 End If
 
 


'identification personne qui a saisi la décision
'affiche username et la date dans colonne U et V lorsque colonne Q différent de ""
If Target.Column = 18 Then
  If Target.Value = "" Then
    Range("w" & Target.Row & ":x" & Target.Row).ClearContents
    Else
    Range("w" & Target.Row) = Application.UserName
    Range("x" & Target.Row) = Date
End If
End If
 
 'identification personne qui a saisi l'état
'affiche username et la date dans colonne w et x lorsque colonne p différent de ""
If Target.Column = 16 Then
  If Target.Value = "" Then
    Range("y" & Target.Row & ":z" & Target.Row).ClearContents
    Else
    Range("y" & Target.Row) = Application.UserName
    Range("z" & Target.Row) = Date
End If
End If
End If
End If
ActiveSheet.Protect
 End Sub

A + à tous
 
Re : Erreur de compilation 1004

Merci JCGL pour ta proposition. Comme je l'ai dit dans l'énoncé du message je préférerais éviter les ordres de type protect et unprotect car il mes emble que cela alourdit le code à l'exécution.
Si je ne trouve pas d'autre solution je suivrai ta proposition.
A+
Bonjour le FORUM

Quelqu'un pourrait-il m'expliquer pourquoi ma macro affiche une erreur de type 1004 (impossible d'exécuter car feuille protégée).

Le principe est le suivant:
La macro filtre sur la valeur contenue dans B4 et retire le filtre lorsque B4 vide.
Le filtre fonctionne nickel lorsque la feuille n'est pas protégée mais impossible de l'exécuter dans le cas contraire (bloque sur la ligne en rouge)
Je préfèrerais ne pas alourdir à mon code avec des ordres de type protect et unprotect.
Je précise que dans les paramètres de protection j'ai autorisé l'utilisation des filtres automatiques

SI quelqu'un a une idée sur la question!
Merci d'avance et bonne journée à tous

Private Sub Worksheet_Change(ByVal Target As Range)

'fitre les lignes à partir du nom


' Si modification de la cellule B4
If Target.Address(0, 0) = "B4" Then
' Si la cellule contient une valeur
If Target.Value <> "" Then
' Filter sur cette valeur
Range("A6:F6").AutoFilter Field:=1, Criteria1:="=*" & Target.Value & "*"
Else
' Supprimer le filtre
Range("A6:F6").AutoFilter Field:=1
If Range("B4") = "" Then
Exit Sub
End If
 
Re : Erreur de compilation 1004

Bonjour Dranreb
Je suis très intéressée par ce bout de code mais je ne comprends pas trop sa fonction
Pourrais-tu me dire à quoi il sert exactement?
Merci

Bonjour à tous,

Peux-tu essayer en enlevant la Protection et en la remettant en fin de procédure :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)


 'fitre les lignes à partir du nom
 
 ActiveSheet.Unprotect
   ' Si modification de la cellule B4
   If Target.Address(0, 0) = "B4" Then
     ' Si la cellule contient une valeur
     If Target.Value <> "" Then
       ' Filter sur cette valeur
       Range("A6:F6").AutoFilter Field:=1, Criteria1:="=*" & Target.Value & "*"
           
     Else
       ' Supprimer le filtre
       Range("A6:F6").AutoFilter Field:=1
 If Range("B4") = "" Then
 Exit Sub
 End If
 
 


'identification personne qui a saisi la décision
'affiche username et la date dans colonne U et V lorsque colonne Q différent de ""
If Target.Column = 18 Then
  If Target.Value = "" Then
    Range("w" & Target.Row & ":x" & Target.Row).ClearContents
    Else
    Range("w" & Target.Row) = Application.UserName
    Range("x" & Target.Row) = Date
End If
End If
 
 'identification personne qui a saisi l'état
'affiche username et la date dans colonne w et x lorsque colonne p différent de ""
If Target.Column = 16 Then
  If Target.Value = "" Then
    Range("y" & Target.Row & ":z" & Target.Row).ClearContents
    Else
    Range("y" & Target.Row) = Application.UserName
    Range("z" & Target.Row) = Date
End If
End If
End If
End If
ActiveSheet.Protect
 End Sub

A + à tous
 
Re : Erreur de compilation 1004

Extrait de l'aide sur Protect :
UserInterfaceOnly Argument de type Variant facultatif. Cet argument a la valeur True pour protéger l'interface utilisateur, mais pas les macros. Si cet argument n'est pas spécifié, la protection s'applique à la fois aux macros et à l'interface utilisateur.
Le bout de code applique la note plus bas :
Si vous appliquez la méthode Protect et que l'argument UserInterfaceOnly a la valeur True dans une feuille de calcul et que vous enregistrez le classeur, l'intégralité de la feuille de calcul (et pas uniquement l'interface) sera protégée lors de la réouverture du classeur. Pour réactiver la protection de l'interface utilisateur après l'ouverture du classeur, vous devez de nouveau appliquer la méthode Protect avec la valeur True affectée à l'argument UserInterfaceOnly.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
18
Affichages
804
Réponses
4
Affichages
243
Réponses
3
Affichages
829
Réponses
9
Affichages
1 K
Retour