Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA: Codification d'une date!

4 réponses
Avatar
Kyvu
Bonjour =E0 tous,

J'aimerai, en VBA, codifier une date donn=E9e.

Par exemple, j'ai en A1 une date: 28/08/2003. Ce qui nous=20
fait...

Le 28 ao=FBt tombe un jeudi, c'est le quatri=E8me jour de la=20
semaine.

Le 28 ao=FBt tombe dans la trente-cinqui=E8me semaine de=20
l'ann=E9e.=20

Nous sommes en 2003.

Ce qui nous donne la codification suivante: 43503.

Voil=E0 ce que je voudrai automatiser par macro. Pour des=20
raisons techniques, je ne dois en aucun cas utiliser une=20
feuille de calcul.

Quelqu'un a-t-il une id=E9e?

Merci d'avance pour votre aide.

@micalement.



Kyvu On Line!

4 réponses

Avatar
Jean-Paul Viel
Bonjour,



Cette procédure va coder la date de la cellule active :



Sub CodeDate()

Dim dtIn As Date

dtIn = ActiveCell.Value

Range(ActiveCell.Address).Value = Trim(Str(Weekday(dtIn))) +
Trim(Str(Day(dtIn))) + Right(Str(Year(dtIn)), 2)

Selection.NumberFormat = "General"

End Sub




--
JP

http://www.solutionsvba.com


"Kyvu" wrote in message
news:0ca101c36e3e$9c911f50$
Bonjour à tous,

J'aimerai, en VBA, codifier une date donnée.

Par exemple, j'ai en A1 une date: 28/08/2003. Ce qui nous
fait...

Le 28 août tombe un jeudi, c'est le quatrième jour de la
semaine.

Le 28 août tombe dans la trente-cinquième semaine de
l'année.

Nous sommes en 2003.

Ce qui nous donne la codification suivante: 43503.

Voilà ce que je voudrai automatiser par macro. Pour des
raisons techniques, je ne dois en aucun cas utiliser une
feuille de calcul.

Quelqu'un a-t-il une idée?

Merci d'avance pour votre aide.

@micalement.



Kyvu On Line!
Avatar
Pierre CFI
bonjour
un début de réponse
Sub nn()
Debug.Print Format(#8/28/2003#, "w ww yy", vbMonday)
End Sub
regarde l'aide à Format et n'oublie pas qu'en vb le format des dates est US
(mm/dd/yyyy)

--
Pierre CFI
Microsoft MVP Access

Pour mieux utiliser microsoft.public.fr.access...
http://users.skynet.be/mpfa/charte.htm

"Kyvu" a écrit dans le message de news:
0ca101c36e3e$9c911f50$
Bonjour à tous,

J'aimerai, en VBA, codifier une date donnée.

Par exemple, j'ai en A1 une date: 28/08/2003. Ce qui nous
fait...

Le 28 août tombe un jeudi, c'est le quatrième jour de la
semaine.

Le 28 août tombe dans la trente-cinquième semaine de
l'année.

Nous sommes en 2003.

Ce qui nous donne la codification suivante: 43503.

Voilà ce que je voudrai automatiser par macro. Pour des
raisons techniques, je ne dois en aucun cas utiliser une
feuille de calcul.

Quelqu'un a-t-il une idée?

Merci d'avance pour votre aide.

@micalement.



Kyvu On Line!
Avatar
Daniel.M
Bonjour,

Une autre, pour le fun:

Sub Test()
Debug.Print BuildStrDate(Range("A1"))
End Sub

Public Function BuildStrDate(d As Date) As String
BuildStrDate = Format(Format(d, "wwyy", vbMonday, _
vbFirstFourDays), "0000")
BuildStrDate = Weekday(d, vbMonday) & BuildStrDate
End Function

Salutations,

Daniel M.

"Kyvu" wrote in message
news:0ca101c36e3e$9c911f50$
Bonjour à tous,

J'aimerai, en VBA, codifier une date donnée.

Par exemple, j'ai en A1 une date: 28/08/2003. Ce qui nous
fait...

Le 28 août tombe un jeudi, c'est le quatrième jour de la
semaine.

Le 28 août tombe dans la trente-cinquième semaine de
l'année.

Nous sommes en 2003.

Ce qui nous donne la codification suivante: 43503.

Voilà ce que je voudrai automatiser par macro. Pour des
raisons techniques, je ne dois en aucun cas utiliser une
feuille de calcul.

Quelqu'un a-t-il une idée?

Merci d'avance pour votre aide.

@micalement.



Kyvu On Line!
Avatar
Michel Gaboly
--------------2B15EAF97585A2EB6735657E
Content-Type: text/plain; charset=iso-8859-1; x-mac-type="54455854"; x-mac-creator="4D4F5353"
Content-Transfer-Encoding: 8bit

Bonjour,

Voici une solution simple :

Sub CodifDate()
Dim d As Date, PremierJanvier As Date, j As String, s As Integer, a As String
' Un controle est à prévoir vour vérifier qu'il s'agit bien d'une date
d = ActiveCell
j = WeekDay(d, 2)
PremierJanvier = DateSerial(Year(d), 1, 1)
s = Int(d - PremierJanvier) / 7 + 1
a = Year(d)
MsgBox j & s & Format(a Mod 100, "00")
End Sub

Elle est à affiner pour le numéro de semaine : en effet, on peut considérer qu'une
semaine commence nécessairement un lundi ou que la première semaine de l'année
est celle qui commence le 1er janvier.

Il existe également une norme ISO qui considère que la première semaine est celle
qui comprend au moins quatre jours de la nouvelle année.


Les différentes options possibles peuvent être obtenues avec la fonction "Format",
dont voici un extrait de l'aide (Excel 98).


L'argument firstweekofyear peut prendre les valeurs suivantes :

Constante Valeur Description

vbUseSystem 0 Utilise le paramètre NLS API.
vbFirstJan1 1 Commence par la semaine qui comprend le 1er janvier (valeur par défaut).
vbFirstFourDays 2 Commence par la première semaine qui comprend au moins quatre jours de la nouvelle année.
vbFirstFullWeek 3 Commence par la première semaine complète de l'année.


Le code devient alors :

Sub CodifDate2()
Dim d As Date, j As String, a As String
' Un controle est à prévoir vour vérifier qu'il s'agit bien d'une date
d = ActiveCell
j = WeekDay(d, 2)
a = Year(d)
MsgBox j & Format(ActiveCell, "ww", vbMonday) & Format(a Mod 100, "00")
End Sub

ou (norme ISO)

Sub CodifDate3()
Dim d As Date, j As String, a As String
' Un controle est à prévoir vour vérifier qu'il s'agit bien d'une date
d = ActiveCell
j = WeekDay(d, 2)
a = Year(d)
MsgBox j & Format(ActiveCell, "ww", vbMonday, vbFirstFourDays) & Format(a Mod 100, "00")
End Sub

Il est possible de se passer des variables :

Sub CodiDdate4()
' Un controle est à prévoir vour vérifier qu'il s'agit bien d'une date
MsgBox WeekDay(ActiveCell, 2) & Format(ActiveCell, "ww", vbMonday, vbFirstFourDays) & Format(Year(ActiveCell) Mod 100, "00")
End Sub

--------------2B15EAF97585A2EB6735657E
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
Bonjour,
<p>Voici une solution simple :
<p>Sub CodifDate()
<br>Dim d As Date, PremierJanvier As Date, j As String, s As Integer, a
As String
<br>' Un controle est &agrave; pr&eacute;voir vour v&eacute;rifier qu'il
s'agit bien d'une date
<br>&nbsp;&nbsp;&nbsp; d = ActiveCell
<br>&nbsp;&nbsp;&nbsp; j = WeekDay(d, 2)
<br>&nbsp;&nbsp;&nbsp; PremierJanvier = DateSerial(Year(d), 1, 1)
<br>&nbsp;&nbsp;&nbsp; s = Int(d - PremierJanvier) / 7 + 1
<br>&nbsp;&nbsp;&nbsp; a = Year(d)
<br>&nbsp;&nbsp;&nbsp; MsgBox j &amp; s &amp; Format(a Mod 100, "00")
<br>End Sub
<p>Elle est &agrave; affiner pour le num&eacute;ro de semaine : en effet,
on peut consid&eacute;rer qu'une
<br>semaine commence n&eacute;cessairement un lundi ou que la premi&egrave;re
semaine de l'ann&eacute;e
<br>est celle qui commence le 1er janvier.
<p>Il existe &eacute;galement une norme ISO qui consid&egrave;re que la
premi&egrave;re semaine est celle
<br>qui comprend au moins quatre jours de la nouvelle ann&eacute;e.
<br>&nbsp;
<p>Les diff&eacute;rentes options possibles peuvent &ecirc;tre obtenues
avec la fonction "Format",
<br>dont voici un extrait de l'aide (Excel 98).
<br>&nbsp;
<blockquote>L'argument firstweekofyear peut prendre les valeurs suivantes
:
<p>Constante Valeur Description
<p>vbUseSystem 0 Utilise le param&egrave;tre NLS API.
<br>vbFirstJan1 1 Commence par la semaine qui comprend le 1er janvier (valeur
par d&eacute;faut).
<br>vbFirstFourDays 2 Commence par la premi&egrave;re semaine qui comprend
au moins quatre jours de la nouvelle ann&eacute;e.
<br>vbFirstFullWeek 3 Commence par la premi&egrave;re semaine compl&egrave;te
de l'ann&eacute;e.</blockquote>
&nbsp;
<br>Le code devient alors :
<p>Sub CodifDate2()
<br>Dim d As Date, j As String, a As String
<br>' Un controle est &agrave; pr&eacute;voir vour v&eacute;rifier qu'il
s'agit bien d'une date
<br>&nbsp;&nbsp;&nbsp; d = ActiveCell
<br>&nbsp;&nbsp;&nbsp; j = WeekDay(d, 2)
<br>&nbsp;&nbsp;&nbsp; a = Year(d)
<br>&nbsp;&nbsp;&nbsp; MsgBox j &amp; Format(ActiveCell, "ww", vbMonday)
&amp; Format(a Mod 100, "00")
<br>End Sub
<p>ou (norme ISO)
<p>Sub CodifDate3()
<br>Dim d As Date, j As String, a As String
<br>' Un controle est &agrave; pr&eacute;voir vour v&eacute;rifier qu'il
s'agit bien d'une date
<br>&nbsp;&nbsp;&nbsp; d = ActiveCell
<br>&nbsp;&nbsp;&nbsp; j = WeekDay(d, 2)
<br>&nbsp;&nbsp;&nbsp; a = Year(d)
<br>&nbsp;&nbsp;&nbsp; MsgBox j &amp; Format(ActiveCell, "ww", vbMonday,
vbFirstFourDays) &amp; Format(a Mod 100, "00")
<br>End Sub
<p>Il est possible de se passer des variables :
<p>Sub CodiDdate4()
<br>' Un controle est &agrave; pr&eacute;voir vour v&eacute;rifier qu'il
s'agit bien d'une date
<br>&nbsp;&nbsp;&nbsp; MsgBox WeekDay(ActiveCell, 2) &amp; Format(ActiveCell,
"ww", vbMonday, vbFirstFourDays) &amp; Format(Year(ActiveCell) Mod 100,
"00")
<br>End Sub</html>

--------------2B15EAF97585A2EB6735657E--