Microsoft 365 utiliser la ligne +1 des lignes filtrées

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à tous,
Je vous souhaite un beau dimanche :)

Je coince encore sur un code que je n'arrive pas à faire :
dans l'exemple fichier joint
exemple : filtre appliqué sur col B chiffre 1
je voudrais que si la cellule NON VISIBLE "B17" - soit lignes filtrées + 1
Si "B17" (NON VISIBLE = "OK" écrire "OK" en "F9"

Malgré mes recherches et tentatives, je n'ai pas réussi :mad:
Auriez-vous la solution ?
Avec mes remerciements,
Amicalement,
lionel,
 

Pièces jointes

  • derniereLigne+1_filtre.xlsm
    20.5 KB · Affichages: 16

pierrejean

XLDnaute Barbatruc
Bonjour usine à gaz
VB:
Sub FindingLastRow()
    Dim Plage As Range
    Set Plage = Range("b1:B" & Range("b65536").End(xlUp).Row).SpecialCells(xlVisible)
    x = Split(Plage.Address, "$")
    derlinvisible = x(UBound(x))
    If Range("B" & derlinvisible + 1) = "OK" Then Range("F9") = "OK"
End Sub
 

Usine à gaz

XLDnaute Barbatruc
Re encore :)

Après re-test ça semble bon :)
VB:
Sub FindingLastRow_PierreJean()
    Dim Plage As Range
    Set Plage = Range("b1:B" & Range("b65536").End(xlUp).Row).SpecialCells(xlVisible)
    x = Split(Plage.Address, "$")
    derlinvisible = x(UBound(x))
    If Range("B" & derlinvisible + 1) = [f4] Then Range("F9") = [f4]
End Sub
Merci à toi :)
Je vais voir comment l'intégrer dans mon fichier de travail,
lionel,
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Lionel, Pierre,

Voyez dans le fichier joint cette fonction VBA (volatile) :
VB:
Function FindingLastRow$(colonne As Range)
Application.Volatile
If colonne(colonne.Count).End(xlUp)(2) = "OK" Then FindingLastRow = "OK"
End Function
Le code doit être impérativement dans un module standard.

Formule en F9 =FindingLastRow(B:B)

A+
 

Pièces jointes

  • derniereLigne+1_filtre(1).xlsm
    16.9 KB · Affichages: 2

job75

XLDnaute Barbatruc
Ah je ne le croyais pas mais il n'est pas nécessaire que la fonction soit volatile, fichier (2) :
VB:
Function FindingLastRow$(colonne As Range)
If colonne(colonne.Count).End(xlUp)(2) = "OK" Then FindingLastRow = "OK"
End Function
 

Pièces jointes

  • derniereLigne+1_filtre(2).xlsm
    16.8 KB · Affichages: 4

Usine à gaz

XLDnaute Barbatruc
Bonjour PierreJean, Bonjour Gérard, le Forum,
Je reviens sur ce fil car j'avais mal formulé mon besoin (une fois de plus) :mad:

Mon besoin revu est le suivant :
si je filtre sur 1 la ligne 16 devient visible
si je filtre sur 2 la ligne 24 devient visible
si je filtre sur 3 la ligne 32 devient visible
si je filtre sur 4 la ligne 39 devient visible

Pour l'exemple j'ai écrit : "OK - c'est bon - Pourquoi ? - Parce que"
mais dans mon classeur de travail elle sont vides
j'ai juste besoin qu'elles deviennent visibles.


J'ai continué à chercher mais je n'ai pas trouvé jusqu'à maintenant !
Auriez-vous la solution ?
Je joins le fichier test,
Avec mes remerciements,
Je vous souhaite un beau dimanche,
lionel,
 

Pièces jointes

  • derniereLigne+1_filtre.xlsm
    17.4 KB · Affichages: 3

job75

XLDnaute Barbatruc
Bonjour Lionel,

Fichier (3) avec cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
Rows(16).Hidden = Rows(15).Hidden
Rows(24).Hidden = Rows(23).Hidden
Rows(32).Hidden = Rows(31).Hidden
Rows(39).Hidden = Rows(38).Hidden
Application.EnableEvents = True
End Sub
La formule volatile en F2 est indispensable pour que le filtrage crée l'évènement Calculate.

A+
 

Pièces jointes

  • derniereLigne+1_filtre(3).xlsm
    17.9 KB · Affichages: 3

Discussions similaires

Réponses
22
Affichages
1 K

Statistiques des forums

Discussions
314 073
Messages
2 105 353
Membres
109 336
dernier inscrit
JBL_18