Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

puré ce soir je suis verni
entre un qui bousille mon calendrier et un autre qui attribue des propriété au mauvais parent
bon je démissionne moi j'en peux plus je burnout ( "out" je sais pas mais bu.. ben on y est)

ok je sort 😛😛😛 😉
 
Désolé, j'ai testé la solution du post #14 sur votre ligne 5 et ça marche.
Toutes les chaines comportant un ":" ont été converties en heure.
Cette macro doit être lancée avant tout calcul.
 
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.
 
@patrick,
Par curiosité j'ai regardé laquelle des deux méthodes était la plus rapide.
Sur un grand nombre d'itérations j'arrive sur mon PC à 412µs pour le IIF et 417µs pour la function.
Donc se valant, ça reste au feeling de chacun. 🙂
 
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
497
  • Question Question
Réponses
15
Affichages
1 K
  • Question Question
Réponses
8
Affichages
981
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…