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 :

Filtre avec VBA : Des Soucis de compréhension [XL-97]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Par défaut Filtre avec VBA : Des Soucis de compréhension
    Bonjour à tous,
    Voilà, je suis novice dans l'art d'exercer le VBA (et novice , le mot est faible !!) ,
    J'ai un tableau que je voudrais filtrer suivant une colonne ((colonne Phrase de risque ) fichier en annexe) mais avec plusieurs critères sur un même filtre (ou plusieurs choix de recherche ??), je m'explique : dans cette colonne, je dois rechercher certaines valeurs qui sont contenues soit dans une suite (exemple = r34-43-38-60-.... ; r60-34... r28/67...);, soit seules.. r11)) j'ai donc, grâce à vous tous, fait ma p'tite cuisine, et Ô miracle , ça fonctionne que quand les valeurs sont des nombres et non des chiffres (là, il me ressort tous les nombres dont le chiffre est contenu !( ex : pour 8, il filtre 38;48;18;....)
    Et 2eme miracle; il ne veut pas filtrer les 3 critères (ou choix de recherche ??) en même temps....mais que 1 par 1 ...
    Donc, je me dis que je me suis planté qqpart et j'en apelle aux âmes charitables de ce forum pour me donner un coup de main.
    Ouah, plus je me relis, plus je m'y perds .... que c'est dur ce langage venu d'un autre monde !!!!!!!!!!
    Par avance, un grand merci à vous
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut Kalimera18 et le forum
    déjà, tu vas avoir des problème : tu as ua moins un screenupdating qui reste à false
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Bouton15_QuandClic()
    Application.ScreenUpdating = False
    If Sheets("Phrase de Risque").FilterMode = True Then Sheets("Phrase de Risque").ShowAllData
    End Sub
    Pour la macro Private Sub CommandButton1_Click() :
    tu ne peux avoir que 2 critères OU dans un filtre automatique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Criteria1:=TextBox1.Value, Operator:=xlOr, Criteria2:="=*" & TextBox1.Value & "*"
    Tout autre filtrage revient à filtrer avec les 2 nouveaux critères sur les éléments déjà filtrés. Tu as fait 3 ET de 2 OU!

    Soit 2 te suffisent et tu peux continuer en filtre auto. soit il t'en faut plus, et il faut travailler en filtre élaboré.

    Tes fonctions OU ne servent à rien : "X" ou "*X*" revient à écrire "*X*"
    A+

  3. #3
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 70

    Informations forums :
    Inscription : Février 2009
    Messages : 36
    Par défaut
    Bonjour à tous,

    Pourquoi chercher avec les filtres élaborés?

    Une petite macro pourrait donner plus de possibilités, surtout si elle est associée à un formulaire comme c'est le cas.

    Le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub FiltrerLignes(Critère1 As String, Critère2 As String, Critère3 As String)
    Dim nLignes As Integer
    Dim c As Object
    Dim DerLigne As Object
        Set DerLigne = Columns(1).Cells.Find("*", , , , , xlPrevious)
        nLignes = DerLigne.Row
        Range("'Phrase de Risque'!K6:K" & nLignes).EntireRow.Hidden = True
        For Each c In Range("'Phrase de Risque'!K6:K" & nLignes)
            If InStr(UCase(c), UCase(Critère1)) > 0 Then c.EntireRow.Hidden = False
            If InStr(UCase(c), UCase(Critère2)) > 0 Then c.EntireRow.Hidden = False
            If InStr(UCase(c), UCase(Critère3)) > 0 Then c.EntireRow.Hidden = False
        Next
    End Sub
    Permet de balayer l'ensemble des lignes et d'appliquer 3 critères à chaque ligne.

    Les lignes sont initialement masquée, puis seules les lignes qui comportent au moins un critère sont affichées.

    A partir de là, tout est possible avec le formulaire:
    Augmenter les critères, associer un opérateur logique...
    La seule limite: attention à ne pas se noyer.


  4. #4
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Par défaut
    Bonjour à tous et merci de vous pencher sur mon problème .

    Glupps !!! il va vraiment falloir que je potasse "l'art et la manière de comprendre le VBA en 10 leçons, moi !!! Ce ne sont plus des lacunes, c'est un puit sans fond ...!)

    Bon, c'est bien dommage qu'un filtre automatique n'ait que 2 critères, depuis que je farfouine sur ça, je commençais presqu'à comprendre !!!
    Quand au "petit" code à Gégé ....ah, misère , je me noie, !!!!
    Est ce que je remplace mon filtre qu'est pas bon par celui ci, tout bonnement ou je le case ailleurs ??? Si vous pouviez une nouvelle fois éclairer ma lanterne....

    Ah, que tout parait facile lorsqu'on maitrise .....

    A bientôt de vous lire et merci encore
    Kalimera

  5. #5
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 70

    Informations forums :
    Inscription : Février 2009
    Messages : 36
    Par défaut Un peu d'explications
    Re bonjour,

    Faire un formulaire pour résoudre un problème, c'est déjà un pas vers la réussite.

    Je te retourne donc le code transmis prédédemment.

    Je me suis efforcé de l'explicité C'est peut-être pas très clair, mais il ne faut pas oublier la touche magique F1.

    Autre magie de VBA: La fenêtre espion. et le mode pas à pas.
    Je te juggère donc de mettre un point d'arrêt sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call FiltrerLignes(TextBox1.Value, TextBox2.Value, TextBox3.Value)
    qui figure dans le USF.

    Lance une recherche. Lorsque tu seras sur le point d'arrêt,
    Place les variables dans la fenêtre espion:
    Exemple pour la variable "c":
    Double clique sur c, puis clic droit.
    Dans le menu contextuel tu sélectionnes "Ajouter un espion"

    Si la fenêtre espion n'est pas affichée, Affichage/Fenêtre espion

    Ensuite, la touche F8 te permettra de suivre pas à pas toutes les opérations

    Place un maximum de variable dans la fenêtre espion, et normalement, avec un peu de patience, la lumière viendra.

    Courage je sais que s'est long, je suis passé par là.

    Bon week-end
    Fichiers attachés Fichiers attachés

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Par défaut
    Ouah ! c'en est presque ...magique !!!
    Je te dois une fière chandelle et un énorme merci,
    Maintenant il ne me reste plus qu'à m'armer de patience, de calme et de sérénité pour comprendre ce langage venue d'un autre monde donc à moi de jouer, et si tu le permets je reviendrais certainement vers toi pour d'autres explications...
    Je te souhaite une bonne soirée et encore merci pour ta patience

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

Discussions similaires

  1. [XL-2007] copier des lignes d'une feuille à une autre et appliquer des filtres avec VBA
    Par Malek713 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/11/2010, 19h46
  2. Modifier des requêtes Access avec VBA
    Par vuong1 dans le forum Access
    Réponses: 7
    Dernier message: 02/08/2006, 07h09
  3. [VBA] Dissocier des feuilles Excel avec VBA
    Par lezinve dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/03/2006, 16h30
  4. Traitement des tableaux de word avec VBA: balise index
    Par Invité dans le forum VBA Word
    Réponses: 20
    Dernier message: 29/11/2005, 15h39
  5. J'ai des soucis avec Delphi8 ShellExecute...
    Par manu00 dans le forum Delphi .NET
    Réponses: 6
    Dernier message: 25/07/2004, 08h38

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