Parcourir une liste filtree

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 !

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

Dernière édition:
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

Dernière édition:
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:
- 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

J
Réponses
22
Affichages
3 K
jui42
J
B
Réponses
4
Affichages
2 K
benoitoleron
B
S
Réponses
1
Affichages
1 K
schoum5
S
M
Réponses
6
Affichages
2 K
M
N
  • Question Question
Réponses
5
Affichages
3 K
M
Réponses
3
Affichages
18 K
Retour