XL 2010 Problème schizophrénique de dates qui s'imposent en Anglo-Saxon

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Tout est dans le titre.

Dans une cellule (ici Z7) il y a une date au format : dd/mm/yyyy hh:mm:ss qui me donne à l'instant t : 01/08/2020 17:53:04
Je veux convertir cette date avec l'heure en une chaîne de caractères (string).
Je récupère cette chaîne dans la cellule V19 ainsi :
VB:
[V19] = Format([Z7], "dd/mm/yyyy") & " " & Format([Z7], "hh:mm:ss")
Le résultat est : 08/01/3020 17:53
1/ la date est angliche
2/ il manque les secondes
J'écris maintenant ceci :
VB:
[V19] = Format([Z7], "dd/mmm/yyyy") & " " & Format([Z7], "hh:mm:ss")
Le résultat est (chez moi) : 01/ago/2020 17:53:04
Ça va nettement mieux :
1/ la date est redevenue normale, mais je ne veux pas les initiales du mois, seulement sa valeur numérique
2/ les secondes sont présentes
Comment résoudre cette histoire-là ?
 

patricktoulon

XLDnaute Barbatruc
bonjour
essayez simplement ceci et une 2d fois en débloquant la ligne en commentaire vous allez comprendre tout seul ;)
VB:
Sub test()
    With [V19]
        .NumberFormat = "@"
        .Value = [Z7].Value
        '.Value = [Z7].Text
    End With
End Sub

remarquez aussi le placement de la chaine dans la cellule;)
 

patricktoulon

XLDnaute Barbatruc
re
.value VS .text
je formate oui mais je met le .text et non le .value de la cellule
c'est que demande @Magic_Doctor au départ me semble t il
la valeur entière mais en string dans la cellule
je rentre donc la valeur en string avec .text et je formate "@" pour éviter que excel formate tout seul étant donné que c'est une date
 

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Merci les amis pour vos réponses. Vous avez pu résoudre le problème de cette date qui s’imposait en « unités US ». C’est à croire que les Zuniens ont oublié que la terre est ronde avec des gens qui ne pensent pas forcément à l’envers.

Quand on pose une question, pour simplifier, on ne pense pas forcément communiquer tout ce qui précède cette question. J’expose donc quel était le problème à résoudre, qui normalement aurait dû l'être en un tournemain en 2’ chrono. Et tout ça, parce que "dd/mmm/yyyy" marche (mais qu’on ne veut pas cette syntaxe-là) et pas "dd/mm/yyyy"…

J’ai 2 cellules. L’une montre l’heure locale précédée de la date, l’autre l’heure GMT précédée de la date. L’heure GMT étant donnée grâce à une fonction de Chip Pearson. Évidemment, entre les 2 heures, seules les dates peuvent changer (à moins que l’on soit à Greenwich…). Ce que je voulais obtenir, c’est que lorsque les dates ne sont pas identiques, celle de Greenwich (GMT) change de couleur (en l’occurrence rouge), pour la distinguer de la date correspondant à l’heure locale. Chez moi (MVD) il y a 3 heures de décalage en moins, en France normalement 1 en plus.

Le souci qui persiste, quand on a réglé ce problème de dates « protestant vs catho », c’est que, quoi qu’il en soit, Excel considère bêtement toute chaîne du type « 01/11/2033 » comme une date. J’ai don essayé de ruser, à ma manière, pour manipuler la psychorigidité d’Excel (que je déteste).
Résultat :

La date est en noir, "heures/minutes/secondes" en bleu.
Quand la date GMT <> la date locale, la date GMT est rouge et "heures/minutes/secondes" en bleu.

Tout ça ne sert strictement à rien pour le futur de la planète, mais que c’est bô !!!

VB:
Sub LocalEgalGMT()
'Vérifie si la DATE de l'heure locale est la même que celle de l'heure GMT
'Magic_Doctor

Dim fecha(1 To 2) As Date

    fecha(1) = Format([Heure_Locale], "dd/mm/yyyy") 'date heure locale
    fecha(2) = Format([Heure_GMT], "dd/mm/yyyy")    'date heure GMT
   
    [Heure_Locale1,Heure_Locale2,Heure_GMT1,Heure_GMT2].Font.Color = 11560192 'bleu
    [Heure_Locale1,Heure_Locale2] = MalditaFecha(fecha(1)) & " " & Format([Heure_Locale], "hh:mm:ss") 'la DATE n'est plus reconnue par Excel
    [Heure_GMT1,Heure_GMT2] = MalditaFecha(fecha(2)) & " " & Format([Heure_GMT], "hh:mm:ss") 'la DATE n'est plus reconnue par Excel
   
    [Heure_Locale1,Heure_Locale2].Characters(Start:=1, Length:=11).Font.Color = 0
    [Heure_GMT1,Heure_GMT2].Characters(Start:=1, Length:=11).Font.Color = IIf(MalditaFecha(fecha(1), True) <> MalditaFecha(fecha(2), True), 192, 0) 'si les dates sont différentes --> date GMT rouge
                                                                                                                                                    'si les dates sont identiques --> date GMT noire
End Sub
------------------------------------------------------------------------------------------------------------------------------------------------------
Function MalditaFecha(d As Date, Optional OnlyDate As Boolean = False) As String
'Renvoie une date sous forme de chaîne non reconnaissable comme une date. Bref, un infâme bidouillage pour niquer Excel
'Magic_Doctor

Dim j$, m$, a$

    j = Day(d)
    If j < 10 Then j = "0" & j
    m = Month(d)
    If m < 10 Then m = "0" & m
    a = Year(Date)
   
    MalditaFecha = IIf(OnlyDate = True, j & "/" & m & "/" & a, " " & j & "/" & m & "/" & a & " ") '1 espace en début et en fin de la date pour tromper l'ennemi

End Function
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
La date seule c'est simplement LaDate = Int(LaDateEtLHeure)
Et l'heure seule ensuite LHeure = LaDateEtLHeure - LaDate, mais là on n'en a pas besoin.
VB:
Sub TexteGMT(ByVal Cel As Range, ByVal GMT As Date)
   Cel.NumberFormat = "@"
   Cel.Value = Format(GMT, "dd/mm/yyyy hh:mm:ss")
   Cel.Font.Color = &HB06500
   Cel.Characters(Start:=1, Length:=10).Font.Color = IIf(Int(GMT) <> VBA.Date, &HC0&, 0)
   End Sub
On peut aussi par une simple formule n'afficher la date que si ce n'est pas celle du jour local :
Code:
=TEXTE(Heure_GMT;SI(ENT(Heure_GMT)<>AUJOURDHUI();"jj/mm/aaaa ";"")&"hh:mm:ss")
VB:
.FormulaR1C1 = "=TEXT(Heure_GMT,IF(INT(Heure_GMT)<>TODAY(),""jj/mm/aaaa "","""")&""hh:mm:ss"")"
Ceci permettrait même une mise en forme conditionnelle sur l'"Heure_GMT" avec pour formule :
Code:
=ENT(Heure_GMT)<>AUJOURDHUI()
et pour format de nombre personnalisé "jj/mm/aaaa hh:mm:ss", le format normal quand elle ne s'applique pas étant simplement "hh:mm:ss"
Bref, plein de possibilités sans avoir besoin de choses si compliquées. Par exemple :
Code:
=CHOISIR(ENT(Heure_GMT)-AUJOURDHUI()+2;"Hier";"Ce jour";"Demain")&TEXTE(Heure_GMT;" hh:mm:ss")
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Pas pu répondre avant.
2 exemples montrant ce que je voulais faire dans la mise en forme de dates et heures.
Dans le 1er exemple il y a l'heure locale et l'heure GMT. Cette dernière est obtenue au moyen d'une fonction "monumentale" (et tout à fait incompréhensible à mon niveau) de Chip Pearson. Cette fonction utilise des fonctions APIs, et je ne sais pas si elles sont compatibles avec Excel 64 bits. Dites-le moi.
Dans le second exemple il n'y a que l'heure locale et la date.
Chez moi (Excel 2007 / 32 bits), tout fonctionne bien.
Bonne journée.
 

Pièces jointes

  • Heure Locale & Heure GMT (32 bits).xlsm
    55.7 KB · Affichages: 11
  • Heure Locale.xlsm
    20.7 KB · Affichages: 4
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous n'avez toujours plus besoin de ce bricolage. Fonctionne tout aussi bien comme ça :
VB:
Sub LocalEgalGMT()
'Vérifie si la DATE de l'heure locale est la même que celle de l'heure GMT

Dim HLoc As Date, HGMT As Date

    HLoc = [Heure_Locale].Value
    HGMT = [Heure_GMT].Value
 
    [Heure_Locale1,Heure_GMT1].Font.Color = 11560192 'bleu
    [Heure_Locale1] = "'" & Format(HLoc, "dd/mm/yyyy hh:mm:ss")
    [Heure_GMT1] = "'" & Format(HGMT, "dd/mm/yyyy hh:mm:ss")
 
    [Heure_Locale1].Characters(Start:=1, Length:=10).Font.Color = 0
    [Heure_GMT1].Characters(Start:=1, Length:=10).Font.Color = IIf(Int(HLoc) <> Int(HGMT), 192, 0) 'si les DATES sont différentes --> DATE GMT rouge
                                                                                                                                         'si les DATES sont identiques --> DATE GMT noire
End Sub
En effet, il suffit soit de mettre préalablement à la cellule un format de texte soit de le faire précéder d'une apostrophe pour qu'Excel ne tente plus de convertir un String selon une règle d'interprétation toujours internationale dans les macros.
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Bonjour Dranreb,

Bravo, ça marche, c'est plus court et plus besoin de fonction.
Une question. L'heure GMT fonctionne-t-elle bien avec Excel 64 bits ?

Encore merci et bonne journée.
 

Pièces jointes

  • Heure Locale & Heure GMT (32 bits) 2.xlsm
    51.4 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 846
dernier inscrit
Silhabib