Worksheet_Change - intégrité du code

Bonjour à tous,

Je souhaite combiner deux procédures dans un Worksheet_Change, et je me demande si la combinaison provoquera des erreurs!

Merci

Private Sub Worksheet_Change(ByVal Target As Range)

'format heure - saisie sans les :
Dim Heures As Single, Minutes As Single

Application.EnableEvents = False
If Not Intersect(Target, Range("J3:k10000")) Is Nothing And Target.Cells.Count = 1 Then
    If Target.Value <> "" Then
        If Right(Target, 2) * 1 >= 60 Then
            MsgBox "Nombre invalide !"
            Application.EnableEvents = True
            Exit Sub
        End If
        Minutes = Right(Target, 2) / 1440
        If Len(Target) > 2 Then Heures = Int(Target / 100) / 24
        Range(Target.Address) = Heures + Minutes
    End If
End If
Application.EnableEvents = True

'Contre la modification après saisie
If Not Intersect(Target, Range("Bloc")) Is Nothing Then
    ActiveSheet.Unprotect Password:="admin"
    Target.Locked = True
    ActiveSheet.Protect Password:="admin"
End If

End Sub

Bonjour

Si le range("Bloc") se trouve dans le range(J3:K10000). Il y aura deux actions.

Le mieux serait de voir le fichier. Possible ?

Cordialement

Bonjour Dan,

Effectivement, le Bloc (champ nommé) couvre =Data!$A$3:$S$65536!

Voici le fichier.

Re

Dans la bas de la procédure vous ne permettez pas d'adapter la cellule modifiée

Est-ce que cette action doit avoir lieu sur toute les feuille ou uniquement lorsque l'on modifie les cellules en colonnes J à K ??

Crdlt

Bonjour Dan,

Sur toute la feuille Data, du moins pour la plage Bloc.

Merci

Re

Votre code fonctionne très bien pour ce que vous voulez faire.

Toutefois je le changerais par celui ci pour éviter la suspension des événements avec l'instruction "application.enablevents"

Dim ok As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)

'format heure - saisie sans les :
Dim Heures As Single, Minutes As Single

If ok = True Or Target.Count > 1 Then Exit Sub

If Not Intersect(Target, Range("J3:k10000")) Is Nothing Then
ok = True
    If Target.Value <> "" Then
        If Right(Target, 2) * 1 >= 60 Then
            MsgBox "Nombre invalide !"
            ok = False
            Exit Sub
        End If
        Minutes = Right(Target, 2) / 1440
        If Len(Target) > 2 Then Heures = Int(Target / 100) / 24
        Range(Target.Address) = Heures + Minutes
    End If
End If

ok = False
'Contre la modification après saisie
If Not Intersect(Target, Range("Bloc")) Is Nothing Then
    ActiveSheet.Unprotect Password:="admin"
    Target.Locked = True
    ActiveSheet.Protect Password:="admin"
End If

End Sub

Si ok, n'oubliez de cliquer sur le petit v pour cloturer le fil

Cordialement

Bonjour Dan

merci beaucoup pour la vérification de l'intégrité du code, c'est grandement apprécié.

A+

Rechercher des sujets similaires à "worksheet change integrite code"