Parcourir une liste filtree

sharkantipav

XLDnaute Occasionnel
Bonjour ,
Je suis en train d'ecrire un macro qui parcours le range AB2:AB500.
Pour chaque valeur de ce range je filtre le tableau A1:Z50000 en column A.

j'obitens par exemple 5 resultat ... les lignes 5, 150,254, 785,3620

En column E j'aimerai marquer pour le 1er resultat N, pour le dernier C pour tout ceux aux milieux si il y'en a R

Je ne sais pas comment parcourir le tableau une fois filtre..

Merci bcp
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Parcourir une liste filtree

Bonjour sharkantipav, phlaurent55 :),

Juste pour le fun, une piste sans boucle et sans test des cellules visibles ou non.

Le code principal est dans le module de code de la feuille "Feuil1". La partie du code pour le marquage "N", "R" et "C" est:
VB:
   ' cellules visibles 1ière colonne du tableau sans la ligne d'en-tête
   On Error Resume Next
   Set CellVisible = Range(tablo).Columns(1).Offset(1). _
         Resize(Range(tablo).Columns(1).Rows.Count - 1). _
         SpecialCells(xlCellTypeVisible)
   On Error GoTo 0
   If CellVisible Is Nothing Then
      ' Le filtre ne ramène aucune ligne
      MsgBox "Aucune cellule ne répond aux critères du filtre. Pas de traitement!"
   Else
      ' il y a au moins une ligne filtrée
      ' une ligne          -> marquée "N"
      ' deux lignes        -> la 1ière marquée "N", la seconde "C"
      ' 3 lignes ou plus   -> la 1ière marquée "N", la dernière "C", les autres "R"
      CellVisible.Offset(, 4) = "R"
      CellVisible.Areas(CellVisible.Areas.Count). _
            Cells(CellVisible.Areas(CellVisible.Areas.Count).Rows.Count, _
            1).Offset(, 4) = "C"
      CellVisible.Areas(1).Cells(1, 1).Offset(, 4) = "N"
   End If
 

Pièces jointes

  • sharkantipav-Marquer lignes filtrées v1.xlsm
    25.1 KB · Affichages: 30
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Parcourir une liste filtree

Bonjour sharkantipav, phlaurent55 :),

Toujours pour le fun, une comparaison des durées d'exécution entre 3 méthodes sur 50 000 lignes:


  • méthode sans boucle (SB)
  • méthode avec boucle courte (BC) : on boucle uniquement sur les lignes renvoyées par le filtre
  • méthode avec boucle longue (BL) : on boucle toujours sur les 50 000 lignes

Cliquer sur Test, filtrer le tableau, cliquer sur 'OK' dans la boîte de dialogue.

PS: La méthode sans boucle est sensible, à mon avis, au nombre de zones distinctes renvoyées par le filtre. Lorsqu'on trie le tableau sur Item et qu'on le filtre sur les Item uniquement, alors quelque soit le filtre sur les Item, le temps d’exécution est très faible (env. 0,07 sec.) et à peu près constant (pratiquement indépendant du nombre de lignes renvoyées)
Ceci expliquerait aussi la forme en cloche de la méthode.
 

Pièces jointes

  • sharkantipav-Marquer lignes filtrées (durees) v1.xlsm
    36.3 KB · Affichages: 27
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Parcourir une liste filtree

Re,

On peut, pour optimiser la vitesse concernant la question initiale, imaginer la méthode suivante :
  1. rajouter une colonne au tableau avec les numéros de lignes
  2. trier le tableau (avec la colonne ajoutée) sur le champ du critère de la colonne AB
  3. appliquer tour à tour les filtres avec chaque valeur de la colonne AB et appliquer la méthode sans boucle pour compléter la colonne "E"
  4. à la fin, trier le tableau sur la colonne ajoutée pour retrouver l'ordre initial
  5. supprimer la colonne ajoutée
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 348
Messages
2 087 508
Membres
103 567
dernier inscrit
johnregular1