Macro : changement date/temps avec arrondi

mazzyblast

XLDnaute Nouveau
Bonjour, c'est la seule macro qu'il manque à mon classeur pour le terminer.
Je suis un habitué des forums avec des milliers de messages d'entraide à mon actif mais pas sur le sujet d'Excel ce qui me fait inverser les rôles et demander exceptionnellement.

Ce que j'aimerais accomplir (Excel 2007, feuille attachée)

E2 et F2 sont deux cellules vides au démarrage de l'expérience.
Depuis un SpinButton (tourniquet ActiveX), le premier click (flèche gauche ou droite) devrait remplir E2 avec la date du jour et F2 avec le temps actuel (maintenant). Ca donnerait formatté, en ce moment, 8-Nov-15 pour E2 et 9:42 PM pour F2.

Les clicks suivants devraient ensuite ajouter de la date et du temps (flèche droite) ou en soustraire (flèche droite) dans les cases correspondantes, plus ou moins 30 minutes ...toutefois, le second click précisément devrait arrondir la date et le temps au plus proche incrément de 30 minutes en horaire rond.

-------

Pour clarifier ;) voici trois séquences concrêtes

1) flèche gauche uniquement

vide vide (pas encore de click sur le tourniquet)
8-Nov-15 9:24 PM (suite au premier click)
8-Nov 15 9:00 PM (au second click)
8-Nov-15 8:30 PM (au troisième click)
...et ainsi de suite, jusqu'à ce qu'on arrive à hier, alors la date doit changer à son tour
8-Nov-15 0:30 AM
8-Nov-15 12:00 AM
7-Nov-15 11:30 PM
...

2) Flèche droite uniquement

vide vide (pas encore de click)
8-Nov-15 9:24 PM (au premier click)
8-Nov-15 9:30 PM (au second click)
8-Nov-15 10:00 PM (au troisième click)
...etc, jusqu'à arriver à demain ou la date devrait changer
8-Nov-15 11:30 PM
9-Nov-15 12:00 AM
9-Nov-15 0:30 AM
...

3) Enfin, ça devrait aussi être capable d'aller en avant ou en arrière dès qu'une date/temps a été indiquée, de façon infinie (sans bornes). Par exemple

vide vide
8-Nov-15 9:24 PM (flèche droite ou gauche, date/temps identique, celle du moment du click)
8-Nov-15 9:30 PM (flèche droite)
8-Nov-15 9:00 PM (flèche gauche)
8-Nov-15 8:30 PM (flèche gauche)
8-Nov-15 9:00 PM (flèche droite)
...et ainsi de suite, autant que besoin (sans atteindre de minimum ou maximum de date/temps qui se figerait)

------

Voilà. J'ai bien tenté ma chance à base de DateAdd sans triompher. C'est légèrement au-delà de ma connaissance/compétence. Merci d'avance si vous pouvez me sortir d'affaire.
 

Pièces jointes

  • datetime.xlsm
    14.4 KB · Affichages: 20
Dernière modification par un modérateur:

Dranreb

XLDnaute Barbatruc
Re : Macro : changement date/temps avec arrondi

Bonsoir.

C'est quelque chose comme ça dans le module de la feuille :
VB:
Private Sub SpinButton1_SpinDown()
IncréDemiH -1
End Sub

Private Sub SpinButton1_SpinUp()
IncréDemiH 1
End Sub

Private Sub IncréDemiH(ByVal Sens&)
Dim DH As Date
If IsEmpty(Me.[E2].Value) Then
   DH = Now
   Me.[E2].NumberFormat =  "[$-fr-FR]d-mmm-yy;@"
   Me.[F2].NumberFormat = "h:mm AM/PM"
Else
   DH = Int((Me.[E2].Value + Me.[F2].Value) * 48 + Sens + 0.5) / 48
   End If
Me.[E2].Value = Int(DH)
Me.[F2].Value = DH - Int(DH)
End Sub
 
Dernière édition:

mazzyblast

XLDnaute Nouveau
Re : Macro : changement date/temps avec arrondi

Merci beaucoup !

Pour la flèche droite seulement, lors du second click cela saute un incrément.

Exemple : 10:19 PM > 11:00 PM au lieu de 10:19 PM > 10:30 PM > 11:00 PM

Y'a-t'il moyen d'y rémédier ? Merci encore
 

mazzyblast

XLDnaute Nouveau
Re : Macro : changement date/temps avec arrondi

Dernier détail qui tue, dans votre code, j'aimerais changer les mentions B2 et C2 pour quelque chose comme B & target.Row pet C & target.Row pour que celà soit dynamique fonction de la rangée choisie, mais apparemment je n'ai pas la nomenclature correcte d'écriture car cela renvoit une erreur à l'exécution (avec & ActiveCell.Row aussi). Que dois-je écrire? Merci (ultime)
 
Dernière modification par un modérateur:

mazzyblast

XLDnaute Nouveau
Re : Macro : changement date/temps avec arrondi

Merci beaucoup !

Pour la flèche droite seulement, lors du second click cela saute un incrément.

Exemple : 10:19 PM > 11:00 PM au lieu de 10:19 PM > 10:30 PM > 11:00 PM

Y'a-t'il moyen d'y rémédier ? Merci encore


Je viens de faire l'observation exacte, quand l'écart entre l'heure actuelle et le premier incrément visé est < 15 minutes, alors le premier incrément est sauté ...peu importe le sens, qu'on ajoute ou retranche du temps

concrêtement si 10:16 alors flèche gauche = 10:00 (OK) mais flèche droite = 11:00 sans s'arrêter à 10:30 (il le faudrait)
et inversement, si 10:14 alors flèche gauche = 9:30 (alors qu'il faudrait un arrêt à 10:00) et flèche droite = 10:30 (OK)

Serait-ce rémédiable ?
Merci. Bonne nuit.
 

Dranreb

XLDnaute Barbatruc
Re : Macro : changement date/temps avec arrondi

Essayez comme ça :
VB:
Private Sub IncréDemiH(ByVal Sens&)
Dim DH As Date, L As Long
L = Selection.Row
If IsEmpty(Me.Cells(L, "E").Value) Then
   DH = Now
   Me.Cells(L, "E").NumberFormat = "[$-fr-FR]d-mmm-yy;@"
   Me.Cells(L, "F").NumberFormat = "h:mm AM/PM"
Else
   DH = Int((Me.Cells(L, "E").Value + Me.Cells(L, "F").Value) * 48 + Sens + 0.0001) / 48
   End If
Me.Cells(L, "E").Value = Int(DH)
Me.Cells(L, "F").Value = DH - Int(DH)
End Sub
 

mazzyblast

XLDnaute Nouveau
Re : Macro : changement date/temps avec arrondi

Comment l'heure mise quand c'est vide doit-elle être ensuite arrondie à quelle demi-heure juste avant d'y en ajouter ou enlever une ?

Bonjour, l'heure initiale, la fois suivante doit être arrondie à la demi-heure la plus proche dans un sens ou l'autre.
Hors actuellement, si l'heure est écartée de moins de 15 minutes de la prochaine demi-heure, cette demi-heure là est sautée pour la suivante.

Quand il est 9:16 la prochaine demi-heure (en utilisant la flèche droite car celle de gauche est alors OK)devrait être 9h30 malheureusement cela s'arrondit à 10h à la place
Pareillement, s'il est 9:14, ça s'arrondit maintenant à 8:30 (car il y a moins de 15 min entre 9:14 et 9:00 et donc 9h n'est pas pris en compte) via la flèche gauche (celle de droite OK) hors mon but serait que ça s'arrondisse d'abord à 9h

Bonne reprise de semaine à tous

PS: merci beaucoup pour la sélection auto-adaptable de la rangée, ça fonctionne à merveille
 
Dernière modification par un modérateur:

Dranreb

XLDnaute Barbatruc
Re : Macro : changement date/temps avec arrondi

Bonjour.
Ça semble bien être :
VB:
DH = Int((Me.Cells(L, "E").Value + Me.Cells(L, "F").Value) * 48 + Sens * 0.50001 + 0.5) / 48
Mais réglez s'il y a lieu le 0.50001 à une valeur légèrement plus grossièrement > 0.5 histoire de ne pas tenir compte d'une demi-heure dépassée de moins d'une minute…
Ou alors à l'initialisation arrondissez l'heure à la minute près :
VB:
DH = Int(Now * 1440 + 0.5) / 1440
 
Dernière édition:

Statistiques des forums

Discussions
314 450
Messages
2 109 730
Membres
110 553
dernier inscrit
loic55