IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème avec la méthode find d'un objet Range dans une zone filtrée [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 94
    Par défaut Problème avec la méthode find d'un objet Range dans une zone filtrée
    Bonjour à tous,

    Voilà, j'ai un petit soucis en voulant rechercher/parcourir une valeur dans une colonne qui par ailleurs fait l'objet d'un filtre. J'ai donc un tableau (par exemple A1:D50) pour lequel j'ai activé les filtres (Autofilter) et sélectionné que certaines valeurs de ma colonne B ce qui a pour conséquence de ne m'afficher que 20 lignes de mon tableau sur les 50.

    Maintenant je souhaiterais parcourir ma colonne A par la méthode Find pour repérer toutes les cellules de cette colonne contenant la valeur 2. Je suis en vba et ai donc une ligne de type Activesheet.Range("A1:A50").Find(2, Lookin:= xlValues). Malheureusement je constate que cette méthode ne recherche la valeur 2 que dans les lignes visibles, et ignore les lignes invisilbes de mon objet Range.

    Auriez-vous une piste pour que la recherche se fasse également dans les lignes non visibles (donc ignorées par le filtre en place sur la colonne B) si possible sans avoir à retirer mon filtre puis le réappliquer... Tous les post que j'ai lu concernent en général la façon d'identifier que les cellules visibles, ce qui est plutôt le problème inverse du miens.


    Merci à ceux qui prendront le temps de m'éclairer.

    Stargates

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonsoir,

    Lire le champ A1:D50 dans un tableau et effectuer les recherches dans le tableau par exemple (rapide)
    On peut aussi utiliser application.match sur une colonne.

    Jacques Boisgontier

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Fais une boucle sur la plage de la colonne B.

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 94
    Par défaut
    Merci pour vos réponses. Je vais approfondir la méthode match.

    Qu'entends-tu par "Fais une boucle sur la colonne B" ?

    Je crois que j'ai compris pour la boucle (je suis unpeu lent ce soir...). Le problème est que je souhaite appliquer mon code à un tableau qui peut atteindre 150.000 lignes et je pense que la méthode find et findnext est plus performante que la boucle (si j'arrivais à l'appliquer sur les cellules invisibles).

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Utilise une variable tableau, c'est très rapide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Tablo = Range("B1:B150000")
    For i = 1 To 150000
        If Cells(i, 2) = 2 Then
            MsgBox Cells(i, 2)
        End If
    Next i

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 94
    Par défaut
    Merci, j'avais pas pensé à la variable tableau qui doit effectivement aller beaucoup plus vite qu'une boucle sur les cellules de la feuille. Je vais tester et reviendrai clore le sujet. J'espère que Tablo = Range("A1:A15000") ne charge pas que les cellules visibles...

    Merci encore.
    Stargates

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      a = [A1:A60000]
      v = "Nom50000"
      pos = Application.Match(v, a, 0)
      MsgBox pos
    Jacques Boisgontier

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Des fois, je me mettrais des coups de pied au c..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Tablo As Variant, Ligne
    Ligne = Cells(Rows.Count, 2).End(xlUp).Row
    Tablo = Application.Transpose(Range("B1:B" & Ligne))
    For i = 1 To UBound(Tablo)
        If Tablo(i) = 2 Then
            MsgBox Tablo(i)   'i représente la ligne trouvée
        End If
    Next i

  9. #9
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    Bonjour
    remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Activesheet.Range("A1:A50").Find(2, Lookin:= xlValues).
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Activesheet.Range("A1:A50").Find(2, Lookin:= xlformulas).
    et la recherche se fera également dans les lignes cachées

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec la méthode find
    Par Heuvanek dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 29/06/2015, 09h42
  2. problème avec la méthode find et find next
    Par Sylvie66 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/05/2015, 17h33
  3. Problème avec ma méthode Find
    Par cdurep dans le forum Excel
    Réponses: 2
    Dernier message: 04/03/2014, 10h30
  4. Réponses: 14
    Dernier message: 04/10/2012, 13h14
  5. Réponses: 2
    Dernier message: 05/06/2009, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo