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

Déterminer les dates de toutes les semaines de l’année

23 réponses
Avatar
Apitos
Bonjour =E0 tous,

J'aimerais d=E9terminer les dates du d=E9but et fin des semaines de l'ann=
=E9e en cours.

Les semaines commencent par Mercredi er finissent par Mardi.

Voila un code pour d=E9terminer une semaine.

'-----------------------------------
date_debut =3D Date - Application.Choose(Application.Weekday(Date, 1), =
4, 5, 6, 0, 1, 2, 3)
date_fin =3D date_debut + 6
MsgBox "DateBegin :" & date_debut & ", DateEnd : " & date_fin
'-----------------------------------

Comment le g=E9n=E9raliser pour avoir toutes les semaines de l=92ann=E9e ?

Merci.

10 réponses

1 2 3
Avatar
MichD
Si ta date provient du combobox, elle est considérée comme du texte...tu peux faire ceci :

La fonction de conversion Cdate() prend les séparateurs et les formats de date définis
dans le panneau de configuration

'--------------------------------------------
Sub formule()

Dim LaDate As Long, X As Integer

If Me.combobox1.ListIndex <> -1 Then
LaDate = CLng(CDate(Me.combobox1.Value))

X = Evaluate("INT((" & LaDate & "-(DATE(YEAR(" & _
LaDate & "-WEEKDAY(" & LaDate & _
"-1)+4),1,3)-WEEKDAY(DATE(YEAR(" & _
LaDate & "-WEEKDAY(" & LaDate & "-1)+4),1,3)))+5)/7)")
MsgBox "Numéro de la semaine : " & X
End If

End Sub
'--------------------------------------------





MichD
---------------------------------------------------------------
"Apitos" a écrit dans le message de groupe de discussion :


Salut,

Voila :

http://cjoint.com/?BFtwNqEaGmy
Avatar
Apitos
Bonsoir Denis,

Si ta date provient du combobox, elle est considérée comme du texte



La date vient de la feuille colonne F et G et non pas du ComboBox.

Et selon le numéro de la semaine, la date de début (Colonne F) est affi chée dans ComboBox1 comme valeur par défaut et la date de fin (Colonne G) est affichée dans ComboBox2 comme valeur par défaut.
Avatar
h2so4
bonsoir,

ta macro test, utilise la fonction format qui donne un format texte.
tu devrais l'adapter ainsi :

Sub test()
Dim x As Date, Result As String
Dim LastLg As Long, n As Byte
n = 1
[E2].CurrentRegion.ClearContents
[E1] = "N° Semaine": [F1] = "Du": [G1] = "Au"
For x = "1/1/" & Year(Now) To "31/12/" & Year(Now)
If Format(x, "dddd") = "mercredi" Then
LastLg = [E65000].End(xlUp).Row + 1
Range("E" & LastLg) = n
Range("F" & LastLg) = x
Range("F" & LastLg).NumberFormat = "dd.mm.yyyy"
Range("G" & LastLg) = x + 6
Range("G" & LastLg).NumberFormat = "dd.mm.yyyy"
n = n + 1
End If
Next
End Sub
Avatar
MichD
Je ne peux pas faire plus!

Tu as la syntaxe de la fonction dans la feuille de calcul ou dans l'interface de l'éditeur
de code avec
un exemple quant à la façon de l'utiliser.



MichD
---------------------------------------------------------------
Avatar
Apitos
Bonsoir h2so4, Denis,

h2so4 :: le probleme du format de la date est reglé.

Reste que les combobox ( 1 et 2 ) affichent un numéro de serie au lieu de la date dans le code suivant :

'---------------------
Private Sub UserForm_Initialize()
Dim Mois As Long, i As Long, Semaine As Long
Dim DateTest As Date

Mois = Month(Date): DateTest = Now()

'-- Trouver le numéro de la semaine
Semaine = Format(DateTest, "ww", vbWednesday, vbFirstFourDays)

'-- Afficher l'élément correspondant à semaine - 1
'-- Mais affiche 41080 au lieu du 20/06/2012 ?
ComboBox1.ListIndex = Semaine - 1 'début de la semaine en cours
ComboBox2.ListIndex = Semaine - 1 'fin de la semaine en cours

For i = 1 To Mois
ComboBox3.AddItem MonthName(i)
Next i
ComboBox3.ListIndex = Mois - 1

End Sub
'---------------------
Avatar
Apitos
Les ComboBox sont remplies par des plages nommées dans RowSource.

ComboBox1 par la plage nommée "Du" : þuil1!$F$2:$F$53

ComboBox2 par la plage nommée "Au" : þuil1!$G$2:$G$53
Avatar
MichD
Si tu cherches à extraire le numéro de la semaine à partir de la date émanant d'un
combobox,
tu as un exemple sous les yeux

En fait pour que ça fonctionne il s'agit de transformer la date du combobox en valeur
numérique.
Pour ce faire, on peut utiliser les fonctions de conversion :

LaDate = CLng(CDate(Me.combobox1.Value))

La formule "Evaulate(.....)" requiert une date exprimée en valeur numérique pour bien
fonctionner.

'-----------------------------------------
Sub formule()

Dim LaDate As Long, X As Integer

If Me.combobox1.ListIndex <> -1 Then
LaDate = CLng(CDate(Me.combobox1.Value))

X = Evaluate("INT((" & LaDate & "-(DATE(YEAR(" & _
LaDate & "-WEEKDAY(" & LaDate & _
"-1)+4),1,3)-WEEKDAY(DATE(YEAR(" & _
LaDate & "-WEEKDAY(" & LaDate & "-1)+4),1,3)))+5)/7)")
MsgBox "Numéro de la semaine : " & X
End If

End Sub
'-----------------------------------------


MichD
---------------------------------------------------------------
"Apitos" a écrit dans le message de groupe de discussion :


Bonsoir h2so4, Denis,

h2so4 :: le probleme du format de la date est reglé.

Reste que les combobox ( 1 et 2 ) affichent un numéro de serie au lieu de la date dans le
code suivant :

'---------------------
Private Sub UserForm_Initialize()
Dim Mois As Long, i As Long, Semaine As Long
Dim DateTest As Date

Mois = Month(Date): DateTest = Now()

'-- Trouver le numéro de la semaine
Semaine = Format(DateTest, "ww", vbWednesday, vbFirstFourDays)

'-- Afficher l'élément correspondant à semaine - 1
'-- Mais affiche 41080 au lieu du 20/06/2012 ?
ComboBox1.ListIndex = Semaine - 1 'début de la semaine en cours
ComboBox2.ListIndex = Semaine - 1 'fin de la semaine en cours

For i = 1 To Mois
ComboBox3.AddItem MonthName(i)
Next i
ComboBox3.ListIndex = Mois - 1

End Sub
'---------------------
Avatar
Apitos
Bonjour Denis,

Si tu cherches à extraire le numéro de la semaine à partir de la da te émanant d'un
combobox,



Non, ce n'est pas ça.

Le numéro de la semaine est déjà défini par cette ligne :

'-- Trouver le numéro de la semaine
Semaine = Format(DateTest, "ww", vbWednesday, vbFirstFourDays)

Maintenant, je cherche à afficher une date dans le Combobox et non un num éro de série.

Cette date est issue de la plage F2:F23 et G2:G23

'--------------------------
'-- Afficher l'élément correspondant à semaine - 1
'-- Mais le problème que ça affiche 41080 au lieu du 20/06/2012 ?
ComboBox1.ListIndex = Semaine - 1 'début de la semaine en cours
ComboBox2.ListIndex = Semaine - 1 'fin de la semaine en cours
'---------------------------
Avatar
Apitos
Bonsoir,

J'ai annulé lÂ’alimentation des CombobBox depuis la propriété RowSou rce avec des plages nommées, et je l'ai remplacé par l'alimentation dir ecte depuis la feuille :

'-----------------------------------------
With Sheets("Base")
For i = 8 To .Range("J65536").End(xlUp).Row
ComboBox1 = .Range("J" & i)
If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem .Range("J" & i)
ComboBox2 = .Range("K" & i)
If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem .Range("K" & i)
Next i
End With
'------------------------

Et maintenant, l'affichage dans les deux ComboBox est une date et non pas u n numéro de série.

Mais j'aimerais savoir pourquoi avec la priorité RowSource ça ne marcha it pas et avec un remplissage directe de la feuille marche ?

Merci.
Avatar
Fredo P.
Eh si je ne me trompe!
ComboBox1 = Format(.Range("J" & i),"dd/mm/yy")

"Apitos" a écrit dans le message de news:

Bonsoir,

J'ai annulé l’alimentation des CombobBox depuis la propriété RowSource avec
des plages nommées, et je l'ai remplacé par l'alimentation directe depuis la
feuille :

'-----------------------------------------
With Sheets("Base")
For i = 8 To .Range("J65536").End(xlUp).Row
ComboBox1 = Format(.Range("J" & i),"dd/mm/yy")
If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem .Range("J" &
i)
ComboBox2 = .Range("K" & i)
If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem .Range("K" &
i)
Next i
End With
'------------------------

Et maintenant, l'affichage dans les deux ComboBox est une date et non pas un
numéro de série.

Mais j'aimerais savoir pourquoi avec la priorité RowSource ça ne marchait
pas et avec un remplissage directe de la feuille marche ?

Merci.
1 2 3