Connaître le "nouveau numéro de ligne" après filtrage
Bonjour à tous !
Avant de rentrer dans le vif du sujet, je tenais à dire que ce site est tout simplement FORMIDABLE !!!
J'ai commencé le VBA sur excel il y à seulement 2 semaines et j'ai quasiment terminé mon projet de vidéothèque.
Bref... Jusque là, j'ai toujours trouvé la réponse à mes problèmes en cherchant sur internet, mais là j'avoue que je sèche !
Je vais donner un exemple pour que ce soit plus parlant :
Dans la colonne A j'ai 200 lignes dans un tableau
Je sélectionne la ligne 100
Je filtre la Colonne A et je me retrouve avec 8 résultats
Ma sélection est toujours à la ligne 100 mais visuellement elle se trouve à la 5ème ligne de mon tableau sur les 8 filtrées
J'arrive à compter le nombre de ligne visible avec ça :
Application.Subtotal(103, Columns("A")) -1ou ça :
Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible).CountMais je n'arrive pas à trouver la valeur 5 (5ème ligne de mon tableau après filtre) qui correspond à ma sélection
En fait, j'ai une listbox dans un UserForm et une fois le filtre activé je voudrais que sur les 8 résultats affichés il me sélectionne la 5ème ligne
ListBox1.ListIndex = ???Sans filtre ça fonctionne très bien avec :
ListBox1.ListIndex = ActiveCell.Row - 2Voilà... quelqu'un à une idée ?
Merci d'avance
Bonjour et bienvenue sur le forum
Si tu fournissais tu fichier, il serait plus facile de chercher une solution.
Bye !
Bonjour,
Pas sûr d'avoir compris la question.
=SOUS.TOTAL(103;A:A)-SOUS.TOTAL(103;A2:$A$60000)
à voir si toujours ok dans vba
eric
Merci pour vos réponses
Je vais joindre un fichier exemple pour mieux comprendre car je suis contient que c'est un peut tordu :
En gros si je sélectionne dans mon tableau Excel le film "American Psycho" qui se trouve à la ligne 15, quand j'execute ma macro il est déjà sélectionné dans ma listebox1 grâce à :
ListBox1.ListIndex = ActiveCell.Row - 2Maintenant, quand je fais une recherche (dans TextBox1) en tapant "Ame" je voudrais qu'il reste sélectionné dans ma listeBox.
Le problème c'est que en utilisant ListBox1.ListIndex = ActiveCell.Row - 2 on utilise le numéro de ligne de la sélection or je voudrais utiliser le numéro de la ligne visible qui est sélectionnée.
Je sais pas si vous me suivez
Voici le code :
Sub Refresh_ListBox1() 'Modifi ListBox1 selon les filtres
ListBox1.Clear
If Application.Subtotal(103, Columns("A")) > 1 Then 'Si la colone "A" à plus de 0 valeur, alors
cpt = 0
For Each Cel In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
UserForm1.ListBox1.AddItem
UserForm1.ListBox1.List(cpt, 0) = Cel
cpt = cpt + 1
Next
Nb_de_resultat = Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Count
Label2.Caption = Nb_de_resultat & " Films" 'Afficher le nombre de films
Else
Label2.Caption = " 0 Film"
End If
End Sub
Private Sub ListBox1_Click()
Cells.Find(ListBox1.Text, SearchOrder:=xlByRows).Activate 'Sélectionne la ligne dans le tableau
End Sub
Private Sub TextBox1_Change()
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=1, Criteria1:="=*" & TextBox1.Value & "*" 'Filtre la colone1 du Tableau1 grâce à une recherche partielle
Refresh_ListBox1
If Application.Subtotal(103, Columns("A")) > 1 Then
ListBox1.ListIndex = 0 'Ici j'ai mi "0" en attendant de trouver la bonne formule
End If
End Sub
Private Sub UserForm_Initialize()
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=1 'Reset filtre
Refresh_ListBox1
ListBox1.ListIndex = ActiveCell.Row - 2
End SubEncore merci pour votre aide !!!
Bon finalement à tête reposé je viens de trouver la solution qui était toute bête
ListBox1.ListIndex = Range("A2:A" & ActiveCell.Row).SpecialCells(xlCellTypeVisible).CountMerci quand même d'avoir prit le temps de regardé
A bientot car je pense que c'est pas fini