Problème avec code lorsque la feuille est protégée

blord

XLDnaute Impliqué
Bonsoir à tous,

J'aimerais utiliser le code ci-bas dans mon projet (merci à James007 et à Dull !).

Le problème qui survient est le suivant : Lorsque la feuille est totalement sans protection, le code fonctionne à merveille. Lorsque la feuille est protégée (évidemment, les cellules indiquées dans la plage ne sont pas protégées), le code retourne toujours le message Heure invalide ???

Auriez-vous une idée pour éviter ce problème ?

Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

If Application.Intersect(Target, Range("C8:I9,C12:I13,C16:I17,C41:I57")) Is Nothing Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

Dim DateStr As String
On Error GoTo EndMacro

Application.EnableEvents = False
    Target.NumberFormat = "General"
    If Target.HasFormula = False Then
        Select Case Len(Target.Formula)
            Case 3
                DateStr = Left(Target.Formula, 1) & ":" & Right(Target.Formula, 2)
            Case 4
                DateStr = Left(Target.Formula, 2) & ":" & Right(Target.Formula, 2)
            Case Else
                Err.Raise 0
        End Select
        Target.Formula = CDate(DateStr)
        Target.NumberFormat = "hh:mm"
    End If
Application.EnableEvents = True
Exit Sub

EndMacro:
    Target.ClearContents
    Target.Select
    MsgBox "Heure invalide"
    Application.EnableEvents = True
End Sub

Merci à tous pour vos suggestions ...

Benoit Lord
 

Paritec

XLDnaute Barbatruc
Re : Problème avec code lorsque la feuille est protégée

bonjour Blord le forum
tu peux essayer cela a+
Papou :eek:

Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

If Application.Intersect(Target, Range("C8:I9,C12:I13,C16:I17,C41:I57")) Is Nothing Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

Dim DateStr As String
On Error GoTo EndMacro
activesheet.unprotect
Application.EnableEvents = False
    Target.NumberFormat = "General"
    If Target.HasFormula = False Then
        Select Case Len(Target.Formula)
            Case 3
                DateStr = Left(Target.Formula, 1) & ":" & Right(Target.Formula, 2)
            Case 4
                DateStr = Left(Target.Formula, 2) & ":" & Right(Target.Formula, 2)
            Case Else
                Err.Raise 0
        End Select
        Target.Formula = CDate(DateStr)
        Target.NumberFormat = "hh:mm"
    End If
Application.EnableEvents = True
activesheet.protect
Exit Sub

EndMacro:
    Target.ClearContents
    Target.Select
    MsgBox "Heure invalide"
    Application.EnableEvents = True
activesheet.protect
End Sub
 

Gorfael

XLDnaute Barbatruc
Re : Problème avec code lorsque la feuille est protégée

Salut blord et le forum
Pas sûr de comprendre ta macro (mais ça vient sans doute d'une méconnaissance du classeur) :
On est sur une macro à lancement automatique de type Worksheet_Change. Donc si tu écris une formule, tu ne veux pas déclencher ta macro, normal, quoiqu'en règle général, on ne crée pas de formule dans une zone de saisie.
- Pourquoi tu passes ta cellule au format "General", avant tout traitement ?
- Pourquoi tu utilises ".formula" systématiquement ?

Ce qui me gêne, c'est le message d'erreur : Avec On Error, tu prends la main sur la gestion des erreurs => sauf si tu fais ce qu'il faut, il n'y a aucune raison d'avoir un message d'erreur du à ta macro, donc c'est en dehors.
Dans ta protection de feuille, as-tu autoriser la modification de format de cellule (facile à contrôler, fait un changement de cellule manuel) ?
A+
 

blord

XLDnaute Impliqué
Re : Problème avec code lorsque la feuille est protégée

Bonjour Papou, Grofael, le Forum...

Tout d'abord merci à Papou, ta solution de déprotéger/protéger la feuille est très efficace et simple...

Gorfael, La macro permet en fait à l'utilisateur de saisir du temps sans avoir à saisir les ":" et valide que l'heure saisie est correcte. En fait, le code m'a généreusement été donnée par James007. Comme je ne suis pas encore un "pro" an VBA, je n'ai pas analyser tout le contenu du code. Je reconnais que tes questions sont très pertinentes et je vais tenter de me servir de tes remarques pour tenter de modifier le code et en apprendre encore un peu plus sur le langage VBA.

Ta remarque sur le type de protection est aussi tout à fait pertinente, en autorisant le modification sur le format, il n'y a aucun message d'erreur. Pour l'instant, je vais conserver la solution de papou afin d'éviter que l'utilisateur ne vienne modifier les "formats" de cellules dans la feuille...

Merci à vous !

Benoit Lord
 

Discussions similaires

Statistiques des forums

Discussions
312 195
Messages
2 086 079
Membres
103 112
dernier inscrit
cuq-laet