J'ai utilisé la fonction de "Michdenis" afin de récupérer les nombres
d'heures prestées par jour :
Function HDiff(rg As Range)
Dim E As Variant
E = Split(rg, "-")
For A = 0 To UBound(E)
If InStr(1, E(A), ":", vbTextCompare) = 0 Then
E(A) = E(A) & ":00"
End If
Next
HDiff = Abs(CDate(E(0)) - CDate(E(1)))
End Function
Vu que je veux récupérer le nombre d'heures au format Double (4 = 4h), je
multiplie HDiff par 24
=> HDiff = Abs(CDate(E(0)) - CDate(E(1))) * 24.0
Mais j'ai un problème assez étrange, dans un cas trèsparticulier.
Si j'additionne x fois le résultat HDiff pour un rg de MÊME valeur ("12/17"
+ "12/"17" + "12/17" + ...)
le résultat n'est pas x fois 5 heures, mais x fois 5 heures + une valeur
très proche de zéro (genre 3,5527.....E-15) :-/
Le VBA n'a pas l'air d'apprécier HDiff = Abs(CDate(E(0)) - CDate(E(1))) * 24
Pour le moment, je "résouds" mon problème en arrondissant le résultat
HDiff = Round(Abs(CDate(E(0)) - CDate(E(1))) * 24 , 14)
(14 car 15 refait apparaître l'erreur)
Cela fonctionne, mais je me demande s'il n'y a pas une façon un peu plus
propre que cela.
Un grand merci d'avance!
(à Michdenis : je t'ai envoyé ce message par email. Désolé pour le spamming
;-))
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
michdenis
Bonjour Lorcan,
Une belle fonction que tu as là ! ;-)
La problématique que tu éprouves est "normale" en ce sens qu'elle provient de la transformation des données décimales en "binaire" afin de permettre au processeur d'effectuer les opérations. Certains résultats affichent un "résidu" indésirable.Cette situation se présente aussi dans des opérations de la feuille de calcul.
Solution : utilisation de la fonction "arrondi" Même en VBA, utilise la fonction de la feuille de calcul : application.WorksheetFunction.Round( ) (La fonction vba round() est problématique...)
Et dans la feuille de calul, tu peux demander à excel de calculer en tenant compte du format de cellule affiché Barre de menu / outils / options / onglet calcul / Calcul avec la précision du format affiché.
Salutations!
"Lorcan" a écrit dans le message de news: Bonjour,
J'ai utilisé la fonction de "Michdenis" afin de récupérer les nombres d'heures prestées par jour :
Function HDiff(rg As Range) Dim E As Variant E = Split(rg, "-") For A = 0 To UBound(E) If InStr(1, E(A), ":", vbTextCompare) = 0 Then E(A) = E(A) & ":00" End If Next HDiff = Abs(CDate(E(0)) - CDate(E(1))) End Function
Vu que je veux récupérer le nombre d'heures au format Double (4 = 4h), je multiplie HDiff par 24 => HDiff = Abs(CDate(E(0)) - CDate(E(1))) * 24.0
Mais j'ai un problème assez étrange, dans un cas trèsparticulier.
Si j'additionne x fois le résultat HDiff pour un rg de MÊME valeur ("12/17" + "12/"17" + "12/17" + ...) le résultat n'est pas x fois 5 heures, mais x fois 5 heures + une valeur très proche de zéro (genre 3,5527.....E-15) :-/
Le VBA n'a pas l'air d'apprécier HDiff = Abs(CDate(E(0)) - CDate(E(1))) * 24
Pour le moment, je "résouds" mon problème en arrondissant le résultat HDiff = Round(Abs(CDate(E(0)) - CDate(E(1))) * 24 , 14) (14 car 15 refait apparaître l'erreur)
Cela fonctionne, mais je me demande s'il n'y a pas une façon un peu plus propre que cela.
Un grand merci d'avance!
(à Michdenis : je t'ai envoyé ce message par email. Désolé pour le spamming ;-))
Bonjour Lorcan,
Une belle fonction que tu as là ! ;-)
La problématique que tu éprouves est "normale" en ce sens qu'elle provient de la transformation
des données décimales en "binaire" afin de permettre au processeur d'effectuer les opérations.
Certains résultats affichent un "résidu" indésirable.Cette situation se présente aussi dans des
opérations de la feuille de calcul.
Solution : utilisation de la fonction "arrondi"
Même en VBA, utilise la fonction de la feuille de calcul :
application.WorksheetFunction.Round( )
(La fonction vba round() est problématique...)
Et dans la feuille de calul, tu peux demander à excel de calculer
en tenant compte du format de cellule affiché
Barre de menu / outils / options / onglet calcul / Calcul avec la
précision du format affiché.
Salutations!
"Lorcan" <Lorcan@discussions.microsoft.com> a écrit dans le message de news: 30CB6A7C-F914-4FF3-9B86-023109002564@microsoft.com...
Bonjour,
J'ai utilisé la fonction de "Michdenis" afin de récupérer les nombres
d'heures prestées par jour :
Function HDiff(rg As Range)
Dim E As Variant
E = Split(rg, "-")
For A = 0 To UBound(E)
If InStr(1, E(A), ":", vbTextCompare) = 0 Then
E(A) = E(A) & ":00"
End If
Next
HDiff = Abs(CDate(E(0)) - CDate(E(1)))
End Function
Vu que je veux récupérer le nombre d'heures au format Double (4 = 4h), je
multiplie HDiff par 24
=> HDiff = Abs(CDate(E(0)) - CDate(E(1))) * 24.0
Mais j'ai un problème assez étrange, dans un cas trèsparticulier.
Si j'additionne x fois le résultat HDiff pour un rg de MÊME valeur ("12/17"
+ "12/"17" + "12/17" + ...)
le résultat n'est pas x fois 5 heures, mais x fois 5 heures + une valeur
très proche de zéro (genre 3,5527.....E-15) :-/
Le VBA n'a pas l'air d'apprécier HDiff = Abs(CDate(E(0)) - CDate(E(1))) * 24
Pour le moment, je "résouds" mon problème en arrondissant le résultat
HDiff = Round(Abs(CDate(E(0)) - CDate(E(1))) * 24 , 14)
(14 car 15 refait apparaître l'erreur)
Cela fonctionne, mais je me demande s'il n'y a pas une façon un peu plus
propre que cela.
Un grand merci d'avance!
(à Michdenis : je t'ai envoyé ce message par email. Désolé pour le spamming
;-))
La problématique que tu éprouves est "normale" en ce sens qu'elle provient de la transformation des données décimales en "binaire" afin de permettre au processeur d'effectuer les opérations. Certains résultats affichent un "résidu" indésirable.Cette situation se présente aussi dans des opérations de la feuille de calcul.
Solution : utilisation de la fonction "arrondi" Même en VBA, utilise la fonction de la feuille de calcul : application.WorksheetFunction.Round( ) (La fonction vba round() est problématique...)
Et dans la feuille de calul, tu peux demander à excel de calculer en tenant compte du format de cellule affiché Barre de menu / outils / options / onglet calcul / Calcul avec la précision du format affiché.
Salutations!
"Lorcan" a écrit dans le message de news: Bonjour,
J'ai utilisé la fonction de "Michdenis" afin de récupérer les nombres d'heures prestées par jour :
Function HDiff(rg As Range) Dim E As Variant E = Split(rg, "-") For A = 0 To UBound(E) If InStr(1, E(A), ":", vbTextCompare) = 0 Then E(A) = E(A) & ":00" End If Next HDiff = Abs(CDate(E(0)) - CDate(E(1))) End Function
Vu que je veux récupérer le nombre d'heures au format Double (4 = 4h), je multiplie HDiff par 24 => HDiff = Abs(CDate(E(0)) - CDate(E(1))) * 24.0
Mais j'ai un problème assez étrange, dans un cas trèsparticulier.
Si j'additionne x fois le résultat HDiff pour un rg de MÊME valeur ("12/17" + "12/"17" + "12/17" + ...) le résultat n'est pas x fois 5 heures, mais x fois 5 heures + une valeur très proche de zéro (genre 3,5527.....E-15) :-/
Le VBA n'a pas l'air d'apprécier HDiff = Abs(CDate(E(0)) - CDate(E(1))) * 24
Pour le moment, je "résouds" mon problème en arrondissant le résultat HDiff = Round(Abs(CDate(E(0)) - CDate(E(1))) * 24 , 14) (14 car 15 refait apparaître l'erreur)
Cela fonctionne, mais je me demande s'il n'y a pas une façon un peu plus propre que cela.
Un grand merci d'avance!
(à Michdenis : je t'ai envoyé ce message par email. Désolé pour le spamming ;-))