XL 2016 Soustraction de format heure avec résultat négatif VBA

Yabon21

XLDnaute Nouveau
Bonjour à tous,
Je viens à vous car je suis complètement bloqué avec un bug qui se produit lorsque je lance, en VBA, une soustraction de deux cellules au format "heure" dont le résultat est négatif.
En gros je veux soustraire une heure réel de sortie avec une heure théorique de sortie. Le résultat est donc positif lorsque la sortie se fait en avance par rapport à l'heure théorique et négatif si la sortie se fait en retard par rapport à l'heure théorique.

je vous ai joins mon tableau excel.
Pour le tester voici des données à remplir dans les userform :
1/ lancer la macro en cliquant sur le bouton en haut à gauche du tableau
2/ renseigner N° de train 745633
3/ renseigner la case protection 3:42
4/renseigner la case présence CRTT 4:37
5/ valider ce qui lance le deuxième userform
5/ renseigner la case prêt au départ 5:12
6/ renseigner la case départ 5:15
7/ valider ce qui lance le troisième userform
8/ renseigner la case départ 5:35

les résultats obtenus doivent correspondre à cela :

E5 : -00:10
F5 : 00:00
G5 : 02:00
H5 : 04:00

Merci d'avance de votre aide!
 

Pièces jointes

  • Suivi des W NG.xlsm
    56.5 KB · Affichages: 30

sylvanu

XLDnaute Barbatruc
Supporter XLD
Vous lancez cette macro une fois que toutes les valeurs de tous les userforms sont posés sur la feuille.
Autre solution, dès que vous récupérer une valeur d'un textbox, vous faites :
VB:
' Chaine est la chaine récupérée d'un userform
    If Chaine Like "*:*" Then
        Chaine = CDate(Chaine)
    End If
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Encore plus simple.
Vous mettez cette fonction dans un module standard :
VB:
Function Convertir(Chaine)
    If Chaine Like "*:*" Then
        Chaine = CDate(Chaine)
    End If
    Convertir = Chaine
End Function
et à chaque fois que vous faites un :
Code:
Feuil1.Cells(5, 22) = TextBox1
vous le remplacez par
Code:
Feuil1.Cells(5, 22) = Convertir(TextBox1)
Si c'est une chaine, elle reviendra identique, si c'est du type "5:35" elle reviendra converti en décimal.
 

eriiic

XLDnaute Barbatruc
Bonjour à tous,

au fil de la lecture j'ai cru comprendre que textbox1 pouvait retourner une 'vraie' chaine.
Si c'est le cas
Feuil1.Cells(5, 22) = iif(isdate(textbox1),timevalue(TextBox1),textbox1)
plantera, tous les éléments du iif étant toujours évalués.
timevalue("aie aie aie") ne passera pas
eric
 

Discussions similaires

Réponses
15
Affichages
318