5 > 15 pour mon ordinateur !

A

axelle la débutante

Guest
5 > 15 pour mon ordinateur !

Bonjour le forum, les forumeux, bonjour à tous

j'ai créé une petite macro pour un probleme d'horaire avec double montée. Je veux pouvoir faire une simple soustraction pour savoir le nombre d'heures travaillées.

Quand heure2 ou heure4 finit après minuit le calcul se fait avec un rajout de 24 dans la soustraction:

si heure2 >heure1 alors Val1 : heure2 - heure1
si heure2<heure1 alors Val1 : heure2 + 24 - heure 1
si heure 4 > heure 3 alors val2 : heure4- heure3
si heure 4 >heure 3 alors val2 : heure4 +24 - heure3

En clair, voila ma macro :

Le tableau
nom heure1 heure3
heure2 heure4
val1 0
val2 0
total 0

La macro
Dim base As Integer, val1 As Integer, val2 As Integer
Dim heure1 As String, heure2 As String, heure3 As String, heure4 As String

heure1 = Range("c8")
heure2 = Range("c9")
heure3 = Range("d8")
heure4 = Range("d9")

If heure1 < heure2 Then val1 = heure2 - heure1
If heure1 > heure2 Then val1 = heure2 + 24 - heure1

If heure4 < heure3 Then val2 = heure4 + 24 - heure3
If heure4 > heure3 Then val2 = heure4 - heure3


If heure2 = "cp" Then val1 = 0
If heure2 = "cm" Then val1 = 0
If heure2 = "at" Then val1 = 0

If heure4 = "cp" Then val2 = 0
If heure4 = "cm" Then val2 = 0
If heure4 = "at" Then val2 = 0

Range("d10") = val1
Range("d11") = val2


base = val1 + val2
Range("d12") = base

End Sub


Par contre quelle que soit l'heure (heure1, heure2, heure3, heure4) si la donnée saisie est soit 2;3;4;5;6;7;8;9, l'ordinateur considére que la donnée est supérieure à l'heure dans la soustraction. Donc le calcul se fait avec la mauvaise formule...

C'est un probleme qui en plus ne se pose pas avec 1 et tous les chiffres au dessus de 10.

Si quelqu'un comprend pourquoi et aurait une idée pour résoudre ce probleme... En tout cas merci d'avance et bon courage à tous ceux qui cherchent les solutions.


A +
A bientot
Merci
 
J

jhocquevelt

Guest
Re: 5 > 15 pour mon ordinateur !

Bonsoir Axelle, bonsoir le Forum,

En déclarant heure1 à heure4 comme Integer, je pense que ton problème devrait se résoudre

Ou deuxième solution, si tu gardes heure1 à 4 comme String
heure1 = Range("C8").value
heure2 = Range("C9").value
If val(heure1) < val(heure2) Then
val1 = val(heure2) - val(heure1)
Else
val1 = 24 + val(heure1) - val(heure2)
End If

A +

JHocquevelt.
 
A

axelle la débutante

Guest
Re: 5 > 15 pour mon ordinateur !

bonsoir le forum, bonsoir les forumeux

bonsoir JHocquevelt et merci.

J'ai essayé les deux solutions et la deuxieme fonctionne.merci beaucoup, ca m'enleve une sacrée épine du pied.

A bientot pour de nouvelles aventures
A +

Axelle
 
A

Arthur60

Guest
Re: 5 > 15 pour mon ordinateur !

Salut Axelle !

1) Si tu as formaté tes cellules d'heures en format Heure (14:37 par exemple), pour Excel, les heures sont décimales (0,5 est égal à midi), les dates sont des entiers (+1 pour le lendemain).

Il ne faut donc pas ajouter 24 (heures) mais 1 (journée) dans le cas où l'heure de fin est inférieure à l'heure de début.

2) Si tes cellules sont formatées en Standard (donc aucun format spécial),
pas de pb, tu rajoutes bien 24.

Mais, de toutes façons, il suffit de partout déclarer tes heures comme Real (nombre réel) dans ton VBA, et non en String (chaines de caractères)

Il n'y a donc pas besoin de transformer des Strings avec des Val pour arriver à calculer tout ça.

As tu compris mon propos ?
 

Discussions similaires

Réponses
1
Affichages
306
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 310
Messages
2 087 122
Membres
103 479
dernier inscrit
Compta