Manipulation de date
Manipulation de date.
Bonjour à tous,
J'importe avec excel des pdf. par code VBA je corrige les erreurs d'importation et je met en forme (grâce à votre aide). Mais pour les date je ne trouve pas la solution
Dans le PDF les dates sont sous la forme pare exemple : "02.12"
L'importation du PDF me renvoie pour ces dates:
soit : "02.12" considéré comme du texte par excel.
ou bien sans raison apparentes
soit : "02/12/2025" considéré comme une date par excel
J'aimerai, pour le cas "02.12", le transformer en une date sous la forme jj/mm/aaaa en choisissant l'année qui n'est pas toujours l'année en cours.
pour le cas "02/12/2025" je voudrai pouvoir changer l'année.
Merci de me lire
paterbleutch
Bonjour,
Il me semble que tu as ta réponse ici non https://forum.excel-pratique.com/excel/changer-l-annee-d-un-date-par-macro-198934 ?
C'est un autre de tes sujets où tu poses cette même question (ou a peu de chose près) et tu disais que nos réponses te convenaient .....
Alex020181, merci pour ta réponse
Effectivement c'était pour une date reconnue par excel
Par exemple : si la date affichée est 02/04/2025 en A1 . je peux en B1 écrire =date( y ;mois(A1);jour(A1) où y = 2024 : Ce qui me permet de changer l'année comme cela m'était indiqué dans ma précédente demande.
Mais pour : "02.12", qui n'est pas reconnu comme une date par excel il faudrait que je puisse extraire le "02" de "02.12" pour utiliser la formule ci-dessus en utilisant une autre variable pour le mois et je ne sais pas faire cette extraction.
Les fonctions Gauche() et Droite() te permettent d'isoler un certain nombre de caractères à partir de l'extrémité gauche ou droite d'une valeur initiale.
Si la partie que tu veux isoler n'est pas une des extrémités tu as la fonction Stxt() qui te permet d'isoler une partie d'un texte initiale en lui indiquant le numéro de caractère dans le texte initial où se trouve ta chaine à isoler.
Ce qui te donne.
Tu peux aussi mélanger et prendre Gauche() pour le jour et Stxt() pour le mois (ou inversement) dans ta formule globale pour info.
Bon après il y a d'autres solutions si la chaine que tu veux extraire est au milieu mais que tu ne connais pas forcément le nombre de caractères avant ou après. Il y a plusieurs façons mais ça c'est autre chose et te mettre ici serait trop long et je crois, vu ta demande, que tes chaines à extraire sont toujours en début et en fin donc on est bon.
Alex020181, merci pour ta réponse, c'est si simple.
Avec cette solution je devrai tout simplement résoudre mon problème avec ces indications et du code.
Sauf que mon code ne fonctionne pas
Voila ce que j'ai écrit :
Dim datdat as date
dim x as integer, y as integer
datdat = Date( x ; y ; left(ActiveCell.Value;2)) la formule ne plait pas à excel VBA
Normal.
Date() est une fonction réservée VBA pour retourner la date du jour. Tu ne peux pas lui inclure de paramètres.
Pour ton second point tu veux enregistrer dans ta variable datdat une de ces fameuses date reconstituée si je comprends bien. Dans ce cas tu peux utiliser la fonction CDate() ou DateValue() ou DateSerial().
Je te conseille d'utiliser DateSerial(). Tu verras avec le code ci-dessous que c'est la plus simple d'utilisation.
Attention. Dans tous les cas Excel te plantera si tu essaies de créer une date farfelues (50/12/2024 par exemple).
Voici un exemple d'utilisation pour les 3 cas. D'abord la version simple standard pour te montrer puis appliquées à ta demande. Choisis l'une ou l'autre de ces 3 et supprime les autres (tu peux aussi supprimer les exemples standards de chaque fonction).
Nota : tu remarqueras que les séparateurs des arguments en VBA sont les "," et pas les ";" qui sont les séparateurs des arguments pour les formules.
Plus d'infos
- https://learn.microsoft.com/fr-fr/office/vba/language/concepts/getting-started/type-conversion-funct...
- https://support.microsoft.com/fr-fr/office/dateval-dateval-fonction-df8b07d4-7761-4a93-bc33-b7471bbf...
- https://support.microsoft.com/fr-fr/topic/datevalue-fonction-03878f08-b0db-42df-8a0c-279939637c6f
- https://support.microsoft.com/fr-fr/topic/dateserial-fonction-a0128476-83a0-407c-831a-93f2b046f503
- https://learn.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/dateserial-funct...
Si par contre ton but est d'insérer une formule dans une cellule alors c'est une autre syntaxe.
Alex020181, Merci beaucoup pour ta réponse elle est complète et elle répond parfaitement à ma demande. je ne l'ai pas encore essayé mais je suis sur que cela va fonctionner parfaitement
