VBA Excel 2007 boucle sur lignes filtrées

Résolu/Fermé
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 10 nov. 2010 à 16:15
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 16 nov. 2010 à 10:23
Bonjour,

Existe t'il un moyen facile de boucler sur toutes les lignes visibles après un filtre?
Et d'y effectuer un test?

Du genre :
Pour toutes les lignes visibles de la feuille (soit "lig" le num de la ligne visible)
Pour Lig2 = Lig To Fin (bien sur Lig2 est aussi une ligne "visible")
Si cellule "K" & lig = "K" & lig2 Et cellule "F" & lig = - cellule "F" & lig2 Alors
blabla
Fin Si
Lig2 suivante
Ligne visible suivante

Je sais, je ne suis pas clair... en fait, je dois faire une double boucle sur les lignes visibles après filtre...

Vous ai-je précisé que le fichier Excel 2007 en question comporte 500 000 lignes? Non? Ah bon... D'où le filtre initial...

Merci d'avance.

Plus d'infos, n'hésitez pas...


A voir également:

5 réponses

Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
Modifié par Le Pingou le 10/11/2010 à 23:02
Bonjour,
Je ne l'ai pas testé, mais est-ce que cela conviendrait
For Each ligne In Range("maplage").SpecialCells(xlCellTypeVisible).Rows 
numéro = ligne.row 
Next ligne

Note: [maplage] la totalitée des données et ensuite filtrer selon choix et cela devrait marcher.
Salutations.
Le Pingou
6
Utilisateur anonyme
10 nov. 2010 à 22:59
Bonsoir,
Juste une remarque pour compléter la bonne réponse de Le Pingou.
Je ne sais pas si sur excel 2007 le probléme du filtrage suppérieur à 1000 occurences différentes à été résolu....c'est à dire qu'il soit capable de filtrer plus de 1000 occurences différentes car c'est potentiellement possible sur un fichier de 500 000 lignes. Cela étant, Access le fait trés bien.
0
cousinhub29 Messages postés 881 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 avril 2024 333
11 nov. 2010 à 02:37
Bonjour,

Si, effectivement, dans les versions antérieures à 2007, le filtre automatique ne laissait apparaître que les 1000 premières occurrences dans la liste de tri, il n'en était pas moins possible d'effectuer un filtre sur la 1500ème (par ex.) en choisissant "Personnalisé", mais en entrant manuellement la valeur du filtre voulu..
Sous 2007, cette limitation est à 10 000 occurrences différentes...

Bonne journée
0
Utilisateur anonyme
11 nov. 2010 à 11:25
Merci du tuyau, Cousinhub du finistére ?
Par contre je resterai toujours étonné d'utiliser excel sur autant de ligne.
Ceci biensur n'engage que moi.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
11 nov. 2010 à 22:02
Salut,
Je profite de mes 2 minutes de connection chez un pote pour vous dire qu'effectivemnt Access aurait bien mieux géré cette bdd... C'est une demande d'aide reçue par MP ici même que je ne me sens pas capable de traiter seul. Effectivement, il faut une double boucle sur 500 000 lignes... Je reviens lundi pour ce souci. D'ici là, passez un bon week end. J'espère vous retrouver en forme lundi!!
Merci à vous
0
cousinhub29 Messages postés 881 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 avril 2024 333
11 nov. 2010 à 02:54
Bonjour,

Par ce code, tu boucles sur les lignes filtrées, et les variables x1, x2, y1 et y2 te donnent les valeurs des cellules...

A supposer que ton tableau commence bien à la colonne A, sinon il faudra jouer avec l'offset du Range Database...

Sub boucle_sur_lignes_filtrees()
Dim Cel As Range, Cel2 As Range
For Each Cel In Range("_FilterDataBase").Offset(1, 5).Resize(Range("_FilterDataBase"). _
    Rows.Count - 1).SpecialCells(xlCellTypeVisible)
        For Each Cel2 In Range("_FilterDataBase").Offset(1, 5).Resize(Range("_FilterDataBase"). _
            Rows.Count - 1).SpecialCells(xlCellTypeVisible)
                x1 = Cel: x2 = Cel.Offset(, 5)
                y1 = Cel2: y2 = Cel2.Offset(, 5)
        Next Cel2
Next Cel
End Sub


Bon courage
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
11 nov. 2010 à 11:23
Bonjour,
Est-t-il possible de savoir pourquoi il y a 2 boucles, car je pense qu'une est suffisante?
Merci.
Salutations.
Le Pingou
0
cousinhub29 Messages postés 881 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 avril 2024 333
11 nov. 2010 à 11:25
Bonjour,

Je répondais à sa demande, dans laquelle il veut 2 boucles....(sans doute pour voir les doublons au niveau des colonnes F et K...(je ne connais pas la finalité de son projet....)

Bonne journée
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
11 nov. 2010 à 21:58
Salut à tous,
Merci de vous pencher sur mon souci. Je suis désolé de ne pas pouvoir tester, ni vous répondre, j'ai flingué mon ordi... Je vous reprends tout ça lundi... Merci encore en tout cas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
16 nov. 2010 à 10:23
Bonjour à tous,
Merci du coup de main. Nous avons laissé tomber cette idée de double boucle, bien trop complexe sur autant de lignes. La solution passe donc par plusieurs filtres. Vos solutions sont néanmoins fort juste, je les garde donc dans un coin de ma mémoire pour de futures utilisations.
Merci.
A+
0