Variable = Dernière cellule colonne filtrée

Y compris Power BI, Power Query et toute autre question en lien avec Excel
P
Polak6
Jeune membre
Jeune membre
Messages : 27
Inscrit le : 12 février 2018
Version d'Excel : 2016

Message par Polak6 » 21 août 2018, 16:20

Bonjour,

J'aimerais savoir de quelle manière il est possible de stocker dans une variable, la derniere cellule de la colonne filtrée "m" ?

En vous remerciant pour votre aide
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 3'513
Appréciations reçues : 242
Inscrit le : 26 janvier 2011
Version d'Excel : 2007

Message par Theze » 21 août 2018, 16:36

Bonjour,

Une piste :
Sub Test()
    
    Dim Plage As Range
    Dim Ligne As Long
    Dim Critere
    
    Critere = "Ta valeur" 'adapter le critère
    
    With Worksheets("Feuil1") 'adapter le nom de la feuille
        
        'sur la colonne M
        Set Plage = .Range(.Cells(1, 13), .Cells(Rows.Count, 13).End(xlUp))
        
        Plage.AutoFilter 1, "=" & Critere
        
        For Ligne = Plage.Count To 1 Step -1
        
            If Plage(Ligne).EntireRow.Hidden = False Then Exit For
            
        Next Ligne
        
        Plage.AutoFilter
        
        MsgBox Ligne '<--- dernière ligne du filtrage dans la variable "Ligne"
        
    End With
    
End Sub
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
P
Polak6
Jeune membre
Jeune membre
Messages : 27
Inscrit le : 12 février 2018
Version d'Excel : 2016

Message par Polak6 » 21 août 2018, 16:41

Bonjour,

Merci pour cette réponse rapide.

En faite je voudrais stocker dans une variable la dernière valeur visible :

Je pensais à : Range("M1:M" & Cells(Rows.Count, "M").End(xlUp).Row).Value mais celle-ci ne fonctionne pas

Qu'en penses-tu ?

Merci pour ton aide
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 3'513
Appréciations reçues : 242
Inscrit le : 26 janvier 2011
Version d'Excel : 2007

Message par Theze » 21 août 2018, 17:03

Re,

Les valeurs de la dernière ligne visible dans une variable Range :
Sub Test()
    
    Dim Plage As Range
    Dim PlgResult As Range
    Dim Cel As Range
    Dim Mess As String
    Dim Ligne As Long
    Dim Critere
    
    Critere = "Ta valeur" 'adapter le critère
    
    With Worksheets("Feuil1") 'adapter le nom de la feuille
        
        Set Plage = .Range(.Cells(1, 13), .Cells(Rows.Count, 13).End(xlUp))
        
        Plage.AutoFilter 1, "=" & Critere
        
        For Ligne = Plage.Count To 1 Step -1
        
            If Plage(Ligne, 13).EntireRow.Hidden = False Then Exit For
            
        Next Ligne
        
        'défini la plage de Ax à Mx (x = Ligne)
        Set PlgResult = .Range(.Cells(Ligne, 1), .Cells(Ligne, 13))
        
        'concatène pour l'exemple et affiche les valeurs dans la boite de message
        For Each Cel In PlgResult: Mess = Mess & Cel.Value & vbCrLf: Next Cel
        
        Plage.AutoFilter
        
    End With
    
    MsgBox Mess
    
End Sub
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
Avatar du membre
dhany
Passionné d'Excel
Passionné d'Excel
Messages : 6'698
Appréciations reçues : 646
Inscrit le : 3 octobre 2017
Version d'Excel : 2007 FR

Message par dhany » 21 août 2018, 19:54

Bonjour Polak6, Theze,

je propose ce fichier Excel :
Exo Polak6.xlsm
(14.81 Kio) Téléchargé 9 fois
dhany
P
Polak6
Jeune membre
Jeune membre
Messages : 27
Inscrit le : 12 février 2018
Version d'Excel : 2016

Message par Polak6 » 22 août 2018, 16:10

Bonjour,

Merci pour votre aide. Je vous avouerai que je ne suis pas arrivé à faire fonctionner cette ligne sur mon fichier. Du coup je suis passé par quelque chose de moins propre mais qui fonctionne :

Range("M65000").Select
Selection.End(xlUp).Select
Selection.End(xlUp).Select
nom = ActiveCell.Value

D'autre part, dans le cadre de mon cadre, j'utilise ce bout de code pour copier les données de plusieurs cellules filtrées, mais j'ai l'impression que celui-ci n'est pas optimisé :

Windows("Mon_Fichier").Activate
Sheets("Feuil1").Range("M16:m65000").SpecialCells(xlCellTypeVisible).Copy
Windows(nom).Activate
Sheets("Feuil1").Select
Range("A1").Select
ActiveSheet.Paste
Windows("Mon_Fichier").Activate
Sheets("Feuil1").Range("a16:a65000").SpecialCells(xlCellTypeVisible).Copy
Windows(nom).Activate
Sheets("Feuil1").Select
Range("B1").Select
ActiveSheet.Paste
Avatar du membre
fred2406
Membre impliqué
Membre impliqué
Messages : 1'941
Appréciations reçues : 28
Inscrit le : 13 mai 2014
Version d'Excel : 2007-201364bits-2011MAC

Message par fred2406 » 22 août 2018, 17:45

Bonjour à tous
un autre exemple ... permettant d'obtenir la dernière ligne visible avec un filtre
exemple fais sur la colonne M (exemple pris sur le fichier de Dhany
   DerLig = Range("M:M").Find("*", , , , xlByRows, xlPrevious).Row
Fred
Je ne réponds pas aux M.P. non sollicités.
Fred
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message