Modifier code filtrage

Bonjour tout le monde,

la formule MFC ci-dessous me servait pour faire un tri dans une colonne suivant .

=ET(ESTNUM(K2);K2>=AUJOURDHUI()+8;ET(ESTNUM(K2);K2<=AUJOURDHUI()+21))

Ma question;

Pourriez vous m’adapter cette formule dans le code ci-dessous de façon qu’il n’a plus besoin de la MFC et qu’il fasse le filtrage lorsque j’appelle ce code;

Sub AFFICHERDATESALERTES_21_JOURS() 
Application.ScreenUpdating = False

  Set WS = Sheets("STOCK")
  Set Wd = Sheets("ALERTES DATES")
  Wd.Range("A2:O65000").Clear
  Dl = WS.Range("A" & Rows.Count).End(xlUp).Row
  WS.Range("$A$2:$Q$" & Dl).AutoFilter Field:=11, Criteria1:=RGB( _
  255, 255, 0), Operator:=xlFilterCellColor
  WS.Range("$A$2:$Q$" & Dl).Copy Wd.Range("A2")
  Wd.Range("A2:Q65000").FormatConditions.Delete
  Sheets("STOCK").ListObjects("Tab_1").Range.AutoFilter Field:=11
  
End Sub

Je vous remercie d’avance pour votre aide.

Rubis57

Bonjour Rubis

Ci-joint ma proposition
Faute d’un fichier exemple de ta part plus pratique pour répondre correctement à ton besoin j’ai conçu comme j’ai pu celui-ci sur la base des informations données par le code et ta formule
A l’avenir il serait bien que tu l’intègre dans ta demande
Onglet « STOCK » colonne « A » les noms colonne « K » les dates
Onglet « ALERTES DATES » avec ces mêmes colonnes pour intégration des lignes dont les dates colonne « K » sont supérieures ou égales à la date du jour + 8 et inférieures ou égales à la date du jour - 21 (de ce que j’ai relevé dans ta formule)

Onglet « STOCK » cliques sur le bouton « Traitement » et constates le résultat obtenu onglet « ALERTES DATES »

Fais moi un retour

Classeur1.xlsm (24,5 Ko)

Bonjour FFO,

alors oui désolé de ne pas avoir de fichier modèle !

J’ai essayé ton code, il filtre bien les dates.

Je voulais faire pareil avec des dates de > à aujourd’hui et <= aujourd’hui +7 mais cela ne fonctionne pas .
Pourrai tu me dire quelle erreur est dans le second code s’il te plaît.

Merci à toi A+
Classeur1 (1).xlsm (26,3 Ko)

Sur cette ligne de code :

If IsDate(Ws.Range("K" & i)) And Ws.Range("K" & i) >= Date And Ws.Range("K" & i) <= Date + 7 Then

il faut supprimer le « = » ici

Ws.Range("K" & i) >= Date

mettre comme ceci :

Ws.Range("K" & i) > Date

Ci qui donne :

If IsDate(Ws.Range("K" & i)) And Ws.Range("K" & i) > Date And Ws.Range("K" & i) <= Date + 7 Then

Ton fichier adapé ci-joint

testes et dis moi

Classeur1 (1) (1).xlsm (26,1 Ko)

j’ai essayé mais regarde il ne prends pas la date du 12/12/2024 si je filtre le traitement 7 jours

Encore faudrait-il que pour cette date il y ait un nom en colonne « A » :

Le traitement détermine la dernière ligne à traiter sur la base de la dernière cellule alimentée de cette colonne

Essaies en la nourrissant d’une donnée sur les 2 dernières ligne cela devrait mieux fonctionner

Re,

je ne comprends pas pourquoi avoir des données en colonne A !

Je voudrai juste qu’il me filtre les dates de la colonnes suivant les dates comme décrites au départ, tu vois ? et qu’il fasse un copier sur l’onglet ALERTES DATES colonne K. Est ce possible cher Maître ?

un exemple en utilisant « autofilter »

Sub AFFICHERDATESALERTES_7_a_21_JOURS()
     Dim WS

     Set WS = Sheets("STOCK")
     With WS
          On Error Resume Next
          .AutoFilter.Range.AutoFilter       'eventuellement enlever autofilter précédent
          On Error GoTo 0

          .Columns("K").AutoFilter 1, ">=" & Format(Date + 8, "mm/dd/yyyy"), xlAnd, "<=" & Format(Date + 21, "mm/dd/yyyy")     'les dates entre aujourd'hui +8 et aujourd'hui +21
          With .AutoFilter.Range
               i1 = .Rows.Count              'nombre de lignes dans le range "autofilter"
               i2 = .Columns(1).SpecialCells(xlVisible).Count     'nombre de lignes filtrées (entête inclus)
               If i2 > 1 Then Set c = WS.Range("A1:Q1").Offset(1).Resize(i1 - 1)     'la plage à copier
          End With

          With Sheets("ALERTES DATES")
               .UsedRange.Offset(1).Clear    'RAZ cette plage
               If i2 > 1 Then c.Copy .Range("A2")     'coller
          End With

          .Columns("K").AutoFilter           'enlever l'autofilter
     End With

End Sub

Classeur1 (1) (2).xlsm (28,1 Ko)

Le traitement a besoin de déterminer la dernière ligne à traiter
Il le fait sur la base de la dernière cellule d’une colonne ayant une donnée qu’il cible
J’ai choisi la colonne « A » n’ayant de ta part aucune indication dans ce sens
Si cette colonne pour cette démarche est un mauvais choix peux tu m’en déterminer une qui pourrait convenir : colonne « K » celle des dates ou sinon laquelle
Merci de m’aider

Ton fichier avec l’option de la colonne « K »
La ligne de code impliquée :

Dl = Ws.Range("K" & Rows.Count).End(xlUp).Row

Lettre « K » intégrée correspondant à la lettre de la colonne des dates

Testes et dis moi

Classeur1 (1) (1).xlsm (26,6 Ko)

Juste pour ton info dans le code initial que tu as transmis cette ligne code est présente avec la colonne « A » utilisé que j’ai reconduit :

« Dl = WS.Range(« A » & Rows.Count).End(xlUp).Row »

Re,

ne m’en veux pas FFO. Je l’ai déja vu plusieurs fois et on fait jamais comme il faut dès le départ.

Il faut toujours donner un fichier identique au réel du mieux qu’on peut, sinon vous les experts vous perdez énormément de temps et vous ne comprenez rien de ce qu’on demande et a la fin ce n’est jamais comme souhaité. Désolé.

Voici un modèle identique au réel.

Donc mon but c’est de pouvoir filtrer des dates de la colonne K de l’onglet STOCK :

  • entre aujourd’hui et aujourd’hui +7 jours
  • entre aujourd’hui +8 jours et aujourd’hui <= 21 jours.

et copier le résultat sur l’onglet RESULTAT FILTRAGE

REEL RUBIS57.xlsm (20,9 Ko)

Ci-joint ton fichier adapté
Dur dur en VBA de gérer des tableaux structuré !!!
C’est un enfer d’où ma hantise d’y être confronté
Je crois que j’y suis arrivé
A toi de tester et me dire

REEL RUBIS57.xlsm (23,6 Ko)

C’est la colonne « K » qui est utilisé pour déterminer le dernier enregistrement à traiter avec la ligne de code que je t’ai indiqué

Re,

Merci mais cela ne fonctionne pas.
Si tu regardes l’onglet STOCK et que je lance le traitement 21 jours je devrai avoir 5 lignes, mais j’en ai qu’une !

REEL RUBIS57.xlsm (22,7 Ko)

Et oui oui je viens de m’en rendre compte
Pas simple les tableaux structuré je les fuis !!!

Testes ce fichier et dis moi

REEL RUBIS57.xlsm (23,5 Ko)

Avec une amélioration pour contourner le désordre qu’ils engendrent dans les traitements des procédures
Il faut composer avec leur présence hélas !!!

REEL RUBIS57.xlsm (23,4 Ko)

1 « J'aime »

il faut surtout oublier qu’un tableau structuré se trouve sur une feuille, donc il faut le traiter comme s’il est un objet unique sans connection avec cette feuille et utiliser les propriétes du tableau.
Si on mélange les 2, on est perdu.
REEL RUBIS57.xlsm (23,7 Ko)

1 « J'aime »

Bonjour,

cela fonctionne pour le traitement 21 jours

Pour le traitement 7 jours j’ai dû modifié une ligne.

Peux tume dire si OK.
REEL RUBIS57 (1).xlsm (23,6 Ko)

Re FFO,

Nickel ce dernier fonctionne comme souhaité. OUF !

Désolé de t’avaoir fait perdre du temps au début. Mais à partir de maintenant je ferai des fichiers exemples à l’identique du réel et cela ira mieux.

Merci beaucoup à toi et a une prochaine fois .

Rubis

Merci à toi Cow18, mais la solution de FFO est OK pour moi et je vais rester sur cela .

A une prochaine OK.
Rubis

okay pour cette macro de 7 jours.

@FFO , cette façon de travailler, c’est comme enfoncer des vis dans le bois avec un marteau, ça marche et c’est tout.
Soit on utilise un TS comme il faut, soit on le convertit en plage ordinaire et continu « old school ».

L’essentiel et c’est la seule chose qui m’anime c’est que notre interlocuteur soit satisfait
Depuis plus de 4 ans que j’officie ici avec cette devise ce fut toujours le cas
Que demander de plus tout le monde est ravi !!!
On ne change pas une équipe qui gagne

Merci beaucoup pour ce résultat très positif
Un peu galéré avec surtout le tableau structuré mais malgré tout j’apprends et trouve des ficelles pour le gérer grâce à toi

N’oublies pas la colonne « K » qui doit toujours avoir une donnée pour cibler la dernière ligne à traiter
C’est celle des dates en toute logique puisque le traitement agit dessus il ne devrait pas y avoir de problème à ce niveau
A la prochaine pour t’aider à nouveau