Convertir une date en chaîne de caractère

Résolu/Fermé
lilou - 7 août 2015 à 11:05
liloutte5
Messages postés
7
Date d'inscription
vendredi 7 août 2015
Statut
Membre
Dernière intervention
7 août 2015
- 7 août 2015 à 16:22
Bonjour,

Je voudrai produire sur VBA une macro qui permet de comparer deux dates, le problème est que d'un côté j'ai une date sous forme de chaîne de caractère qui ne peut pas être transformée en format date lorsque je change le format de nombre sur Excel (la date reste telle qu'elle : "Mercredi 2 Janvier 2013", quoi que je sélectionne comme format), et de l'autre une date en format 02/01/2013. Je voudrais donc changer "02/01/2013" en une chaîne de caractère afin de la comparer avec la première.

Est-ce que quelqu'un a une idée svp ? Merci =)

2 réponses

pijaku
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 695
7 août 2015 à 11:15
Bonjour,

Peut être en passant par Format :
Sub test()
Dim maDate As Date, strDate As String
maDate = CDate("02/01/2013") 'Ici on a bien une date au format date
MsgBox maDate
strDate = Format(maDate, "dddd dd mmmm yyyy") 'Ici on obtient un String
MsgBox strDate
End Sub

0
Merci, ca marche ! La date est bien transformée en chaîne de caractère, mais je dois avoir un autre problème car quand je compare les deux chaînes de caractères, la fonction StrComp par exemple qui compare les deux chaînes me renvoie qu'elle ne sont pas identiques ... je voulais donc essayer en supprimant la casse, en enlevant les espaces, etc. tout ce qui pourrait faire en sorte que les deux chaînes sont différentes ... au niveau de la mise en forme aussi. Mais je ne trouve pas de fonction qui permettrait de mettre les deux cases au même format ...
0
J'ai essayé avec lcase() pour tout mettre en minuscule, mais ca ne marche pas quand même, il me faudrait un outil qui permet de tout mettre au même format ...
0
NHenry
Messages postés
14927
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 mai 2022
319
7 août 2015 à 12:37
Peux-tu montrer le contenu de ces 2 chaines ?
0
liloutte5
Messages postés
7
Date d'inscription
vendredi 7 août 2015
Statut
Membre
Dernière intervention
7 août 2015

7 août 2015 à 13:48
La première image est la feuille 1 de mon tableur Excel, avec les dates sur l'année (sans dimanches et jours feriés) et la feuille 2 reprend tous les jours confondus. Je veux donc tester si chaque ligne de la feuille 1 correspond aux lignes de la feuille 2, et si c'est le cas, réaliser une certaine condition, si ca n'est pas le cas, en réaliser une autre. Mais la transformation des dates de la feuille 2 avec la fonction Format (changer la forme 02/01/2013 en mercredi 2 janvier 2013) ne me permet pas de la comparer avec les cases de la feuille 1 qui sont elles déjà en chaîne de caractère mercredi 2 janvier 2013
0
liloutte5
Messages postés
7
Date d'inscription
vendredi 7 août 2015
Statut
Membre
Dernière intervention
7 août 2015

7 août 2015 à 13:48
Voila les images


0
liloutte5
Messages postés
7
Date d'inscription
vendredi 7 août 2015
Statut
Membre
Dernière intervention
7 août 2015

7 août 2015 à 13:55
Sub test()

Dim maDate As Date, strDate, stock, compare As String

maDate = CDate(Worksheets("Feuil2").Cells(3, 1))

strDate = Format(maDate, "dddd d mmmm yyyy")
stock = LCase(Worksheets("Feuil1").Cells(2, 1))

Worksheets("Feuil1").Cells(1, 4) = strDate
Worksheets("Feuil1").Cells(1, 5) = stock


End Sub


J'ai écris cette macro grâce aux conseils de pijaku, j'ai donc mis les deux chaînes à comparer dans la cellule(1,4) et la cellule(1,5), ca me donne bien le format "mercredi 2 janvier 2013" pour les deux, mais impossible de les comparer ...
0
pijaku
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 695
7 août 2015 à 14:46
Ben, en fait, crois tu vraiment que vendredi 2 Janvier 2013 soit égale à vendredi 02 Janvier 2013?
0
liloutte5
Messages postés
7
Date d'inscription
vendredi 7 août 2015
Statut
Membre
Dernière intervention
7 août 2015

7 août 2015 à 14:57
non, d'ailleurs c'est bien pour ca que j'ai tout transformé pour que ce soit "2" et non pas "02"

après plusieurs manipulations je vois que la chaîne de caractère dans ma feuille 1 n'en est en fait pas une, puisqu'en utilisant la fonction replace pour remplacer les espaces par "", la fonction marche pour les dates de la feuille 2 mais pas pour la feuille 1 ...

C'est à dire que quand je fais :

Worksheets("Feuil1").Cells(1, 6) = Replace(Worksheets("Feuil1").Cells(1, 4), " ", "")
Worksheets("Feuil1").Cells(1, 7) = Replace(Worksheets("Feuil1").Cells(1, 5), " ", "")

Avec cells(1,4) contenant le résultat de la fonction format (donc reporte les dates de la feuille 2 en toute lettre)
cells(1,5) contenant la soit disant chaîne de caractère de la feuille 1
cells(1,6) m'affiche alors mercredi2janvier2013
cells(1,7) m'affiche mercredi 2 janvier 2013

la fonction replace n'a donc pas marché avec la cellule qui reprend les dates de la feuille 1 ... comme si excel ne voulait pas comprendre que c'est bien une chaîne de caractère ...
0
pijaku
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 695 > liloutte5
Messages postés
7
Date d'inscription
vendredi 7 août 2015
Statut
Membre
Dernière intervention
7 août 2015

7 août 2015 à 15:14
Maintenant, sans le classeur concerné il va être impossible d'aller plus loin.
Utilise http://cjoint pour nous le transmettre ici.
0
pijaku
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 695
7 août 2015 à 15:15
0