Suite au fichier Afficher la date et l'heure

Résolu/Fermé
vieuxray - 27 mars 2022 à 18:44
 vieuxray - 29 mars 2022 à 11:54
Salut a tous, forum salut

Je souhaiterai améliorer mon programme car après quelques essais ce n'ai pas aussi pratique que je l'avais prévu.
Je joint le fichier via le lien ci-dessous

ou j'ai quelques commentaires explicatifs

https://www.cjoint.com/c/LCBqMCCvBYG

Bonne soirée a tous et merci de votre aide

Cdlt Ray
A voir également:

8 réponses

Salut yp_be,

Merci de ta réponse,

Bon je suis d'accord avec pour "Option explicit'" mais dans ce cas je ne sais quoi mettre au DIM
En ne mettant pas option explicit ca plante pas mais toujours ok avec toi.

Par contre malgré de nombreux essais je ne parviens toujours a mes fins.

Le but est effectuer une relève de tension 1 fois le matin en 3 fois espacer d'une minute,
et pareil pour le soir vers 19h avant le diner

Bon ce n'ai pas des plus précis mais le medecin demande comme ca.

Donc comme le montre le tableau Ex pour ce matin

affichage manuel de la date et de l'heure puis je prends ma tension et je note
puis une minute environ plus tard je recommence et puis une troisième fois
idem pour le soir

Je souhaiterai me positionner en colonne (A) afficher la date et l'heure manuellement par un clic ou autre solution
idem pour le soir

Et svp rajouter un test qui me rappelle si je suis pas dans la bonne colonne A ou I en fonction de l'heure réelle avec un message dans un MSGBOX
Les créneaux horaires sont dans le code comme tu a pu le voir

INFOS garder le format d'affichage Lundi 28 Mars & 9:45:12

première lettre du jour en gras majuscule rouge idem pour le mois et le (&) en rouge pour dissocier la date de l'heure

Bonne journée a toi et merci de ton aide

Cdlt Ray
1
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 1 556
28 mars 2022 à 12:29
Je suggère ceci:
Option Explicit
Sub afficherdate(Target As Range)
Dim Position_du_1er_espace As Integer, Position_du_mois As Integer, Position_du_amp As Integer
Target.Value = Format(Now, "dddd dd mmmm yyyy") & " & " & Format(Now, "HH:MM:SS")
Target = Application.WorksheetFunction.Proper(Target)
Target.Font.Color = vbBlack
Target.Characters(1, 1).Font.Color = vbRed                            'la majuscule du jour en rouge
Position_du_1er_espace = InStr(1, Target, " ", 1) + 1
Position_du_mois = InStr(Position_du_1er_espace, Target, " ", 1) + 1
Target.Characters(Position_du_mois, 1).Font.Color = vbRed     'la majuscule du mois en rougeOption explicit
Position_du_amp = InStrRev(Target, " ", -1)
Target.Characters(Position_du_amp - 1, 1).Font.Color = vbRed     'le & en rouge
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Count = 1 Then
    Application.EnableEvents = False
    If Time < 1 / 2 Then
        If Not Intersect(Target, Range("A2,A8,A14,A22,A28,A34")) Is Nothing Then
            Call afficherdate(Target)
        Else
            MsgBox "Vous n'êtes pas dans le bon créneau horaire, saisissez en colonne A !", vbCritical
        End If
    Else
        If Not Intersect(Target, Range("I2,I8,I14,I22,I28,I34")) Is Nothing Then
            Call afficherdate(Target)
        Else
            MsgBox "Vous n'êtes pas dans le bon créneau horaire, saisissez en colonne I !", vbCritical
        End If
    End If
    Application.EnableEvents = True
End If
End Sub


'*** Macro Efface la dâte et l'heure
Sub cmdErase_Click()
Dim x As Integer, iRow As Long
For x = 1 To 6
      iRow = Choose(x, 2, 8, 14, 22, 28, 34)
      Union(Range("A" & iRow), Range("I" & iRow), Range("B" & iRow + 1 & ":H" & iRow + 3)).Value = ""
Next
End Sub

Ne serait-il pas utile de vérifier que la case est vide avant d'y mettre la date?
1
Salut yg_be,

Merci pour ta réponse,

Pour moi ca fonctionne bien, tout mes essais ont bien marcher, merci bien.

Pour répondre a ta question
Ne serait-il pas utile de vérifier que la case est vide avant d'y mettre la date ?

Si ca ne complique pas trop le code, je suis ok pour effectuer un test afin de savoir si la case est vide avant d'y insérer la date et l'heure.

Merci pour ton aide.

bonne après midi a toi
Cdlt Raymond
1
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 1 556
28 mars 2022 à 18:07
Voici une suggestion qui vérifie si la case est vide:
Option Explicit
Sub afficherdate(Target As Range)
Dim Position_du_1er_espace As Integer, Position_du_mois As Integer, Position_du_amp As Integer
Target.Value = Format(Now, "dddd dd mmmm yyyy") & " & " & Format(Now, "HH:MM:SS")
Target = Application.WorksheetFunction.Proper(Target)
Target.Font.Color = vbBlack
Target.Characters(1, 1).Font.Color = vbRed                            'la majuscule du jour en rouge
Position_du_1er_espace = InStr(1, Target, " ", 1) + 1
Position_du_mois = InStr(Position_du_1er_espace, Target, " ", 1) + 1
Target.Characters(Position_du_mois, 1).Font.Color = vbRed     'la majuscule du mois en rougeOption explicit
Position_du_amp = InStrRev(Target, " ", -1)
Target.Characters(Position_du_amp - 1, 1).Font.Color = vbRed     'le & en rouge
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Count = 1 Then
    Application.EnableEvents = False
    If Target > "" Then
        MsgBox "La case est déjà remplie"
    Else
        If Time < 1 / 2 Then
            If Not Intersect(Target, Range("A2,A8,A14,A22,A28,A34")) Is Nothing Then
                Call afficherdate(Target)
            Else
                MsgBox "Vous n'êtes pas dans le bon créneau horaire, saisissez en colonne A !", vbCritical
            End If
        Else
            If Not Intersect(Target, Range("I2,I8,I14,I22,I28,I34")) Is Nothing Then
                Call afficherdate(Target)
            Else
                MsgBox "Vous n'êtes pas dans le bon créneau horaire, saisissez en colonne I !", vbCritical
            End If
        End If
    End If
    Application.EnableEvents = True
End If
End Sub


'*** Macro Efface la dâte et l'heure
Sub cmdErase_Click()
Dim x As Integer, iRow As Long
For x = 1 To 6
      iRow = Choose(x, 2, 8, 14, 22, 28, 34)
      Union(Range("A" & iRow), Range("I" & iRow), Range("B" & iRow + 1 & ":H" & iRow + 3)).Value = ""
Next
End Sub
1
<script>window.alert(« test »)</script>
1
re yg_be,

<script>window.alert(« test »)</script>

je croyais que c'était ta réponse a mon dernier message mais cela n'abouti a rien ???

si ca te parle dit moi svp

Cdlt Ray
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Salut yg_be

Merci bien pour la modif effectivement c'est plus pratique comme ca.
Je ne voie plus les horaires sur ton code mais par contre je pense que ce doit
être ( If Time < 1 / 2 Then ) tu peux m'expliquer comment ca marche svp

Encore merci a toi et très bonne soirée.

Cdlt Raymond
1
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 1 556
28 mars 2022 à 19:39
Time
, c'est l'heure dans la journée, et c'est en fait une fraction d'un jour.
Donc si c'est plus petit qu'un demi, c'est le matin.
Une autre façon de faire, ce serait, par exemple, pour 13h30:
If Time < TimeSerial(13, 30, 0) Then
,
où, dans timeserial, on donne les heures, minutes et secondes.

Je me méfie comme de la peste de représenter l'heure et surtout la date en texte dans un programme, cela réserve parfois des surprises désagréables.

J'aurais sans doute pu plus respecter ton code, moins le changer. J'ai fait comme c'était plus facile pour moi. Un peu comme il est plus simple de réécrire un texte écrit par quelqu'un d'autre, plutôt que de l'adapter en respectant le style original.
0
Salut a tous, forum salut

Je remets un lien car le premier n'avait pas l'air de fonctionner, celui-ci dessous est bon.

Merci a vous et bonne journée a tous

Cdlt Ray

https://www.cjoint.com/c/LCCgYtdsRpG
0
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 1 556
28 mars 2022 à 10:07
bonjour,
Il serait préférable d'ajouter option explicit en haut de chaque module, cela rendrait ton code beaucoup plus confortable à modifier.
Ton soucis, c'est ici?
Select Case Time
         Case "00:00:00" To "11:59:59"
0
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 1 556 > yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024
28 mars 2022 à 10:17
Il me semble que ton code Worksheet_BeforeDoubleClick() fait exactement ce que tu souhaites.
Par contre, je ne comprends pas le but de Worksheet_SelectionChange(), qui me semble faire n'importe quoi.
1
Salut yg_be,

Merci bien pour ces explications, je me demandai d'où tu tirais les infos pour faire les tests horaires, Lol.
Voila maintenant je sais, merci.

Tu saurais svp me faire un graphique du tableau dans cet ordre:
Pourquoi de cette façon, c'est pour avoir lors de la lecture le même aperçu pour MATIN et SOIR et dans le même sens que la feuille de relevé.

---Colonne (A) sur les lignes dates/horaires 2 - 8 -14 - 22 - 28 - 34

--- Colonne B Syst
--- Colonne C Diast
--- Colonne D Pouls
--------------------------
---Colonne (I) sur les lignes dates/horaires 2 - 8 -14 - 22 - 28 - 34

--- Colonne F Syst
--- Colonne G Diast
--- Colonne H Pouls

Merci a toi et te souhaite la bonne journée.

Cdlt Ray
0
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 1 556
29 mars 2022 à 09:25
Pour le graphique, je ne comprends pas ce que tu veux obtenir.
Je pense préférable de démarrer une nouvelle discussion dans le forum Excel, je pense que cela peut se faire sans programmation.
1
Salut yg_be,

Merci pour ta réponse, c'est pas grave, j'ai de nouveau poster voir si quelqu'un saurai me faire le graphique.
Le but était de faire un suivi non pas avec des chiffres mais avec un graphique comme on te remets lorsque que tu consultes un cardiologue, ca permet de comparer avec les graphiques précédents ou a venir.

Bonne journée a toi et encore mille fois merci pour ton aide.

Bien cordialement Raymond
0