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à ?
 

Dranreb

XLDnaute Barbatruc
Bonjour.
VB:
[V19].Value = Format([Z7].Value, "\'dd/mm/yyyy hh:mm:ss")
Ou bien :
VB:
With [V19]
   .NumberFormat = "@"
   .Value = Format([Z7].Value, "dd/mm/yyyy hh:mm:ss")
   End With
Je le déconseille néanmoins.
 

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;)
 

Efgé

XLDnaute Barbatruc
Bonjour à tous
Un essai sans pouvoir tester:
VB:
[V19].FormulaLocal = Format([Z7], "dd/mm/yyyy") & " " & Format([Z7], "hh:mm:ss")
C'est le .Value qui doit semer le trouble...

Cordialement
 

patricktoulon

XLDnaute Barbatruc
bonjour @Efgé
j'ai testé
non sans formatage ça ne marche pas
il manque les secondes et la chaîne est a droite de la cell donc ca reste une date
essayez le post4 en débloquant la ligne ;)
 

Efgé

XLDnaute Barbatruc
Re

Alors la même que Dranreb, que je salut, mais en plus courte:
VB:
[V19] = "'" & [Z7]
Pour moi, jouer avec le format de cellule ne fait que modifier l'affichage et pas le type de donnée.
C'est certainement pour ça que Dranreb a préciser:
Je le déconseille néanmoins.
Cordialement
 

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.
 

Fichiers joints

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
Re,

Merci pour cet indice, j'essaierai après avoir installé la dernière version d'Excel.
 
Dernière édition:

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas