Microsoft 365 inPROUTbox fonctionne si texte et ne fonctionne pas si date

Usine à gaz

XLDnaute Barbatruc
Bonjour à tous les participants de ces fils :), Bonjour le Forum :),

Il y a quelques temps, j'avais posté ici :

Je remercie encore tous ls participants.
J'avais utilisé le code de job75 (Gérard) qui me convenait le mieux.
Je l'utilise depuis des mois il c'est nickel :), il fonctionne parfaitement quand il s'agit de textes.

J'ai besoin aujourd'hui de l'utiliser en "clic droit" pour ça pas de souci.
Voici ce qui me pose problème :
Vous le verrez dans les cellules "C19 : D22", j'ai des dates que j'ai fréquemment à modifier.
Dans mon "usine à gaz" hyper verrouillée et protégée, pour ce faire, je suis obligé de faire des manipulations qui me prennent du temps.

Je souhaite faire mes modifs "en automatique avec "l'inPROUTbox".
Mais "l'inPROUTbox" ne prend pas la date avec les "espaceespace00:00:00" :
soit : il ne prend pas "espaceespace00:00:00" si pas d'heure dans la date,
soit : il ne prend qu'un seul espace avant l'heure "espace00:00:00" si heure dans la date,
alors que j'ai besoin de 2 espaces.
Auriez-vous la solution ?
Je joins le petit fichier test...
Grand merci à vous,
:)
 

Pièces jointes

  • inputBox_ModifCellule_Gerard3S.xlsm
    41 KB · Affichages: 6
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
Bonjour Lionel
encore une fois tu veux injecter une date + heure avec un format dans une cellule
cette date ne sera alors pas calculable
d'autant plus par exemple avec le dernier essaie de @sylvanu ( que je salue au passage ) quand on double click sur la cellule le double espace se retransforme en simple espace

donc
au lieu de faire ça (mille excuses @sylvanu)
VB:
Private Sub OkButton_Click()
Dim V, Nb, D, H
V = Trim(TextBox1) & " "
Nb = Application.Search(" ", V)
D = Mid(V, 1, Nb): H = Trim(Mid(V, Nb))
ActiveCell.Value = D & "  " & H
Unload Me
End Sub
ce qui donne ceci
demo.gif



je ferais donc plutot ceci
VB:
Private Sub OkButton_Click()
    With ActiveCell
        .Value = CDate(Application.Trim(TextBox1))
        .NumberFormat = "dd/mm/yyyy  hh:mm:ss"
    End With
    Unload Me
End Sub
c'est simple comme un bonjour
le numberformat contient 2 espace de séparation

c'est l'avantage d'utiliser cdate qui reconnais les date tout court et les date avec time
le application.trim est là pour le cas ou tu mettrais 36 espaces entres les deux il régule a 1 espace de séparation et trim en même temps
en gros je tape "
10/05/2023 05:50:20 "
le application trim me le transforme en "10/05/2023 05:50:20"
et cdate me le reconnait en date + time
qui avec le number format sur la cellule devient ce que tu souhaite
et tes dates restent calculable
 

job75

XLDnaute Barbatruc
Bonsoir Lionel, sylvanu, Patrick,

Pourquoi pas ceci :
VB:
Private Sub OkButton_Click()
Dim dat As Variant
dat = Replace(Replace(TextBox1, " ", "/"), "//", " ")
If IsDate(dat) Then ActiveCell = CDate(dat) Else ActiveCell = ""
Unload Me
End Sub

Private Sub UserForm_Initialize()
TextBox1 = Format(ActiveCell, "dd mm yy  hh:mm")
'-----
End Sub
 

Pièces jointes

  • inputBox_ModifCellule_Gerard3S.xlsm
    43.3 KB · Affichages: 3

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Usine à gaz :),

Bon avec une inPROUTbox, je vais me lâcher en espérant ne pas en faire des caisses.

Il y a quelques temps, bloqué de longs jours chez moi, je m'étais amusé à faire une fonction qui transforme un texte en date+heure qui soit assez permissive sur son écriture. Hé oui! C'est pathétique d'en arriver là.
La fonction s'appelle : TexteEnDateHeure(ByVal x) (utilisable sur feuille Excel ou VBA)
L'écriture de x est assez libre (surtout pour les séparateurs) :
Date texte ou nombre ou logique
la Fonction
en vraies date heure
remarque
c'est une date avec heure : 11 - 12 / 2023 6h23m56s
11/12/2023 06:23:56
29/02/2129 février 2021 n'est pas bissextile
29 02_______2024
29/02/2024 00:00:00
29 février 2024 est bissextile
le 15 du 3ème mois de 1978 à 12h25
15/03/1978 12:25:00
27 6 \ 1997 ---- 9 : 21 + ,6
27/06/1997 09:21:06
12 12,10
12/12/2010 00:00:00
31/12/1899date inférieure à la date min 01/01/1901 00:00:00
16092145
date supérieure à date max 31/12/9999 00:00:00
4452
09/03/1912 00:00:00
47894,19
15/02/2031 04:33:36
2,466782407
date inférieure à la date min 01/01/1901 00:00:00
29/02/2024
29/02/2024 00:00:00
01/01/1901 00:00:00
01/01/1901 00:00:00
02/01/1902 00:00:00
02/01/1902 00:00:00
11/01/1900 00:00:00
date inférieure à la date min 01/01/1901 00:00:00
01/01/1900 12:45:01
date inférieure à la date min 01/01/1901 00:00:00
02/01/1900 23:59:59
date inférieure à la date min 01/01/1901 00:00:00
03/12/1900 00:00:00
date inférieure à la date min 01/01/1901 00:00:01
01/01/1901 00:00:00
01/01/1901 00:00:00
30/12/9999 23:59:59
30/12/9999 23:59:59
31/12/9999 23:59:58
date supérieure à date max 31/12/9999 00:00:00
31/12/9999 00:00:00
31/12/9999 00:00:00
VRAI
Valeur logique
FAUX
Valeur logique


Bon on s'amuse comme on peut.
 

Pièces jointes

  • mapomme- (date heure) texte en vraies date heure- v1.xlsm
    35 KB · Affichages: 3
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Bonjour sylvanu :), Bonjour Patrick :), Bonjour Gérard :), Bonjour mapomme :), le Forum :)

Encore merci pour vos solutions.

sylvanu : ta solution fonction "presque bien" lol : si heure dans la date (01/01/2023 08:00:00), c'est bon mais pas bon si pas heure dans la date (01/01/2023 00:00:00),

Patrick, ton code fonctionne tout bien,
Gérard, ton code fonctionne tout bien,

mapomme : Encore merci pour ton fichier qui va me prendre la tête tout le WE lol 🙃🤪
:)
 

patricktoulon

XLDnaute Barbatruc
re
bonjour lionel
ben c'est assez simple comme code en fait
ce qu'il faut retenir dans ce que je te dis
les dates, les numérique transmis d'un userform vers des cellules doivent toujours êtres transmis dans leur type
et c'est seulement sur le numberformat qu'il faut agir

il faudrait que tu enregistre ça dans ta tête une bonne fois pour toute , ça doit devenir un réflexe
avec numberformat tu peux pratiquement faire tout ce que tu veux même afficher autre chose tout en gardant la valeur

regarde
VB:
Sub test()
    With [A1]
        .Value = CDate(Date)
        .NumberFormat = """LIONEL"""
    End With
End Sub
tu vois on vois bien "LIONEL" dans la cellule pourtant dans la barre de formule on vois bien le numérique de la date
demo.gif


et toi tu t’entête a vouloir formater des variables date ou numériques en vba
ce qui est absolument inutile ;)
🤣
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Lionel, Job, Mapomme, Patrick,
@patrick,
ce qui est absolument inutile
Ce qui n'est pas tout à fait exact.
Si on reprend l'intitulé de ce post, et que Lionel voulait détecter ensuite ce double espace pour d'autres calculs, alors le format ne conviendrait pas, puisque justement ce double espace est "virtuel".
Là encore, c'est une affaire d'application.
Vous pourriez rétorquer que cette configuration n'est guère probable, mais il y a certaines usines à gaz où c'est utile, comme par exemple un format pré défini demandé par un outil tiers.
 

Discussions similaires

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh