Pb date VBA format/replace

Fermé
Flo - 27 avril 2009 à 12:37
 moiQuoi - 27 mai 2014 à 19:34
Bonjour,

Il y a deja pas mal de sujets qui ont été postés sur le sujet, mais je ne m'en sors toujours pas !!
Mon problème :
Dans une table dl de SAP vers excel, j'ai une colonne (H) qui me donne des dates sous cette forme : jj.mm.aaaa. Excel considère ces dates comme des nombres au format standard.
Pour traiter ma table, je dois pouvoir remplacer ce format nombre standard avec des points en un nombre au format date avec des slash.

J'ai essayé un simple replace, mais du coup, certains sont considérés comme un nombre standard et d'autres comme une date :

' remplacer les points par des slashs dans la colonne H
l = 1
While Not IsEmpty(Cells(l, 8))
Cells(l, 8).Value = Replace(Cells(l, 8).Value, ".", "/")
l = l + 1
Wend

j'ai besoin de changer ce format car la colonne A devra contenir plusieurs info dont la date, qui sera une référence pour une rechercheV dans une autre feuille...
Et avec un simple "replace", ma seconde feuille ne reconait pas que c'est une date...et tout le reste du fichier part en sucette...les somme.si, les rechercheV...

En bonne bille de VBA que je suis, je prends toutes les idées !!
Merci !
A voir également:

6 réponses

pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
27 avril 2009 à 15:40
Il faut essayer cela :

Dim MaDate As Date
l = 2
While Not IsEmpty(Cells(l, 8))
    MaDate = DateValue(Replace(Cells(l, 8).Value, ".", "/"))
    Cells(l, 8).NumberFormat = "dd/mm/yyyy"
    Cells(l, 8).Value = MaDate
    l = l + 1
Wend
2
MerciiiiiiiiiiI!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
27 avril 2009 à 14:23
Bonjour,

Le problème doit être que VBA, quand il fait la convertion de texte à date, travaille en format de date américaine c'est à dire en MM/JJ/AAAA. D'ailleurs je suis prêt a parier que celles qui ne sont pas converties sont toutes les dates dont les deux premiers chiffres forment un nombre supérieur à 12 (il les laisse en texte car c'est une date invalide en format américain)
Je propose de modifier légérement le code de la manière suivante :

Dim MaDate As Date
l = 1
While Not IsEmpty(Cells(l, 8))
    MaDate = Replace(Cells(l, 8).Value, ".", "/")
    Cells(l, 8).NumberFormat = "dd/mm/yyyy"
    Cells(l, 8).Value = MaDate
    l = l + 1
Wend


Je pense que cela doit fonctionner

A+

0
Hum, non j'ai un message d'erreur d'incompatibilité de type 13...
Par contre, en tricotant j'ai essayé ca :

l = 1
While Not IsEmpty(Cells(l, 7))
Cells(l, 7).Value = Replace(Cells(l, 7).Value, ".", "/")
Cells(l, 7).NumberFormat = "dd/mm/yyyy"
Cells(l, 7).Value = MaDatea
l = l + 1
Wend

Toutes les valeurs de la colonne sont remplacées par 00/01/1900. Ce sont bien des valeurs au format date par contre...Et meme la valeur de la premiere cellule de la colonne qui contient "date", le titre de la colonne a été changée en 00/01/1900 !

Décidemment, novice en VBA un jour, novice en VBA touj...longtemps !
Une idée ?
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
27 avril 2009 à 15:29
Oui mais la c'est normal car si la variable MaDatea n'est pas initialisée cela donne 00/01/1900.
Pour ne pas toucher le titre de la colonne commencer à l=2
Au fait dans le test MaDate est bien déclarée et c'est MaDatea qui est utilisée ?

A+
0
Oui tu as raison pardon, le 00/01/1900 est normal dans ce cas.
Et pour le madatea, j'ai fait ca car je dois le faire sur 2 colonnes (G et H) donc deux variables madatea et madateb... :-( désolé pour le manque d'imagination !

Par contre, ton code ne fonctionne pas...il me surligne ceci meme en ayant défini au départ "madate as date" :
madate = Replace(Cells(l, 7).Value, ".", "/")

Voila pourquoi je voulais transformer ton code en :
l = 1
While Not IsEmpty(Cells(l, 7))
Cells(l, 7).Value = Replace(Cells(l, 7).Value, ".", "/")
Cells(l, 7).NumberFormat = "dd/mm/yyyy"
l = l + 1
Wend

Mais meme probleme que précédemment, les premiers chiffres jj inférieurs a 12 sont convertis sous format date puisque VBA pense que ce sont les mois, et ceux dont les premiers chiffres sont supérieurs a 12 sont conservés au format standard...
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
27 avril 2009 à 15:57
Il faut essayer la syntaxe de mon post précédent pour le forcer à convertir en date :

MaDate = DateValue(Replace(Cells(l, 8).Value, ".", "/"))

Dis moi le résultat...

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
:-)

Voila voila, ton code marche parfaitement !!

Toutes les dates sont au bon format !

Par contre, une petite derniere...Sais tu comment se fait-il qu'excel transforme une date en un nombre (qui a mon avis doit etre le Xe jour depuis 01/01/1900) ?
Parceque du coup, j'ai le bon format date dans ma table, mais mes réchercheV cherchent un nombre...
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
27 avril 2009 à 16:01
A super !
Oui c'est bien cela une date en format numérique donne un numéro d'odre depuis le 01/01/1900 mais le Recherchev doit chercher une date parmi des dates peu importe le format de présentation de la date.
0
Parceque...hummm longue histoire courte :

Mon pgrm insère une colonne A dans ma table, qui reprend des données dont cette date que nous venons de mettre au bon format.
Le cellule (A,1) contient donc par exemple ( ref1 & " " & ref2 & " " & date)
Dans une autre feuille, une somme si recherche et fais la somme si les critères sont respectés. Sauf que la date sous forme jj/mm/aaaa, il ne la trouve pas. Apparemment, il veut le format numérique.

Evidemment, je peux faire faire a mon pgrm d'ajouter dans une colonne vide les valeurs égales au format numérique de mes dates jj/mm/aaaa.
Mais bon...

En tout cas, merci beaucoup, une bonne épine du pied de retirée !
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
27 avril 2009 à 16:32
OK, si tu veux de l'aide pour le somme.si, n'hésites pas a mettre un morceau de fichier en ligne.
Je pense que c'est en effet encore un problème de type de données entre les textes, les dates et les numériques...

A+
0