Extraire jour, mois et année de la date du jour

Sebast

XLDnaute Impliqué
Bonjour à toutes et à tous,

j'ai besoin d'extraire (sous forme numérique) le jour, le mois et l'année de la date en cours mais ça ne marche que pour le jour. Pour mois et année, ça plante en me disant "Tableau attendu".
Pourtant, j'ai l'impression d'utiliser la bonne syntaxe (même quand je remplace now par date, ça plante).

Quelqu'un peut-il me dire où ça coince ?

Merci d'avance


Sub datum()
Dim Jour As Variant
Dim Mois As Variant
Dim Annee As Variant

Jour = Day(Now)
Mois = Month(Now)
Annee = Year(Now)

MsgBox "Le jour en cours est le " & Jour
MsgBox "Le mois en cours est " & Mois
MsgBox "L'année en cours est " & Annee

End Sub
 

vgendron

XLDnaute Barbatruc
Re : Extraire jour, mois et année de la date du jour

Bonjour,

Bizarre.. je viens de faire juste un copier coller de ton code.. et .. ca fonctionne..
as tu d'autres macros qui poseraient le problème.
car ici, je ne vois aucune déclaration ni utilisation de tableau..?

Salut Efgé,
pourquoi la déclaration Variant poserait pb chez lui et pas chez moi? y aurait il un lien avec une quelconque option excel activée ou pas?
 

Orodreth

XLDnaute Impliqué
Re : Extraire jour, mois et année de la date du jour

Bonjour,

Et pour la forme, il est préférable de ne manipuler que des chaines de caractères avec tout type d'affichage de textes.

Ce qui donne:
Code:
Sub datum()
    Dim Jour As Long
    Dim Mois As Long
    Dim Annee As Long

    Jour = Day(Date)
    Mois = Month(Date)
    Annee = Year(Date)

    MsgBox "Le jour en cours est le " & cstr(Jour)
    MsgBox "Le mois en cours est " & cstr(Mois)
    MsgBox "L'année en cours est " & cstr(Annee)

End Sub

Cordialement,
 

CBernardT

XLDnaute Barbatruc
Re : Extraire jour, mois et année de la date du jour

Bonjour,

La syntaxe est bonne.


La déclaration des variables peut être simplifiée :

Dim Jour As Byte, Mois As Byte, Annee As Integer

Si ce code plante, ce n'est pas lui qu'il faut incriminer. Peut-être une référence VBAProject absence :

- Visual Basic For Applications
- Microsoft Excel 12.0 Object Library
- Microsoft Office 12.0 Object Library
- OLE Automation
- Etc....
 

Efgé

XLDnaute Barbatruc
Re : Extraire jour, mois et année de la date du jour

Re Sebast, Bonjour vgendron, Bonjour Orodreth
@ vgendron:
Le type variant est souvent utilisé à mauvais escient.
On sait que l'on va retrouver du chiffre (Integer )
Mais comme j'ai lu ici ou là que integer était directement transformé en Long par VB zutant déclarer le bon type tout de suite, même si ce n'est- certainement pas la cause du problème d'origine.
Cordialement
 

Orodreth

XLDnaute Impliqué
Re : Extraire jour, mois et année de la date du jour

Re, bonjour Efgé, vgendron, CBernardT

@Efgé: comment ça Excel transforme automatiquement un integer en long ?
Moi, il m'a plutôt coller des baffes quand j'avais un integer qui dépassait sa valeur max, au lieu de s'auto-transformer en long.
Je vois pas trop ce que tu veux dire là :/

De plus, j'y pense maintenant, mais le type Integer est plus approprié que Long, vu les valeurs que renvoient forcément Day, Month, et Year.
Ca prend moins de place mémoire (je sais, broutille ...)

Ceci dit, je suis d'accord avec toi sur la mauvaise utilisation de Variant: dans la mesure du possible: EVITEZ.
Variant est aux variables simples ce que Object est aux variables objets: un conteneur générique qui peut tout avaler, et qui peut recracher n'importe comment.

Parfois, il n'y a pas le choix, et alors oui, il faut utiliser Variant ou Object. Mais si vous pouvez, évitez, vous vous simplifierez la vie en dégogage.
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Re : Extraire jour, mois et année de la date du jour

Bonsour®
attention Date est un mot réservé de VBA à ne pas utiliser comme nom de variable personnalisée
VB:
Sub datum()
Dim x As Long

 MsgBox "Le jour en cours est  :  " & Day(Date) _
 & Chr(10) & "Le mois en cours est : " & Month(Date) _
 & Chr(10) & "L'année en cours est : " & Year(Date), vbInformation, "Parametre = Date"
 
  MsgBox "Le jour en cours est  :  " & Day(Now) _
 & Chr(10) & "Le mois en cours est : " & Month(Now) _
 & Chr(10) & "L'année en cours est : " & Year(Now), vbInformation, "parametre = Now"
 
x = 39000 + Rnd() * 1000
  MsgBox "Le jour en cours est  :  " & Day(x) _
 & Chr(10) & "Le mois en cours est : " & Month(x) _
 & Chr(10) & "L'année en cours est : " & Year(x), vbInformation, "date aléatoire " & Format(x, "d mmmm yyyy")
End Sub
 
Dernière édition:

Sebast

XLDnaute Impliqué
Re : Extraire jour, mois et année de la date du jour

Bonjour Efgé, Vgendron, Orodreth, CBernardt et Modeste geedee,

merci beaucoup pour vos contributions.
Comme je pensais au début ne pas avoir sélectionné le bon format de variable et que ça pourrait être la raison du plantage, je me suis dit que (provisoirement, le temps d'isoler le problème) j'allais tout déclarer en Variant (avec ça, je ratisse large, même si c'est un peu bovin ...).

J'ai essayé vos différentes propositions mais je tombe invariablement sur "Erreur de compilation : tableau attendu".

Encore merci pour vos lumières
 

Sebast

XLDnaute Impliqué
Re : Extraire jour, mois et année de la date du jour

Bonjour à toutes et à tous,

désolé pour ce délai de réponse, je n'ai pas eu accès à mon ordi en fin de journée ...
vgendron : j'ai voulu à ta demande poster le fichier et pour cela, alléger la version que j'utilise et n'y laisser que le strict minimum. Et là, miracle, ça marche !
En fait, j'avais fait l'erreur de créer - parmi tous les sub() servant à mon appli - les variables Public suivantes : month et year.
Du coup, comme dans la sub datum() j'utilise month et year pour ce qu'ils sont (à savoir extraire le mois et l'année), j'imagine que c'est là la source du conflit ...
J'ai renommé mes variables en MyMonth et MyYear et l'affaire est réglée !

En fait, je n'avais pas compris tout de suite car l'extraction du jour fonctionnait [day(now)] mais rien d'étonnant car je n'avais pas crée de variable day.

Tout ça pour dire qu'il ne faut vraiment pas créer des variables portant des noms réservés ... quand j'avais créé ce bout de code - recyclé par la suite - je ne connaissais pas grand chose au VBA et ne soupçonnais pas les implications ultérieures.

Merci de m'avoir obligé à ouvrir les yeux
 

Discussions similaires

Réponses
5
Affichages
164

Statistiques des forums

Discussions
312 037
Messages
2 084 814
Membres
102 677
dernier inscrit
sergio2803