non, non, y'a rien d'caché ; c'est juste que nb est correctement initialisé par défaut :
For col = 6 To 36
chn = Cells(lig, col): nb = -9 * (chn <> "" And chn <> "R")
Select Case chn
...
...
End Select
tot = tot + nb
Next col
pour chaque colonne 6 à 36 (F à AJ) :
* chn prend le contenu de la cellule qui est à l'intersection de lig et col, lig étant la ligne où est placée la formule =TotH()
* nb est initialisé par défaut avec : nb = -9 * (chn <> "" And chn <> "R")
; comme le cas le plus courant est 9 h, j'aurais pu mettre simplement : nb = 9
(ce qui est valable pour tous tes postes « manquants ») ; mais en fait, c'est un peu plus compliqué car nb doit être initialisé à 0 si chn est vide ou contient "R" (Récupération) ; pour ces 2 cas, le test (chn <> "" And chn <> "R") est FAUX, valeur 0, et -9 * 0 = 0 ; à l'inverse, quand chn n'est pas vide et qu'il est différent de "R", le test est VRAI, valeur -1, et -9 * -1 = 9
* l'initialisation correcte de nb étant faite (à 0 ou à 9), tous les Case du Select ont pour but de remplacer cette valeur par une autre selon chaque cas concerné ; par exemple 8 h pour "F" (sans condition) ; ou 8 h pour "AM" et "GA" (condition : lundi) ; ou 8 h pour "N" (condition : pas un vendredi) ; faudrait donc ajouter des conditions pour les jours fériés, mais ça, c'est vraiment pas facile !
* après le bloc Select Case chn .. End Select
nb contient le bon nombre d'heures selon chaque poste ; il suffit d'en faire la somme dans la variable tot avec : tot = tot + nb
dhany