Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

convertir jj/mm/aa hh:min en jj/mm/aa

26 réponses
Avatar
PP
Bonjour

je doit traiter un grand nombre de valeurs avec des dates en regard
dont je n'ai pas besoin des heures minutes, c'est à dire passer de par
exemple de
16/09/2003 11:10:00 à 16/09/2003. Comment puis je faire sur une grande
serie?

6 réponses

1 2 3
Avatar
MichD
Bonjour,

Je reprends seulement la partie de ta macro qui est problématique...
et je l'ai modifiée comme ceci :

'---------------------------
For Each Cel In Rg
Tableau = Split(Cel.Value, " ")
For i = 0 To UBound(Tableau)
Cel.Offset(0, i + 1).Value = CDate(Tableau(i))
Next i
Next Cel

A ) "Cel" est une variable définie comme un "Range", pourquoi ne pas l'utiliser
directement dans ton code au lieu de le remplacer par "Range(Ad) ?

B ) La variable "Tableau" est définie comme "String" ce qui signifie que le tableau
contient des chaînes de caractères.
Le Tableau(0) contient des chaînes de caractères contenant des dates.
Le tableau(1) contient des chaînes de caractères contenant des heures:minutes:secondes

Le problème se situe particulièrement avec des heures.
Si j'écris : 02/03/04, peux-tu me dire avec certitude de quelle date il s'agit si je ne te donne pas le format que
j'utilise dans ma tête ?
jj/mm/aa ou aa/mm/aa ou mm/jj/aa
2 mars 2004 ou 4 mars 2001 ou 3 février 2004

VBA fait face au même dilemme que toi. Seulement on l'a programmé de façon telle que pour lui, dès qu'il reconnaît une
chaîne de caractères ressemblant à une date, on lui a dit que par défaut, il devait appliquer le format américain d'une
date soit Mois/jour/Année.
Pour qu'Excel arrive à comprendre de quoi tu parles, tu utilises une fonction de conversion "Cdate". Cette fonction
utilise le format "Date" défini dans le panneau de configuration de Windows pour faire l'interprétation des dates et là,
comme il transfère de VBA à la feuille de calcul des "vraies" dates, Excel sait en faire la transformation en valeur
numérique si c'est le format de cellule que tu as choisi. Tu aurais pu demander à VBA de transférer des valeurs entières
au lieu de date en utilisant ceci : CDbl(CDate(Tableau(i))).

Si tu as le sens de l'observation, ta procédure transforme une date 11/04/2011 15:48:49 en 04/11/2011 ou sa valeur
numérique. 11 avril 2011 ou 4 novembre 2011 ce n'est pas la même chose pour moi! Toutes les dates dont la valeur débute
par moins que 13, VBA interprète ces dates avec le format américain des dates, d'où l'inverse entre les jours et les
mois. La feuille de calcul reçoit ces informations comme des dates. Pour les dates débutant avec 13 ou plus grand, VBA
n'est pas capable de faire l'interprétation de ces dates, il les retourne à la feuille de calcul avec une mention
"Texte" et ainsi dans les cellules de la feuille de calcul, ces informations sont affichées comme si c'était du texte
soit à gauche de la cellule.

C'est pourtant simple les dates avec Excel !!!
;-)))

MichD
--------------------------------------------
Avatar
Jacquouille
Pfff .... c'est pourtant très clair.....maintenant que tu nous l'as
expliqué.
Je te propose pour un César à Canne.
Grand merci et bon WE
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
irrlro$dbk$

Bonjour,

Je reprends seulement la partie de ta macro qui est problématique...
et je l'ai modifiée comme ceci :

'---------------------------
For Each Cel In Rg
Tableau = Split(Cel.Value, " ")
For i = 0 To UBound(Tableau)
Cel.Offset(0, i + 1).Value = CDate(Tableau(i))
Next i
Next Cel

A ) "Cel" est une variable définie comme un "Range", pourquoi ne pas
l'utiliser
directement dans ton code au lieu de le remplacer par "Range(Ad) ?

B ) La variable "Tableau" est définie comme "String" ce qui signifie que le
tableau
contient des chaînes de caractères.
Le Tableau(0) contient des chaînes de caractères contenant des dates.
Le tableau(1) contient des chaînes de caractères contenant des
heures:minutes:secondes

Le problème se situe particulièrement avec des heures.
Si j'écris : 02/03/04, peux-tu me dire avec certitude de quelle date il
s'agit si je ne te donne pas le format que
j'utilise dans ma tête ?
jj/mm/aa ou aa/mm/aa ou mm/jj/aa
2 mars 2004 ou 4 mars 2001 ou 3 février 2004

VBA fait face au même dilemme que toi. Seulement on l'a programmé de façon
telle que pour lui, dès qu'il reconnaît une
chaîne de caractères ressemblant à une date, on lui a dit que par défaut, il
devait appliquer le format américain d'une
date soit Mois/jour/Année.
Pour qu'Excel arrive à comprendre de quoi tu parles, tu utilises une
fonction de conversion "Cdate". Cette fonction
utilise le format "Date" défini dans le panneau de configuration de Windows
pour faire l'interprétation des dates et là,
comme il transfère de VBA à la feuille de calcul des "vraies" dates, Excel
sait en faire la transformation en valeur
numérique si c'est le format de cellule que tu as choisi. Tu aurais pu
demander à VBA de transférer des valeurs entières
au lieu de date en utilisant ceci : CDbl(CDate(Tableau(i))).

Si tu as le sens de l'observation, ta procédure transforme une date
11/04/2011 15:48:49 en 04/11/2011 ou sa valeur
numérique. 11 avril 2011 ou 4 novembre 2011 ce n'est pas la même chose pour
moi! Toutes les dates dont la valeur débute
par moins que 13, VBA interprète ces dates avec le format américain des
dates, d'où l'inverse entre les jours et les
mois. La feuille de calcul reçoit ces informations comme des dates. Pour les
dates débutant avec 13 ou plus grand, VBA
n'est pas capable de faire l'interprétation de ces dates, il les retourne à
la feuille de calcul avec une mention
"Texte" et ainsi dans les cellules de la feuille de calcul, ces informations
sont affichées comme si c'était du texte
soit à gauche de la cellule.

C'est pourtant simple les dates avec Excel !!!
;-)))

MichD
--------------------------------------------
Avatar
PP
MichD a utilisé son clavier pour écrire :
Bonjour,

Et d'une autre suggestion :

Il s'agit d'une petite macro. Tu ouvres la fenêtre de l'éditeur de code en
faisant un clic droit sur l'onglet de ta feuille et en choisissant la
commande du menu contextuel : "Visualiser le code"

Dans la page blanche de droite,tu colles la macro suivante :

Tu modifies la plage A1:A10 pour la plage de cellules dans ton application.

Il ne te reste plus qu'à lancer la macro, pour ce faire, tu as différentes
alternatives A ) Tu places le curseur de la souris entre la première et la
dernière de la macro et tu appuies sur le bouton de la barre d'outils
"Standard" de la même fenêtre affichant une petite flèche pointant vers
la droite.

B ) Toujours en situant le curseur entre la première et la dernière ligne de
la procédure, Barre des menus de la fenêtre / Exécution / Exécuter

C ) Tu peux revenir à l'interface de la feuille de calcul, utiliser le
raccourci clavier Alt + F8 et dans la fenêtre ouvrante, tu sélectionnes
le nom de la macro et tu cliques sur le bouton Exécuter.

'-------------------------------
Sub test()
Application.ScreenUpdating = False
With Range("A1:A10")
.Replace " *:*", "", xlPart
.NumberFormat = "DD/MM/YY"
End With
Application.ScreenUpdating = True
End Sub
'-------------------------------


MichD
--------------------------------------------



Merci je viens donc d'avoir mon premier galon de programmateur!!
Avatar
Péhemme
Bonjour Denis,

A ) "Cel" est une variable définie comme un "Range", pourquoi ne pas
l'utiliser
directement dans ton code au lieu de le remplacer par "Range(Ad) ?


Oui, c'est vrai.
C'est la preuve que je ne pratique pas assez (Excel). En l'occurrence, je
savais que je travaillais sur "l'adresse" et c'était donc plus clair pour
les neurones qui me restent.
Promis, j'y veillerai.

B ) La variable "Tableau" est définie comme "String" ce qui signifie que
le tableau
contient des chaînes de caractères.


Exact. Je l'avais fait exprès afin de "travailler" le " " dans l'utilisation
de Split.

Si tu as le sens de l'observation, ta procédure transforme une date
11/04/2011 15:48:49 en 04/11/2011 ou sa valeur
numérique. 11 avril 2011 ou 4 novembre 2011 ce n'est pas la même chose
pour moi!


Pan sur le bec !...
Hugh ! ¼il de Lynx a vu ce que ¼il de vieux Faucon (attention à
l'orthographe) n'a fait que survoler !
Bravo Denis !
Attendant en retour (un peu rapidement sans doute) le n° du jour, j'ai
considéré que les dates retournées étaient "fausses" (par rapport à ce que
je croyais obtenir) et j'ai donc considéré que les n° de jour étaient
corrects.
Et, je me suis fait abuser par Excel... C'était le contraire. Les n° des
jours étaient faux et les dates justes !
Ahrr !
C'est pourtant simple les dates avec Excel !!!
;-)))


Oui, cela l'est ou le serait si Excel n'interprétait pas les dates
automatiquement selon ce qu'il lit. S'il ne recrachait que le n° du jour,
avec ses décimales, le reste ne serait qu'une question de format. Il faut,
pour être certain du résultat, contourner sa "réflexion" et toujours
"forcer" le résultat à obtenir ainsi que son format.
Enfin je me comprends.

Merci de m'avoir, encore une fois, remis sur la voie.
Je retourne sur Split à qui je veux faire rendre gorge et pour lequel,
j'ouvrirai certainement une ficelle ces prochains jours. Profites-en pour
réviser ;-))

Merci encore Denis et bon dimanche
Bien amicalement
Michel


"MichD" a écrit dans le message de
news:irrlro$dbk$
Bonjour,

Je reprends seulement la partie de ta macro qui est problématique...
et je l'ai modifiée comme ceci :

'---------------------------
For Each Cel In Rg
Tableau = Split(Cel.Value, " ")
For i = 0 To UBound(Tableau)
Cel.Offset(0, i + 1).Value = CDate(Tableau(i))
Next i
Next Cel

A ) "Cel" est une variable définie comme un "Range", pourquoi ne pas
l'utiliser
directement dans ton code au lieu de le remplacer par "Range(Ad) ?

B ) La variable "Tableau" est définie comme "String" ce qui signifie que
le tableau
contient des chaînes de caractères.
Le Tableau(0) contient des chaînes de caractères contenant des dates.
Le tableau(1) contient des chaînes de caractères contenant des
heures:minutes:secondes

Le problème se situe particulièrement avec des heures.
Si j'écris : 02/03/04, peux-tu me dire avec certitude de quelle date il
s'agit si je ne te donne pas le format que
j'utilise dans ma tête ?
jj/mm/aa ou aa/mm/aa ou mm/jj/aa
2 mars 2004 ou 4 mars 2001 ou 3 février 2004

VBA fait face au même dilemme que toi. Seulement on l'a programmé de façon
telle que pour lui, dès qu'il reconnaît une
chaîne de caractères ressemblant à une date, on lui a dit que par défaut,
il devait appliquer le format américain d'une
date soit Mois/jour/Année.
Pour qu'Excel arrive à comprendre de quoi tu parles, tu utilises une
fonction de conversion "Cdate". Cette fonction
utilise le format "Date" défini dans le panneau de configuration de
Windows pour faire l'interprétation des dates et là,
comme il transfère de VBA à la feuille de calcul des "vraies" dates, Excel
sait en faire la transformation en valeur
numérique si c'est le format de cellule que tu as choisi. Tu aurais pu
demander à VBA de transférer des valeurs entières
au lieu de date en utilisant ceci : CDbl(CDate(Tableau(i))).

Si tu as le sens de l'observation, ta procédure transforme une date
11/04/2011 15:48:49 en 04/11/2011 ou sa valeur
numérique. 11 avril 2011 ou 4 novembre 2011 ce n'est pas la même chose
pour moi! Toutes les dates dont la valeur débute
par moins que 13, VBA interprète ces dates avec le format américain des
dates, d'où l'inverse entre les jours et les
mois. La feuille de calcul reçoit ces informations comme des dates. Pour
les dates débutant avec 13 ou plus grand, VBA
n'est pas capable de faire l'interprétation de ces dates, il les retourne
à la feuille de calcul avec une mention
"Texte" et ainsi dans les cellules de la feuille de calcul, ces
informations sont affichées comme si c'était du texte
soit à gauche de la cellule.

C'est pourtant simple les dates avec Excel !!!
;-)))

MichD
--------------------------------------------

Avatar
Péhemme
Merci Jacquouille, bien essayé, mais tout était de ma faute (Cf. ma réponse
à Denis)
Se faire "abuser" par Excel, à mon âge, cela fait mal... (à mon ego)... ;-)
Bien amicalement
Michel


"Jacquouille" a écrit dans le message de
news:4de13280$0$14251$
Bonsoir
Ce ne serait pas pour mettre THE espace 160 qui se trouverait entre le
jour et les heures dans le format initial ?

Jacquouille dit Billy The Kill (160)

" Le vin est au repas ce que le parfum est à la femme."
"Péhemme" a écrit dans le message de groupe de discussion :
4de12ca6$0$14669$

Bonjour Denis, Bonjour à Tous,

Alors, justement !? Je suis en train de m'amuser à ventiler les dates des
heures et j'observe des curiosités.
Micro climat ou réalité d'Excel (Vista-Excel 2003).
J'ai une page vierge. Je la formate en "# ##0,00;[Rouge](# ##0,00).
Je saisi des dates et heures que je formate en : "jj/mm/aaaa hh:mm:ss".
Je fais un test en utilisant Split, séparateur " " et j'obtiens parfois
des
dates, parfois les n° les représentant, ce qui est, me semble-t-il normal
car les cellules de destination sont pré-formatées comme définies plus
haut.
Pourquoi des dates ? Et surtout pourquoi *parfois* des dates et *parfois*
des n° ?
L'un *ou* l'autre mais pourquoi les 2 ?
Depuis que Denis m'a fait découvrir TextToColumns, je ne jure que par çà.
J'ai donc un 2ème test l'utilisant. Celui-ci me sépare mieux les "jours"
des
"heures" (bien que je ne sache pas pourquoi cela insère une colonne vide
entre les 2 => sans doute que je ne maitrise pas encore très bien les
paramètres de cette instruction).

Un passionné peut-il me dire pourquoi je n'obtiens pas des résultats
identiques ?

J'ai déposé un fichier exemple sur :
http://cjoint.com/?AECtgX0rZ8X

Merci d'avance.
Michel






"MichD" a écrit dans le message de
news:irqqjt$97a$
Une autre possibilité sans macros :

Tu sélectionnes ta colonne de date

Sous les versions Excel d'avant 2007,
Barre des menus / données / convertir /
Étape 1 -> Largeur fixe
Étape 2 -> une ligne verticale doit apparaître immédiatement après la
date
et avant l'heure.
Si elle est bien là, tu passes à l'étape suivante
Étape 3 -> En utilisant la barre de titre "Standard" juste au-dessus des
dates, tu sélectionnes
la colonne représentant l'heure et tu appuies sur le
bouton radio
plus haut : "Colonne non distribuée"
Dans la même fenêtre, tu t'assures que la case
"Destination" est bien renseignée.
Et tu cliques sur le bouton terminé.
Toutes tes heures auront été effacées et remplacées par 28/05/11
00:00:00
Il ne te reste plus qu'à appliquer le format de cellule que tu désires
par
la commande
du menu contextuel : "Format de cellule"






MichD
--------------------------------------------




Avatar
Jacquouille
Salut Michel
Un de mes profs disait, pour expliquer le droit civil:
"Il y a l'usus et l'abusus".....
Si l'usage (même à ton âge) est bien, se faire abuser est quand même
ch......
Et, finalement, c'est encore Denis qui aura montré le Droit Chemin. -))
Bon WE

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Péhemme" a écrit dans le message de groupe de discussion :
4de220c7$0$14698$

Merci Jacquouille, bien essayé, mais tout était de ma faute (Cf. ma réponse
à Denis)
Se faire "abuser" par Excel, à mon âge, cela fait mal... (à mon ego)... ;-)
Bien amicalement
Michel


"Jacquouille" a écrit dans le message de
news:4de13280$0$14251$
Bonsoir
Ce ne serait pas pour mettre THE espace 160 qui se trouverait entre le
jour et les heures dans le format initial ?

Jacquouille dit Billy The Kill (160)

" Le vin est au repas ce que le parfum est à la femme."
"Péhemme" a écrit dans le message de groupe de discussion :
4de12ca6$0$14669$

Bonjour Denis, Bonjour à Tous,

Alors, justement !? Je suis en train de m'amuser à ventiler les dates des
heures et j'observe des curiosités.
Micro climat ou réalité d'Excel (Vista-Excel 2003).
J'ai une page vierge. Je la formate en "# ##0,00;[Rouge](# ##0,00).
Je saisi des dates et heures que je formate en : "jj/mm/aaaa hh:mm:ss".
Je fais un test en utilisant Split, séparateur " " et j'obtiens parfois
des
dates, parfois les n° les représentant, ce qui est, me semble-t-il normal
car les cellules de destination sont pré-formatées comme définies plus
haut.
Pourquoi des dates ? Et surtout pourquoi *parfois* des dates et *parfois*
des n° ?
L'un *ou* l'autre mais pourquoi les 2 ?
Depuis que Denis m'a fait découvrir TextToColumns, je ne jure que par çà.
J'ai donc un 2ème test l'utilisant. Celui-ci me sépare mieux les "jours"
des
"heures" (bien que je ne sache pas pourquoi cela insère une colonne vide
entre les 2 => sans doute que je ne maitrise pas encore très bien les
paramètres de cette instruction).

Un passionné peut-il me dire pourquoi je n'obtiens pas des résultats
identiques ?

J'ai déposé un fichier exemple sur :
http://cjoint.com/?AECtgX0rZ8X

Merci d'avance.
Michel






"MichD" a écrit dans le message de
news:irqqjt$97a$
Une autre possibilité sans macros :

Tu sélectionnes ta colonne de date

Sous les versions Excel d'avant 2007,
Barre des menus / données / convertir /
Étape 1 -> Largeur fixe
Étape 2 -> une ligne verticale doit apparaître immédiatement après la
date
et avant l'heure.
Si elle est bien là, tu passes à l'étape suivante
Étape 3 -> En utilisant la barre de titre "Standard" juste au-dessus des
dates, tu sélectionnes
la colonne représentant l'heure et tu appuies sur le
bouton radio
plus haut : "Colonne non distribuée"
Dans la même fenêtre, tu t'assures que la case
"Destination" est bien renseignée.
Et tu cliques sur le bouton terminé.
Toutes tes heures auront été effacées et remplacées par 28/05/11
00:00:00
Il ne te reste plus qu'à appliquer le format de cellule que tu désires
par
la commande
du menu contextuel : "Format de cellule"






MichD
--------------------------------------------




1 2 3