Sélection de données en fonction d'un numéro de semaine

mathilde88

XLDnaute Nouveau
Bonjour à tous,

Je cherche à sélectionner l'ensemble des données présentent sur une feuille excel (nommé "Extraction Wave") si dans la colonne U figure le numéro de l'une des 6 dernières semaines.

Par exemple, cette semaine nous sommes à la semaine 19 donc je voudrais qu'excel me sélectionne les données pour lesquels est inscrit dans la colonne U le numéro 18, 17, 16, 15, 14, et 13.

(Pour info, le tableau figurant sur la feuille "Extraction Wave contient des colonnes allant de A à W).

Pour cela, j'ai créé la macro suivante :

Sheets("Extraction Wave").Select
Dim sem As Long, C As Range, plag As Range
sem = IsoWeekNumber(Date)
For Each C In [U:U]
If C = sem - 1 Then
If C = sem - 2 Then
If C = sem - 3 Then
If C = sem - 4 Then
If C = sem - 5 Then
If C = sem - 6 Then
If plag Is Nothing Then
Set plag = Rows(C.Row)
Else
Set plag = Union(plag, Rows(C.Row))
End If
End If
End If
End If
End If
End If
End If
Next C
Intersect(plag, [A:W]).Select


Pour cela, il a fallu que je définisse également la fonction IsoweekNumber :

Public Function IsoWeekNumber(ByVal d As Date) As Long
' philben : <!-- m --><a class="postlink" href="http://blog.developpez.com/philben/p11066/vba-access/numero_iso_des_semaines">Page non trouvée | Philben ... s_semaines</a><!-- m -->
Dim wd As Long
wd = Weekday(d, vbMonday)
IsoWeekNumber = Int((d - DateSerial(Year(d - wd + 4), 1, 1) - wd + 11) / 7)
End Function

Malheureusement cela ne fonctionne pas quelqu'un aurait il une piste.:confused:

D'avance merci

Cordialement

Mathilde
 

chris

XLDnaute Barbatruc
Re : Sélection de données en fonction d'un numéro de semaine

Bonjour

Ton lien est cassé.
On peut utiliser la fonction DatePart avec les 2 derniers arguments à 2 pour le numéro de semaine iso.

Pour le contrôle il suffit d'un seul test >= semaine - 6 et <= semaine alors que ton imbrication de SI ne correspond à rien
 

chris

XLDnaute Barbatruc
Re : Sélection de données en fonction d'un numéro de semaine

RE,

Merci. J'ai pu tester le bug de DatePart :"certaines années, la semaine 53 est renvoyée pour le dernier lundi alors que ce devrait être la semaine 1"

Le même que NO.SEMAINE(Date;21) : en 2013 il y a une nouvelle fonction qui doit résoudre
 

job75

XLDnaute Barbatruc
Re : Sélection de données en fonction d'un numéro de semaine

Bonjour mathilde88, chris, JM, le forum,

Normalement il n'est pas nécessaire de déterminer le numéro de semaine.

Il suffit de déterminer le lundi de la semaine suivante.

Voir le fichier joint et cette macro :

Code:
Sub Selectionner_semaines()
Dim n As Byte, ncol%, lundi_suivant As Date, premier_lundi As Date
Dim r As Range, sel As Range
n = 6 '6 dernières semaines, à adapter
ncol = 4 'nombre de colonnes du tableau, à adapter
lundi_suivant = Date - Weekday(Date - 1) + 8
premier_lundi = lundi_suivant - 7 * n
Set r = Range("A3", Range("A" & Rows.Count).End(xlUp)).Resize(, ncol)
For Each r In r.Rows
  If r.Cells(1) >= premier_lundi And r.Cells(1) < lundi_suivant _
    Then Set sel = Union(r, IIf(sel Is Nothing, r, sel))
Next
If Not sel Is Nothing Then Application.Goto sel, True
End Sub
Noter que les dates du tableau peuvent être dans n'importe quel ordre.

A+
 

Pièces jointes

  • Dates(1).xls
    110 KB · Affichages: 15
  • Dates(1).xls
    110 KB · Affichages: 21
  • Dates(1).xls
    110 KB · Affichages: 27

job75

XLDnaute Barbatruc
Re : Sélection de données en fonction d'un numéro de semaine

Re,

Dans le fichier précédent la semaine en cours est sélectionnée.

Si l'on veut les 6 semaines antérieures :

Code:
Sub Selectionner_semaines()
Dim n As Byte, ncol%, lundi_en_cours As Date, premier_lundi As Date
Dim r As Range, sel As Range
n = 6 '6 dernières semaines, à adapter
ncol = 4 'nombre de colonnes du tableau, à adapter
lundi_en_cours = Date - Weekday(Date - 1) + 1
premier_lundi = lundi_en_cours - 7 * n
Set r = Range("A3", Range("A" & Rows.Count).End(xlUp)).Resize(, ncol)
For Each r In r.Rows
  If r.Cells(1) >= premier_lundi And r.Cells(1) < lundi_en_cours _
    Then Set sel = Union(r, IIf(sel Is Nothing, r, sel))
Next
If Not sel Is Nothing Then Application.Goto sel, True
End Sub
Fichier (2).

A+
 

Pièces jointes

  • Dates(2).xls
    110.5 KB · Affichages: 26
  • Dates(2).xls
    110.5 KB · Affichages: 28
  • Dates(2).xls
    110.5 KB · Affichages: 31

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 950
Membres
103 989
dernier inscrit
jralonso