Function AdditionHeureImage(Plage As Range) As String
' La fonction attend un Range (cellules sélectionnées) et renvoie une String (texte)
Application.Volatile
' Pour que la fonction se calcule à chaque changement
Dim Cellule As Range, Tableau, I As Integer
' Je déclare une variable pour décrire toutes les cellules, un tableau pour décomposer
' en heures, minutes, secondes et images et une variable entière pour la boucle
Dim THeures As Integer, TMinutes As Integer, TSecondes As Integer, TImages As Integer
' Je déclare mes totaux en nombres entiers
For Each Cellule In Plage
' Pour chaque cellule de la plage
Tableau = Split(Cellule, ":")
' Je décompose en me servant du : comme séparateur
If UBound(Tableau) <> 3 Then
' Si il n'y avait pas 4 valeurs dans le tableau (0 à 3)
AdditionHeureImage = "Erreur !"
' Je renvoie erreur pour prévenir que ce ne sont pas des temps correctement formatés
Exit Function
' et je quitte la fonction
End If
' fin de test
For I = 0 To UBound(Tableau)
' Pour les 4 valeurs du tableau
If Not IsNumeric(Tableau(I)) Then
' Si ce n'est pas du numérique même combat
AdditionHeureImage = "Erreur !"
Exit Function
End If
Next I
' Valeur du tableau suivante
TImages = TImages + Tableau(3)
' J'additionne les images
If TImages > 24 Then
' Si je suis au dela de 24, j'ajoute une minute et retranche 25 images
TImages = TImages - 25
TSecondes = TSecondes + 1
End If
' de même pour les secondes
TSecondes = TSecondes + Tableau(2)
If TSecondes > 59 Then
TSecondes = TSecondes - 60
TMinutes = TMinutes + 1
End If
' et pour les minutes
TMinutes = TMinutes + Tableau(1)
If TMinutes > 59 Then
TMinutes = TMinutes - 60
THeures = THeures + 1
End If
' et pour les heures, je n'ai pas de marge supérieure
THeures = THeures + Tableau(0)
Next
' Je passe à la cellule suivante
AdditionHeureImage = THeures & ":" & Format(TMinutes, "00") _
& ":" & Format(TSecondes, "00") & ":" & Format(TImages, "00")
' Enfin je renvoie la chaîne de caractère correspondant au résultat
End Function