selectionner les cellules visibles d'une liste filtrée

satwaf

XLDnaute Occasionnel
Bonjour à tous,

je m'explique, voila j'aimerai recuperer douze valeurs (nombre standard) d'une liste filtrée en partant de la valeur maxi de la liste et en remontant d'une unité a chaque fois, en sachant qu'il peut y avoir des cellules masquées donc je peux recuperer la valeur par exemple 90, 89, 86 etc. et en sachant que si la valeur a recuperer est egal à 0 alors je sors de la macro.
Seulement quand je commence a recuperer mes valeurs , ca marche pour la premiere, mais ensuite lorsque je remonte d'une cellule le code ne fait pas la difference entre une valeur affichée ou masquée.

pourriez vous m'aider sur ce code s'il vous plait





Sub test2()

Sheets("recap rapport").Range("a18").Value = Sheets("Evolution").Range("a65536").End(xlUp).Offset(0, 0).Value
Sheets("recap rapport").Range("a18").Value = Sheets("Evolution").Range("a65536").End(xlUp).Offset(0, 0).Value
Sheets("recap rapport").Range("a17").Value = Sheets("Evolution").Range("a65536").End(xlUp).Offset(-1, 0).Value
Sheets("recap rapport").Range("a16").Value = Sheets("Evolution").Range("a65536").End(xlUp).Offset(-2, 0).Value
Sheets("recap rapport").Range("a15").Value = Sheets("Evolution").Range("a65536").End(xlUp).Offset(-3, 0).Value
Sheets("recap rapport").Range("a14").Value = Sheets("Evolution").Range("a65536").End(xlUp).Offset(-4, 0).Value
Sheets("recap rapport").Range("a13").Value = Sheets("Evolution").Range("a65536").End(xlUp).Offset(-5, 0).Value
Sheets("recap rapport").Range("a12").Value = Sheets("Evolution").Range("a65536").End(xlUp).Offset(-6, 0).Value
Sheets("recap rapport").Range("a11").Value = Sheets("Evolution").Range("a65536").End(xlUp).Offset(-7, 0).Value
Sheets("recap rapport").Range("a10").Value = Sheets("Evolution").Range("a65536").End(xlUp).Offset(-8, 0).Value
Sheets("recap rapport").Range("a9").Value = Sheets("Evolution").Range("a65536").End(xlUp).Offset(-9, 0).Value
Sheets("recap rapport").Range("a8").Value = Sheets("Evolution").Range("a65536").End(xlUp).Offset(-10, 0).Value
Sheets("recap rapport").Range("a7").Value = Sheets("Evolution").Range("a65536").End(xlUp).Offset(-11, 0).Value



End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : selectionner les cellules visibles d'une liste filtrée

Bonjour Satwaf, bonjour le forum,

Peut-ête comme ça :
Code:
Sub test2()
Dim dl As Long 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim dlf As Range 'déclare la variable dlf (Dernière Ligne de la plage Filtrée)

With Sheets("Evolution") 'prend en compte l'onglet "Evolution"
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne 1 (=A)
    Set pl = .Range("A1:A" & dl) 'définit la plage pl
    For i = 0 To -11 Step -1 'boucle inversée de 0 à -11
        Set dlf = pl.SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeLastCell).Offset(i, 0) 'définit la cellule dlf
        If dlf.Value = 0 Then Exit Sub 'si la valeur de dlf est égale à zéro, sort de la procédure
        'place la valeur de dlf dans la colonne A de l'onglet "recap rapport"
        Sheets("recap rapport").Range("A18").Offset(i, 0).Value = dlf.Value
    Next i 'prochaine valeur de la boucle inversée
End With 'fin de la prise en compte de l'onglet "Evolution"
End Sub

[Edition]
Après test, ça plante... Je planche sur une nouvelle proposition.
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : selectionner les cellules visibles d'une liste filtrée

Bonsoir satwaf,
Bonsoir mon doux Robert :)

J'espère que Robert ne m'en voudra pas trop si je m'immisce, mais j'y avais réfléchi aussi ... je me permets donc
(mais j'attends la proposition du même Robert avec intérêt et un intérêt sincère, s'il est utile de le préciser! ... il me semble que je suis un rien "tortueux" et je ne garantis pas que j'ai bien compris :rolleyes:)
VB:
Sub test()
Dim tablo()
    With Sheets("Evolution")
    Set maPlage = .Range("A2:A" & .Range("A50000").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
    For Each c In maPlage
        ReDim Preserve tablo(x)
        tablo(x) = c
        x = x + 1
    Next c
    nbLignes = Application.Min(maPlage.Count - 1, 11)
    ligne = 2
    For lig = UBound(tablo) To (UBound(tablo) - nbLignes) Step -1
        Sheets("recap rapport").Cells(ligne, 1).Value = tablo(lig)
        ligne = ligne + 1
    Next lig
    End With
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : selectionner les cellules visibles d'une liste filtrée

Bonsoir Satwaf, bonsoir le forum,

Une solution qui fonctionne mais un peu usine à gaz. J'ai pas trouvé mieux...
Code:
Sub test2()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cf As Range 'déclare la variable cf (Cellule Filtrée)
Dim nb As Integer 'déclare la variable nb (NomBre de cellules visible de la plage pl)
Dim tl() As Integer 'déclare le tableau de variables indexées tl (Tableau des Lignes)
Dim i As Integer 'déclare la variable i (Incrément)
Dim j As Integer 'déclare la variable j (incrément)

With Sheets("Evolution") 'prend en compte l'onglet "Evolution"
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne 1 (=A)
    Set pl = .Range("A1:A" & dl) 'définit la plage pl
    nb = pl.SpecialCells(xlCellTypeVisible).Cells.Count 'définit le nombre nb de cellules visibles de la plage filtrée
    ReDim Preserve tl(nb - 1) 'redimensionne le tableau  de ligne tl
    For Each cel In pl.SpecialCells(xlCellTypeVisible) 'boucle sur toutes les cellules visibles de la plage pl
        tl(i) = cel.Row 'récupère le numéro de ligne de la cellule
        i = i + 1 'incrément i
    Next cel 'prochaine cellule de la boucle
    For i = UBound(tl, 1) To UBound(tl, 1) - 11 Step -1 'boucle sur les 12 dernières valeur du tableau tl
        Set cf = .Cells(tl(i), 1) 'définit la cellule filtrée cf
        If cf.Value = 0 Then Exit Sub 'si la valeur de cf est égale à zéro, sort de la procédure
        'place la valeur de cf dans la colonne A de l'onglet "recap rapport"
        Sheets("recap rapport").Range("A18").Offset(j, 0).Value = cf.Value
        j = j - 1 'incrémente négativement j
    Next i 'prochaine valeur de la boucle inversée
End With 'fin de la prise en compte de l'onglet "Evolution"
End Sub

[Édioton]
Bonsoir Modeste on s'est croisé... Solution assez semblable finalement. Sauf que toi tu arrives à l'exprimer plus simplement...
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : selectionner les cellules visibles d'une liste filtrée

Re,

@Robert:
tu arrives à l'exprimer plus simplement
Ah on ne t'a rien dit!? J'ai commencé une Maîtrise en Simplicité (c'est ma 52e année et je continue de progresser!) :p
... Sans blague, si tu ajoutes la déclaration des variables et des commentaires dans mon code de fainéant, la différence doit être mince!

@+
 

satwaf

XLDnaute Occasionnel
Re : selectionner les cellules visibles d'une liste filtrée

Bonjour a tous,
je viens de découvrir le travail formidable que vous avez fait, je viens donc de tester le code de Robert et cela fonctionne a merveille, même si pour Robert cela semble une usine à gaz, mais en tout cas ca fonctionne parfaitement, je peux a présent
récuperer au maximum 12 rapports selectionnés dans ma base, et les repercuter sur une autre feuille.

Encore un grand merci,
j'aimerai savoir programmé comme vous, mais je ne desespére pas d'y arriver un jour
 

Statistiques des forums

Discussions
312 391
Messages
2 087 984
Membres
103 690
dernier inscrit
LeDuc