[Catégorie modifiée VB6 -> VBA] Modifier format dates VBA

Résolu
Vorens Messages postés 41 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 12 juin 2012 - 26 mai 2011 à 08:43
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 26 mai 2011 à 17:14
Bonjour,

Je souhaite additionner dans une boucle FOR un jours à une date.

Pour cela j'ai ma variable que je déclare en format date

DIM MaDate as Date

pour que mon programme fonctionne je dois avoir la variable sous cette forme : AAMMJJ (pas de . ou / entre les AA et MMM JJ)

Comment puis-je passer de la forme JJ/MM/AAAA à la forme AAMMJJ dans VBA ?

Merci de votre aide

Vorens

15 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 mai 2011 à 13:08
Hé Bé !
Regarde :
 Dim madatestring As String
  Dim madatedate As Date
  madatestring = "27/02/2008"
  madatedate = CDate(madatestring) + 3
  MsgBox madatedate

et ce sera toujours vfrai, année bissectile ou non

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
3
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
26 mai 2011 à 08:59
Bonjour,

Pour les opérations sur des dates, intéresse-toi aux fonctions DateAdd() et DateDiff().

Pour la récupérer sous une forme particulière, la fonction Format() fera le travail. Attention cette dernière renvoie une chaîne de caractères.


Calade
0
Vorens Messages postés 41 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 12 juin 2012
26 mai 2011 à 09:16
Re,

Merci pour la rapidité de la réponce, jamais deçu sur ce forum =)

Je vais lire les infos de la touche magique F1 sur la fonction DateAdd() qui me semble être celle dont j'ai besoin.

Si j'ai bien compris, la fonction Format nous passe les données en chine de caractère, donc au prochain passage de la boucle, il faut que;

1)je re transfort en format date classique
2)Passage par fonction DateAdd
3)passage par fonction Format
4)programme notmal
5)Recomence au point 1

Ou alors dateAdd accept les chaines de caractère ?
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
26 mai 2011 à 09:19
Je ne crois pas qu'il soit nécessaire de transformer sans arrêt ta date.

La fonction Format() ne te servira que pour l'affichage, mais pour tes calculs en boucle ne change pas de type, tu ralentirais ton appli.


Calade
0

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

Posez votre question
Vorens Messages postés 41 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 12 juin 2012
26 mai 2011 à 09:30
Re,

J'ai vu un exemple de code dans l'aide mais lorsque je le tape pour ma situation il me demande de mettre un signe = + une varaible donc sa donne.

'Passer au jours suivant_________________________________________________________________________________________________________


DateAdd("d", 1, "DateSelec") = DateSelec
Format("DateSelec", aammdd) = DateSelec



Next i


Dès lors j'ai un message d'incompatiblité de type sur la ligne DateAdd ("d...

Vous voyez ou j'ai fais de la Merdouille ?
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
26 mai 2011 à 09:33
Ce serait plutôt l'inverse:

DateSelec = DateAdd("d", 1, "DateSelec")


Calade
0
Vorens Messages postés 41 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 12 juin 2012
26 mai 2011 à 09:41
Re,

La fonction en marche pas encore, incompatibilité de type toujours sur la même ligne.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 mai 2011 à 11:38
Bonjour,
1)- il est bien clair que la variable à laquelle on doit rajouter 1/plusieurs jour(s) doit être typée en Date
2) - pour ajouter des unités en jours, nul même besoin de DateAdd (il suffit d'ajouter des unités) à la date concernée !


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
Vorens Messages postés 41 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 12 juin 2012
26 mai 2011 à 12:39
Re,

Etant donner que ma date est en format chaine de caractère car elle me sert à composer un path, il est pénible de faire moult changement de format afin d'additionner un jour.
J'ai donc magouillé pour changer les valeurs dans ma chaine de caractère comme le montre le code suivant. (Et le pire c'est que sa marche)


'Passer au jours suivant_________________________________________________________________________________________________________

'Déclaration de variable
jour = Left(Right(DateSelec, 2), 4)   'Jours actuel sorti de la chaine de caractère
jourFev = Février                     'Nombre de jours dans le mois de février

'Addition des jours pour janvier

If Mois 1 And jour 31 Then
DateSelec = DateSelec + 100
DateSelec = DateSelec - 31
End If

'Addition des jours pour février

If Mois 2 And jourFev 28 Then
DateSelec = DateSelec + 100
DateSelec = DateSelec - 28
ElseIf Mois 2 And jourFev 29 Then
DateSelec = DateSelec + 100
DateSelec = DateSelec - 29
End If

'Addition des jours pour Mars

If Mois 3 And jour 31 Then
DateSelec = DateSelec + 100
DateSelec = DateSelec - 31
End If


DateSelec = DateSelec + 1


Je vous remercie tout de même pour l'attention que vous avez porté à mon message. Bonne après midi à vous.
0
Vorens Messages postés 41 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 12 juin 2012
26 mai 2011 à 13:41
Effectivement vu comme sa

Je suis un newbie en VBA et je trouve des solutions de newbires

Pour les années bissextile j'ai enregistre leur nom pour les 100 prochaines années ( sa m'étonnerais qu'on use encore mon fichier dans 100 ans )

Je prend note de la solution variante pro et vais l'adapter à mon fichier.
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
26 mai 2011 à 15:56
Salut ucfoutu,

2) - pour ajouter des unités en jours, nul même besoin de DateAdd (il suffit d'ajouter des unités) à la date concernée !


je serais moins affirmatif que toi, j'ai déjà eu des problèmes en additionnant directement des jours à une date (spécialement quand il y a changement de mois et/ou d'année). D'utiliser la fonction DateAdd() règle tous les problèmes.


Calade
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 mai 2011 à 16:52
salou Calade,

Donne un exemple (avec date en type date, hein) où ça ne marche pas, pour voir


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
26 mai 2011 à 17:04
Salut,

Je serais bien en peine de retrouver le cas précis où j'ai eu ce problème et où cette fameuse fonction à régler le problème et peut-être qu'à l'époque j'avais mélangé deux choses, mais depuis ce temps j'utilise DataAdd() pour être tranquille.
C'est simplement ce que j'ai voulu dire.

Calade
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 mai 2011 à 17:11
Evidemment, que tu serais en peine de retrouver un tel cas ! Il n'existe tout simplement pas .
Ton erreur devait tout simplement être ailleurs
Explication.
Une date est stockée sous VB sous la forme d'un nombre réel, en jours (d'écart positif ou négatif par rapport à une date d'origine), tout simplement.




____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
26 mai 2011 à 17:14
Tu as peut-être raison, c'est assez loin tout ça.


Calade
0
Rejoignez-nous