Problème de mise en forme de dates sous VBA

Bonjour,

Je souhaite automatiser la mise en forme d’une feuille de calcul qui est le résultat d’une extraction de données en provenance de SAP.

Les dates extraites sont sous la forme « JJ.MM.AAAA ».

Ce format n’est pas reconnu comme une date par Excel. Manuellement, je sélectionne la colonne et j’effectue un remplacement dans toutes les cellules sélectionnées : « . » par « / ».

Cette méthode n’est peut-être pas très orthodoxe, mais elle me permet d’arriver au résultat souhaité.

Comme cette feuille nécessite de nombreuses opérations de mises en forme, j’ai souhaité automatiser ce travail récurrent en ayant recours à une macro.

Lorsque j’enregistre la macro, tout se passe bien.

Par contre, lorsque j’utilise cette macro enregistrée, je découvre que des cellules ne sont pas interprétées comme des champs « date ». Elle semble correspondre à des champs « texte ». Si je me positionne sur les cellules à problème, que je valide manuellement la date, j’obtiens une date. Mais je ne peux tout de même pas valider manuellement chaque cellule à problème.

Ces cellules à problèmes s’identifient facilement : les dates reconnues comme des dates sont justifiées à droite, les autres sont justifiées à gauche.

D’où vient le problème ?

Faut-il ajouter des instructions au code VBA ?

Ou bien faut-il utiliser un autre code pour arriver à mes fins ?

D’avance, merci pour vos lumières.

Arnaud.

Bonjour,

D'abord c'est un grand classique et c'est tant mieux ! comme excel interprète parfois différemment ce qu'on lui importe, la plupart des logiciels produisent des reports avec des dates texte, soit en mettant des points à la place de la ponctuation habituelle des dates comme ici, doit en entourant les dates d'un espace.

En général, je fais du SUBSTITUE et du CNUM par des formules. Cela doit être la même chose en VBA.

Ma question est donc : est-ce que les dates qui restent en texte ont la bonne structure de type JJ/MM/AAAA; si OUI alors dans le code VBA rajoute soit un "*1" soit une transformation en valeur après le REPLACE(___,".","/")

On peut ensuite faire appel à plus complexe qui est de prendre des portions (MID) du texte afin de recréer une date avec chacun des morceaux.

Bonjour.

Merci pour cette réponse.

1. Par contre, je ne comprends pas où je dois placer le "*1".

Le code issu de ma macro enregistrée est le suivant :

Columns("J:J").Select

Selection.Replace What:=".", Replacement:="/", LookAt:=xlPart, _

SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _

ReplaceFormat:=False

2. L'alternative serait une transformation en valeur des cellules de la colonne.

Mais alors, quel est le code, STP ?

D'avance, merci.

Bonsoir,

Il faut que tu apprennes d'abord que lorsqu'on ne met pas de fichier modèle, la plupart du temps on piétine...

Ensuite que l'enregistrement de macro est le bon moyen de fournir une mauvaise réponse à de nombreux problèmes (même quand ça marche).

Alors mets un fichier si tu veux faire avancer...

Dans ton cas, la première chose à vérifier est que tes cellules ne soient pas en format Texte...

Ensuite, il faudra réécrire la macro et tester pour assurer qu'elle fonctionne dans tous les cas rencontrés.

Cordialement.

+1

Question générale, réponse générale ... mets un bout de fichier ce sera plus efficace.

Bonsoir,

Ci-joint un exemple du fichier.

Il suffit d'exécuter la macro enregistrée et le problème que je décris sera plus explicite.

Enfin, j'espère.

D'avance, merci.

Bonjour,

A tester sur ton fichier réel :

Sub FormatDates()
    Dim c As Range, d As Date
    For Each c In Selection.Cells
        d = Replace(c.Value, ".", "/")
        c.Value = d
    Next c
End Sub

L'utilisation de Selection implique que tu sélectionnes la plage à convertir avant de lancer la macro, ce qui permet de l'utiliser n'importe où tu as ce type de conversion à faire. Sinon, on peut remplacer par la définition de plages.

Cordialement.

Rechercher des sujets similaires à "probleme mise forme dates vba"