Sub Convertir()
Dim j As Byte, Cel As Range, h, d
On Error Resume Next ' permet de continuer en cas d'erreur
' Désactive le rafraîchissement de l'écran (améliore la rapidité du programme)
Application.ScreenUpdating = False
' Formatage de la colonne Z
With Range("Z:Z")
.NumberFormat = "[hh]:mm"
.HorizontalAlignment = xlCenter
End With
' La boucle suivante parcourt les cellules non vides des colonnes C:Z
For Each Cel In Range("C2:Z" & Rows.Count).SpecialCells(xlCellTypeConstants)
' Si les cellules sont déjà au format date, les lignes de la condition ne sont pas effectuées
' ceci pour éviter des erreurs
If Not Cel.NumberFormat = "hh:mm" And Cel.Column <> 18 Then
t = Cel.Text
t = Replace(t, ".", ":") ' remplace le point par un double point
t = Replace(t, ",", ":") ' remplace la virgule par un double point
p = InStr(t, ":")
If Len(t) = p + 1 Then t = t & "0"
If InStr(t, ":") = 0 Then t = t & ":00" ' s'il n'y a pas de double point en ajoute un suivi de 00
If (Right(t, 1)) = ":" Then t = t & "00" ' si le dernier caractère est un double point ajoute 00
If InStr(t, ">") > 0 Then ' si la cellule contient le caractère ">"
j = 1 ' la variable "j" (jour) vaut 1
t = Replace(t, ">", "") ' suppression du caractère ">"
Else
j = 0 ' sinon "j" vaut 0
End If
h = 1 / 24 * CInt(Left(t, InStr(t, ":") - 1)) ' convertit le texte au format heure
m = 1 / 24 / 60 * CInt(Mid(t, InStr(t, ":") + 1)) ' convertit le texte au format heure
d = CDate(Range("B" & Cel.Row).Value) ' affecte à la variable "d" la date de la cellule adjacente en B
Cel.Value = d + h + m + j ' écrit la date et l'heure dans la cellule
Cel.NumberFormat = "hh:mm" ' règle la cellule au format heure
End If
Next
Application.ScreenUpdating = True
End Sub