Décompte d'heure a la suivante


#1

Bonjour la communauté

Voila mon problème j’ais un fichier qui me donne plusieurs heures de départ et en colonne

“AA” j’arrive a avoir le temps entre chaque heures mais le décompte que je voudrais en “C2”

je n’y arrive pas et c’la fait longtemps que j’essais

Merci de votre aide

je vous envoie un fichier test Décompte d’une Heure a la suivante .xlsx (12,1 Ko)

Cordialement

kiss6


#2

Bonjour,

Tu veux un compte à rebours sur la cellule C2 en temps réel


#3

Bonjour Mimimathy

Re,

Merci de vous pencher sur mon problème

Pour répondre a votre question est OUI il faut que lorsque entre l’heure de départ comme dans le fichier test

en “Y3” ET “Y4” me donne le temps entre les deux heures en décompte et après de “Y4” ET “Y5” et ainsi de

suite jusqu’à la dernière

Cordialement

kiss6


#4

Bonjour @kiss6,
Salut @Mimimathy, :wink:

Je ne suis pas sûr de répondre correctement à la question, toutefois je fais une proposition:

Dans la cellule “A1” l’heure actuelle.
La cellule “C2” tirer vers le bas autant que nécessaire.

2 codes VBA dans le Thisworkbook
L’un servant a stopper “OnTime” à la fermeture du fichier
L’autre servant a déclencher automatiquement “OnTime” à l’ouverture du fichier.

Option Explicit
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'StopTempo à la fermeture du fichier
    StopTempo
End Sub

Private Sub Workbook_Open()
    'Activation de l'heure à l'ouverture du fichier
    Tempo
End Sub

Puis 2 macros dans le “Module1”

Option Explicit
Dim Tps As Date
 
Sub Tempo()
    'Programmation de l'évènement toutes les secondes
    Tps = Now + TimeValue("00:00:01")
    Application.OnTime Tps, "Tempo"
    'Traitement
    Sheets(1).Range("A1").Value = Format(Now, "hh:nn:ss")
End Sub
 
Sub StopTempo()
    On Error Resume Next
    'Stopper la gestion de l'évènement OnTime en cours
    Application.OnTime Tps, "Tempo", , False
End Sub

Ses 2 Macros sont associées aux 2 boutons que j’ai nommé “Go Start” pour déclencher le démarrage des chronos et l’autre “Stop Start” pour arrêter les chronos.

Fichier joint ICI==> Décompte d’une Heure a la suivante .xlsm (26,6 Ko)

Cordialement.


#5

Salut MDO

A tu fais un petit essai avec ton classeur de décompte d’heure en route et ouvrir un nouveau classeur ou un classeur existant.
Il me semble que la cellule A1 de la feuil1 sera impactée de l’heure actuelle :thinking:


#6

Re @Mimimathy,

Et bien comme je l’ais dit:

Je vois que @kiss6 est en train de répondre, alors je vais attendre.

Cdlt.


#7

Bonjour @mdo100
Re Bonjours @Mimimathy

Pour @mdo100 une très belle approche mais je ne peut rien changer dans les autres cellule car a partir de

“C8:W90” il y a tout le programme bien sur ces tout de même une belle approche

Après @Mimimathy

A raison lorsqu’elle dit que la cellule “A1” seras impactée de l’heure elle y est

J’ais changer dans le code VBA la cellule “A1” en “C6” car l’heure du pc est en “C6” mais c’la on verras plus

tard

Après dite moi ce que vous en pensées car l’approche de @mdo100 est pas mal

alors voila ma subjection en cellule “C2” ne pourrions nous pas faire une formule pour que lorsque les

cellules “Y” ou “AA” ON FINI LE DECOMPTE C’LA PASSE A LA SUIVANTE

Je vous renvois le fichier @mdo100 avec le changement

Décompte d’une Heure a la suivante .xlsm (23,1 Ko)

Cordialement

@kiss6


#8

Re @kiss6, @Mimimathy,

Peut-être ainsi, si cela convient:

En “AC3”

=SIERREUR(ABS(SI($C$6>Y3;Y4-$C$6;""));"")

Tirer vers le bas autant que nécessaire.

En “C2”

=INDEX(AC3:AC27;NB(AC3:AC27))

Fichier ICI==> Décompte d’une Heure a la suivante V2 .xlsm (27,0 Ko)

Cordialement.


#9

RE @mdo100, @Mymimathy ,

C’est super ces exactement ce qui fallait mais le souci est que c’la me donne pas le décompte entre chaque

Heures car je vient de faire l’essai et entre EX: entre 17h45 et 18h il n’y a pas 23:55 mais bien 00:15

dans tout les cas l’approche n’est pas loin encore quelque détaille mais ont si rapproche

Cordialement

kiss6


#10

Re @kiss6,

De quelle cellule me parles-tu ? parce-que si tu me parle de la colonne “AA”, je n’y ais pas touché.

Explique toi !

Cdlt.


#11

RE, @mdo100,

C’est bon j’ais trouvé

j’ais remplacé

Citation=SI(AE3=“25H00”;;TEXTE(MOD(Y4-MAINTENANT();1);“hh:mm:ss”))

PAR

Citation=SI(AE3=“25H00”;;TEXTE(MOD(Y3-MAINTENANT();1);“hh:mm:ss”))

Et tiret vers le bas

Et c’la fonctionne dite moi ce que vous en pensé :face_with_monocle:

si non très bon travail et merci a tout les deux

Cordialement

kiss6


#12

Re @kiss6,

J’en pense qu’il n’y a que 24h / journée :roll_eyes:

Et que j’écrirais dans “AA3”

=1-MOD($C$6-AE3;1)

Tirer vers le bas autant que nécessaire.

Cdlt.


#13

Re, @mdo100

Oui votre formule fonctionne aussi ces vraiment supers il y a longtemps que j’aurais du venir sur ce forum

le problème quand on est fidèle on reste toujours sur le même car c’ela faisait plus de 4 ans que j’y étais

bref ne pas épiloguer

Mais je suis extrêmement satisfais d’être ici car en plus de la convivialité il y a des solution

Vraiment un enorme MERCI A TOUS LES DEUX :yum: :yum: :yum: :yum:

Cordialement

kiss6


#14

Re @kiss6,

J’attendais qu’il soit 21h pour voir le résultat de la cellule “C2” et a mon avis, il faudrait modifier la cellule “AC27”.

En “AC27”

=SIERREUR(1-MOD(ABS(SI($C$6>Y27;Y28-$C$6;""))-Y3;1);"")

Puisqu’on l’on repart sur le lendemain à 12h50.

C’est le but de ce forum de @DocteurExcel, ne pas se contenter d’apporter la réponse, mais d’expliquer dans un langage le plus clair possible la méthode pour arriver au résultat attendu.
Ce qui permet le partage des connaissances avec plus grand nombre d’entre nous.

Règle N°6

Merci pour tes remerciements :wink:

Cordialement.


#15

RE, @mdo100

Vous savez ce n’est pas la peine de me remercier pour mes éloges car elles sont bien plus que mériter

Pour ce qui est de la cellule “AC27” j’attendrais demain car vous avez surement remarquer qu’il s’agissait

d’un programme pour les courses hippique :horse:

donc le programme n’avait sorti les horaire de “Y3” à “Y27” et demain il peut me sortir des horaire de “Y3” à

“Y32” ou plus ou moins les colonnes vont de “Y3” à “AA75”

Car il peut y avoir une "REUNION 1 “R1” avec “6 courses” ou “9 courses” voir “10”

ensuite une "REUNION 2 “R2” avec “5 courses” ou “7 courses” jusque “10”

et ainsi de suite

Cordialement

kiss6


#16

Bonjour @mdo100, @Mimimathy

Excuser moi de vous déranger encore mais aujourd’hui j’ais ré-initialiser le programme et j’ais la cellule “C2”

en " #VALEUR! " et en “AC3” il y a bien les formules mais aucune visibilité de l’horaire

je vous joint le fichier

Décompte d’une Heure a la suivante V2 .xlsm (23,7 Ko)

cordialement

kiss6


#17

Bonjour @kiss6,

J’étais dessus !

Nouvelle formule en “AC3”

=SIERREUR(1-MOD(ABS(SI($C$6>Y3;Y4-$C$6;""))-$Y$3;1);1-MOD($C$6-Y3;1))

Tirer vers le bas autant que nécessaire.

Modif formule en “C2”

=SI(INDEX(AC3:AC27;NB(AC3:AC27))>C6;MIN(AC3:AC27);"")

Maintenant j’attends de voir dans un peu plus de 3h30 si on reprend bien le cycle.

Fichier ICI==> Décompte d’une Heure a la suivante V3.xlsm (27,6 Ko)

Bon dimanche.
Cordialement.


#18

Re, @mdo100

Merci de vous pencher encore sur ce problème je viens de copier vos formules que j’ais mis sur le fichier

exemple et celui d’origine mais ma cellule “C2” reste vide peut être a cause de la nouvel journée

je vous envoie le fichier un peut plus complet avec les horaires d’aujourd’hui :imp:

Décompte d’une Heure a la suivante V2 .xlsm (25,9 Ko)

Cordialement

kiss6


#19

Re @kiss6,

Non, une nouvelle date n’intervient pas dans ce cas, je pense avoir une nouvelle proposition:

Mais déjà tu as fait une erreur dans la cellule “C2”

=SI(INDEX(AC3:AC19;NB(AC3:AC19))>C6;MIN(AC3:AC19);"")

Tu ne prenais pas en compte les nouvelles lignes, la formule aurait dû être.

=SI(INDEX(AC3:AC77;NB(AC3:AC77))>C6;MIN(AC3:AC77);"")

Pour remédier à ce problème, j’ai nommé la colonne “AC” Col_AC dans le “Gestionnaire de noms” avec cette formule.

=DECALER(Feuil1!$AC$3;;;NBVAL(Feuil1!$AC:$AC)-2)

Et j’ai encore modifié la formule de “C2”.

=SI(INDEX(Col_AC;NB(Col_AC))=C6;MIN(Col_AC);SI(INDEX(Col_AC;NB(Col_AC))>C6;MIN(Col_AC);INDEX(Col_AC;NB(Col_AC))))

J’ai fais une tentative en changeant l’heure du début de la première course à 10h45 et le cycle s’exécute bien sur l’heure suivante.

Donc à suivre… :wink:

Fichier ICI==> Décompte d’une Heure a la suivante V4 .xlsm (29,6 Ko)

Cdlt.


#20

Bonjour Kiss6, MDO

Une autre approche avec un Userform (ce qui évitera d’avoir l’heure sur un autre classeur que l’ouvre par mégarde et qui prendra la valeur de l’heure actuelle - Si formule en C6 dans ce classeur, la formule est détruite)

code Module

Option Explicit

Dim mDate As Date ' Variable
Dim h%, m%, s%, i%
Dim mCourse$
Sub LanceCompteur()
i = 3 'N° ligne départ
  h = Hour(Sheets("Feuil1").Range("AB" & i).Value) 'Récupère heure - minute - seconde sur première course
  m = Minute(Sheets("Feuil1").Range("AB" & i).Value)
  s = Second(Sheets("Feuil1").Range("AB" & i).Value)
   
  mDate = Now + TimeSerial(h, m, s)   'place dans la variable heure - minute et seconde
  mCourse = Sheets("Feuil1").Range("Z" & i).Value ' variable affiche le nom de la course
  MajCompteur
End Sub

Sub MajCompteur() ' Procedure mise à jout compteur
  Dim dRestant As Date
  
  If mDate > 0 Then 'si l'heure existe
     dRestant = mDate - Now 'calcul temps restant
     If dRestant > 0 Then 'si temps restant sup.  à 0
       Application.OnTime Now + TimeValue("00:00:01"), "MajCompteur" ' Auto-Rappel dans 1s pour Mise à jour
       UserForm1.L_Rebours.Caption = Sheets("Feuil1").Range("C3").Value 'affiche nom de course
     Else
       
    i = i + 1 'ajoute une ligne et recherche Heure - minute - secondes
    h = Hour(Sheets("Feuil1").Range("AB" & i).Value)
    m = Minute(Sheets("Feuil1").Range("AB" & i).Value)
    s = Second(Sheets("Feuil1").Range("AB" & i).Value)
    mCourse = Sheets("Feuil1").Range("Z" & i).Value 'affiche nom de course
    mDate = Now + TimeSerial(h, m, s) 'place dans la variable heure - minute et seconde
    If Sheets("Feuil1").Range("Z" & i).Value <> "" Then ' si colonne Z n'est paasvide
    MajCompteur 'recommence l'opération
    Else 'sinon
       UserForm1.L_Rebours.Caption = "Fin des courses" 'affiche fin des courses
       UserForm1.T_Rebours = "00:00:00" 'met le Textbox du compte à rebours à 0
       mDate = 0
       Exit Sub 'sort de la macro
       End If
     End If
     UserForm1.L_Rebours.Caption = mCourse
     UserForm1.T_Rebours = Format(dRestant, "hh:mm:ss")
     UserForm1.T_Heure = Time
    End If
End Sub

Le bouton Raz, remet le départ depuis la première course avec un délai de 1 sec. (obligatoire)
l’Userform se lance à l’ouverture du classeur, en haut à gauche de l’écran, mais peut être déplacé
l’Userform en mode non modal permet de travailler sur le classeur.

J’ai ajouté sur colonne AB une formule permettant de mettre le compteur à “0:00:01” si l’heure de AE est dépassée par l’heure actuelle.
Décompte d’une Heure a la suivante V2.xlsm (31,6 Ko)