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

  • Initiateur de la discussion Initiateur de la discussion mathilde88
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.😕

D'avance merci

Cordialement

Mathilde
 
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
 
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
 
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

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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour