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

  • Initiateur de la discussion Initiateur de la discussion Yabon21
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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.
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
40
Affichages
212
  • Question Question
Réponses
15
Affichages
1 K
Retour