Microsoft 365 heures sans les :

mike13000

XLDnaute Nouveau
Bonjour à tous,
j'ai récemment trouvé ici ou un autre forum, un code vba pour permettre de ne pas saisir les : dans les heures.
le code fonctionne, mais si j'entre du texte, sur une cellule çà indique incompatibilté de type 13.
j'ai essayé de trouver des parades comme si la cellule selectionné n'est pas numérique, je demande à VBA de sortir du programme, mais çà fonctionne pas.
Si je précise les cellules du target bien précisément, c'est aussi une solution, mais mon planning contient plus de 15 colonnes, et si mon collègue se trompe de colonne çà plante.

j'aimerais enlever le target, et permettre à saisir les heures sans le : sans contrainte de cellules dans la feuille sélectionnée.

Je vous remercie infinimment pour vos réponses.

Mickaël
voici le code vba :

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Heures As Single, Minutes As Single

Application.EnableEvents = False
If Not Intersect(Target, Range("A1:z60")) 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
End Sub

Nota bene : si vous avez besoin d'un fichier, je vous ferez parvenir un extrait de mon planning

Cordialement !
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Mike,
Comme l'erreur est clairement identifiée vous pouvez passer par un on error goto :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Heures As Single, Minutes As Single
    Application.EnableEvents = False
    If Not Intersect(Target, Range("A1:z60")) Is Nothing And Target.Cells.Count = 1 Then
        If Target.Value <> "" Then
            On Error GoTo Fin
            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
Fin:
Application.EnableEvents = True
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 085
Messages
2 085 196
Membres
102 814
dernier inscrit
JLGalley