Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA: sélection des 17 dernières lignes d'un filtre

  • Initiateur de la discussion Initiateur de la discussion _RV
  • 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 !

_RV

XLDnaute Nouveau
Salut tout le monde,


j'ai un souci concernant une macro utilisant un filtre (certains auront noté que j'avais deja d'autres problèmes, qui sont maintenant résolus, cependant un problème persiste)

en fait, apres certaines opérations, des données devraient changer dans une feuille.

donc pour ce faire, j'execute un filtre de plusieurs critères sur la feuille, ce qui me donne la plage que je cherche. dans cette plage, suite aux résultats précédents, je devrais changer une donnée pour les 17 (c'est un exemple, ce nombre varie) dernières lignes.

Jusque là j'utilisais ce code





Selection.AutoFilter Field:=9, Criteria1:=type_finition
Selection.AutoFilter Field:=1, Criteria1:=date_complémentA

Range('A65536').End(xlUp).Select
Range(Selection, Selection.Offset(-17, 0)).Select

Selection.Value = 'poildecul'






mais je me rend compte que le offset n'est pas la bonne solution, parce que si la dernière ligne du filtre est le numéro 11517, et bien le offset remontera jusqu'à la ligne 11500, alors que avec le filtre, la 17e ligne au-dessus peut tres bien etre la 543, vous voyez ce que je veux dire?


le problème c'est que je n'arrive pas à lui dire:

'sélectionne les 17 dernières lignes du filtre'


qqun saurait-il comment m'aider??

merci beaucoup,

Hervé.
 
re-bonjour tout le monde,

après des recherches infructueuses, j'ai décidé de changer de méthode, le filtre étant trop complexe, donc voici la solution que j'ai trouvé:


derniere_ligne = Range('A65536').End(xlUp).Row

v = 0
u = 2
Do

If (Cells(u, 1).Value = 1erCritere) And (Cells(u, 9).Value = 2eCritere) Then

Cells(u, 1).Value = 'poildecul'
v = v + 1 'compteur de changement
End If
u = u + 1 'passe à la ligne d'après


Loop Until ((v = Nb_de_chgts_à_effectuer) Or (u > derniere_ligne))


Voilà, et ca marche bien, dc si ca peut servir à qqun d'autre...

bonne fin de journée à tous!


Hervé.
 
Re Bonjour _RV


Je ne peux tout t'expliquer en détail, mais voici comment vba voit ta plage après l'avoir filtrer. Il voit en groupe les lignes apparentes.
Ex: 2,3,4;7,8;40,41;100;201. Chaque ; représente des section(groupe) qui eut on un certain nombre de ligne. Je te donne le code comme ceci et pose les questions par la suite si nécessaire:
Code:
If Selection.Height <> 0 Then
                  Selection.SpecialCells(xlCellTypeVisible).Select
                  With Selection
                       For NbAreaX = 1 To .Areas.Count
                           tableau_nb_Section(NbAreaX, 0) = .Areas.Item(NbAreaX).Count ' Nombre d'élement dans chache section
                           LigneFallow = .Areas.Item(NbAreaX).Row - 1 ' ligne de référence de départ pour chaque section
                           For intItemIn = 1 To .Areas.Item(NbAreaX).Count
                               tableau_nb_Section(NbAreaX, intItemIn) = Cells(LigneFallow + intItemIn, 1).Row ' No de chaque Ligne par section
                           Next intItemIn
                       Next NbAreaX
                  End With
              End If

Tu devra ensuite travailler avec la variable tableau 'tableau_nb_Section()' pour extraire logiquement les 17 derni`res lignes.


Philippe :sick:
 
- 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

  • Question Question
Microsoft 365 Question code VBA
Réponses
2
Affichages
529
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…