Reconnaissance de date dans une extraction VBA
Résolu/Fermé
A voir également:
- Reconnaissance de date dans une extraction VBA
- Reconnaissance musique en ligne sans télécharger - Guide
- Mfg date - Forum PC portable
- Trouver une date de naissance gratuit - Forum Réseaux sociaux
- Reconnaissance facial en ligne - Guide
3 réponses
Bonjour stphn,
Fichier Excel 2007 : https://mon-partage.fr/f/pybQFIWS/
Ctrl e => affichage de 3 dates en anglais et en français
Alt F11 pour voir le code VBA, puis revenir sur Excel
Merci de me dire si ça te convient.
Cordialement
Fichier Excel 2007 : https://mon-partage.fr/f/pybQFIWS/
Ctrl e => affichage de 3 dates en anglais et en français
Alt F11 pour voir le code VBA, puis revenir sur Excel
Merci de me dire si ça te convient.
Cordialement
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
1 août 2017 à 09:32
1 août 2017 à 09:32
Bonjour le fil, bonjour le forum,
Une autre proposition VBA qui considère que la date extraite est en A1 (à adapter) et renvoie en A2 (à adapter) la date en français au format que tu veux (à adapter) reconnue comme date par Excel :
Une autre proposition VBA qui considère que la date extraite est en A1 (à adapter) et renvoie en A2 (à adapter) la date en français au format que tu veux (à adapter) reconnue comme date par Excel :
Sub Macro1() Dim MA() As Variant 'déclare la variable MA (Mois Anglais) Dim AN As Long 'déclare la variable AN (ANnée) Dim MO As String 'déclare la variable MO (MOis) Dim JO As Byte 'déclare la variable JO (JOur) Dim D As Long 'déclare la variable D (Date) MA = Array("JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER") 'définit le tableau MA 'voir l'aide sur la fonction SPLIT AN = CLng(Split(Range("A1").Value, ",")(2)) 'Crée un groupe de 3 (de 0 à 2) mots séparés par la virgule et récupère le troisième groupe (2) = [l'année AN] converti en entier Long 'du second groupe de 3 mots séparés par la virgule = ["espace", le mois et le jour], sans l'espace devant (avec TRIM), 'crée un goupe de 2 mots séparés par une espace et récupère le premier (0) = [le mois en lettre] MO = Split(Trim(Split(Range("A1").Value, ",")(1)), " ")(0) 'du second groupe de 3 mots séparés par la virgule = ["espace", le mois et le jour], sans l'espace devant (avec TRIM), 'crée un goupe de 2 mots séparés par une espace et récupère le second (1) = [le jour] converti en en entier Byte JO = CByte(Split(Trim(Split(Range("A1").Value, ",")(1)), " ")(1)) For I = 0 To 11 'boucle sur tous les mois du tableau MA If UCase(MO) = MA(I) Then Exit For 'si le mois MO (converti en majuscules) est égal au mois de MA, sort de la boucle Next I 'prochain mois de la boucle D = DateSerial(AN, I + 1, JO) 'définit la date D en entier long Range("A2") = D 'renvoie la date dans A1 (à adapter à ton cas) Range("A2").NumberFormat = "dd/mm/yyyy" 'format de date de la cellule A2 (tu choisiras le format que tu préfères...) End Sub
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
>
stphn
1 août 2017 à 13:37
1 août 2017 à 13:37
Re,
Non, non ! ça renvoie bien 04/07/2017. Voir fichier exemple : https://www.cjoint.com/c/GHblKUp1zWc
Non, non ! ça renvoie bien 04/07/2017. Voir fichier exemple : https://www.cjoint.com/c/GHblKUp1zWc
Je suis vraiment étonné. En mode débug, j'ai bien la date qui s'affiche proprement dans la fonction. Même plus, beaucoup de dates s'affichent bien (toutes celles du mois de juin par exemple), mais les premières du mois de juillet ne s'affichent pas comme annoncé dans le débug, mais en version "américaine" : 07/04/2017. Sauf que mon fichier les lit à la française : 7 avril 2017.
Il en va de même pour les dates de début aout (en réalité, toutes celles qui sont en dessous du 12e du mois, où le jour est mal interprété).
Le problème vient peut être de ma transformation en fonction ? Auquel cas, je ne vois pas bien où :
Il en va de même pour les dates de début aout (en réalité, toutes celles qui sont en dessous du 12e du mois, où le jour est mal interprété).
Le problème vient peut être de ma transformation en fonction ? Auquel cas, je ne vois pas bien où :
Function FormatDate(chn As String) As Date Dim MA() As Variant 'déclare la variable MA (Mois Anglais) Dim AN As Long 'déclare la variable AN (ANnée) Dim MO As String 'déclare la variable MO (MOis) Dim JO As Byte 'déclare la variable JO (JOur) Dim D As Long 'déclare la variable D (Date) Dim I As Byte 'déclare la variable incrémentale MA = Array("JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER") 'définit le tableau MA 'voir l'aide sur la fonction SPLIT AN = CLng(Split(chn, ",")(2)) 'Crée un groupe de 3 (de 0 à 2) mots séparés par la virgule et récupère le troisième groupe (2) = [l'année AN] converti en entier Long 'du second groupe de 3 mots séparés par la virgule = ["espace", le mois et le jour], sans l'espace devant (avec TRIM), 'crée un goupe de 2 mots séparés par une espace et récupère le premier (0) = [le mois en lettre] MO = Split(Trim(Split(chn, ",")(1)), " ")(0) 'du second groupe de 3 mots séparés par la virgule = ["espace", le mois et le jour], sans l'espace devant (avec TRIM), 'crée un goupe de 2 mots séparés par une espace et récupère le second (1) = [le jour] converti en en entier Byte JO = CByte(Split(Trim(Split(chn, ",")(1)), " ")(1)) For I = 0 To 11 'boucle sur tous les mois du tableau MA If UCase(MO) = MA(I) Then Exit For 'si le mois MO (converti en majuscules) est égal au mois de MA, sort de la boucle Next I 'prochain mois de la boucle D = DateSerial(AN, I + 1, JO) 'définit la date D en entier long FormatDate = Format(D, "DD/MM/YYYY\") End Function
yg_be
Messages postés
23525
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
13 avril 2025
1 577
>
stphn
11 août 2017 à 09:54
11 août 2017 à 09:54
je pense que la fin de la fonction n'est pas correcte, la dernière ligne (avant
Je suggère de supprimer la variable D et de faire:
end function) cause le soucis que tu observes, et est inutile.
Je suggère de supprimer la variable D et de faire:
FormatDate = DateSerial(AN, I + 1, JO) 'définit la date en type date
J'ai essayé plusieurs corrections, en condensant effectivement cette dernière ligne, mais aussi en passant les différents éléments en integer (comme stipulé dans la définition de la fonction).
Là où je n'arrive pas à comprendre le problème, c'est qu'en plaçant mes points d'arrêt, je vois bien que ce sont les bonnes informations qui sont remontées à chaque fois. Seulement, les 12 premiers jours du mois inversent jour et mois (et sont lu dans le mauvais sens par excel).
Là où je n'arrive pas à comprendre le problème, c'est qu'en plaçant mes points d'arrêt, je vois bien que ce sont les bonnes informations qui sont remontées à chaque fois. Seulement, les 12 premiers jours du mois inversent jour et mois (et sont lu dans le mauvais sens par excel).
yg_be
Messages postés
23525
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
13 avril 2025
Ambassadeur
1 577
Modifié le 29 juil. 2017 à 13:40
Modifié le 29 juil. 2017 à 13:40
bonjour, moi je ferais ainsi (en VBA):
- supprimer la virgule et ce qui précède la virgule
- remplacer le nom du mois par son équivalent en français
- appliquer la fonction cdate au résultat, ou laisser Excel le traiter comme une date
- supprimer la virgule et ce qui précède la virgule
- remplacer le nom du mois par son équivalent en français
- appliquer la fonction cdate au résultat, ou laisser Excel le traiter comme une date
Modifié le 31 juil. 2017 à 19:53
EDIT :
J'ai corrigé mon extraction, qui avait un caractère en trop. du coup maintenant, j'ai l'information écrite en français... Mais toujours pas reconnu par excel comme un format date, et j'ai des dates incorrectes (le projet a commencé en juin et j'ai des dates en janvier). Est ce que ça peut être du au p1 qui est utilisé 2 fois pour deux choses différentes dans le script ?
EDIT 2 :
Il se passe un truc bizarre dans la dernière commande de la fonction (Mid$(chn, 1, 1) = Chr$(Asc(chn) - 32): DateEN2FR = chn) car jusque là, tout va bien (ou presque, mais j'y reviens après). La sortie que j'ai se fait avec un signe carré : 7/06/2017 au lieu de 17/06/2017 (j'ai modifié le format de sortie).
L'autre truc étrange, c'est que dans l'extraction, la valeur de jour est de "17,". Ce qui est une drôle de valeur, non ?
Modifié le 31 juil. 2017 à 22:38
Fichier Excel 2007 modifié : https://mon-partage.fr/f/Ve6DOpBw/
Ctrl e => affichage de 3 dates anglaises, sous forme jj/mm/aaaa
Le retour de la fonction DateEN2FR() est de type Date ; tu peux donc
faire un calcul dessus, ou l'afficher facilement avec le format que tu
préfères ; par exemple, dans une cellule au format jjjj j mmmm aaaa
ça affichera : Samedi 17 juin 2017 (pour "Saturday, June 17, 2017") ;
avec VBA, le même format est "dddd d mmmm yyyy".
Merci de me donner ton avis.
1 août 2017 à 12:49
Je pense que le problème vient du fait que les date à un chiffre ne sont pas en 0X mais en X (dans cet exemple : pas en 04 mais en 4). Le reste des dates est dans le bon format par contre.
1 août 2017 à 13:42
Copie d'écran : https://mon-partage.fr/f/Uo58tt3C/
J'ai essayé ta date : "Tuesday, July 4, 2017" ; en laissant telle quelle
la fonction DateEN2FR(), ça retourne bien : 04/07/2017.
Fichier Excel 2007 modifié : https://mon-partage.fr/f/elq7tPNR/
J'ai modifié seulement la fin de la sub Essai(), pour le 3ème exemple :
À te lire.