Sélection sur valeurs

Bonjour à tous,

Voilà je suis débutant sur VBA et je cherche à faire la chose suivante:

Dans mon fichier excel, je voudrait un bouton qui au clique demande quels numéros dans la colonne 1 je veux sélectionner, et puis qui n'affiche que les lignes concernée.

Pour exemple dans mon fichier joint je voudrait sélectionner uniquement les ligne pour les numéros 1245, 5429 et 8745.

Merci d'avance pour votre aide

4exemple.xlsx (8.00 Ko)

Bonjour,

Voilà, tu trouvera ce que tu veux en PJ!

Dit moi si ça tourne comme tu le veux!

Yann

5exempletri.xlsm (18.22 Ko)

Merci beaucoup L-Yann,

Réponse super rapide, et ça marche nickel

Ha en fait j'aurais besoin d'une indication en plus. Dans mon fichier de prod je voudrait trier sur la colonne I

Donc j'ai changé pour derlig = ActiveSheet.Range("I" & Rows.Count).End(xlUp).Row

Mais visiblement ça ne fonctionne pas, que faudrait-il changer de plus svp?

Désolé j'ai pas commenté le code, j'ai fait ça plutôt rapidement.

Alors:

  • Remet la colonne A à la place de I, cette ligne sert a compter le nombre de lignes que compte ta base de données!
  • A la place des tabentree(i,1) met tabEntree(i,9)

-> J'ai mis tabentree(i,1) mais ça pourrai être une autre variable à la place de i, (un u, un v, un j^^).

Bref, l'idée c'est que la colonne 1 de tabentree c'est la colonne A de la feuille. Donc si tu veux comparer sur la colonne I de la feuille, il te faut comparer la colonne 9.

Dit moi si c'est bon pour toi!

Yann

Ps: en prime, je viens de te commenter le code (que je n'ai pas adapté pour la colonne I, mais tu devrais avoir assez d'info pour y arriver seul!

Sub TriLignes()

'Déclaration des variables
Dim rez As String
Dim nbrez As Long
Dim i As Long, j As Long, u As Long, v As Long
Dim tabentree() As Variant
Dim derlig As Long, dercol As Long
Dim TB() As String
Dim plusieursLignes As Long

'Capteur de demande de plusieurs lignes
plusieursLignes = False

'recherche de la derniere ligne de la bdd, derniere colonne de la bdd
derlig = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
dercol = ActiveSheet.Cells(1, Cells.Columns.Count).End(xlToLeft).Column

'recupération des data
tabentree = ActiveSheet.Range(Cells(1, 1), Cells(derlig + 1, dercol + 1)).Value

'recupération de la demande de l'inputbox
rez = InputBox("Veuillez saisir les lignes que vous voulez voir affichées." & vbCrLf & vbCrLf & "Dans le cas où vous voulez afficher plusieurs lignes, utilisez / pour séparer les valeurs" & vbCrLf & vbCrLf & "Dans le cas ou vous voulez afficher la totalité des lignes veuillez entrer le mot reset." & vbCrLf & vbCrLf, "Trier les lignes")

'Si tu n'as rien demandé, on sort
If rez = "" Then Exit Sub

'on gele l'affichage de l'écran
Application.ScreenUpdating = False

'on regarde si plusieurs lignes sont demandées
If InStr(rez, "/") > 0 Then
'Si oui on sépare les différentes lignes demandées dans un tableau
    TB = Split(rez, "/")
    'on met le capteur de plusieurs ligne a true
    plusieursLignes = True
End If

'Si on a plusieurs lignes
If plusieursLignes = True Then
'On masque toutes les lignes
ActiveSheet.Cells.EntireRow.Hidden = True
'Pour toutes les lignes demandées
For j = 0 To UBound(TB())
        'Pour toutes les lignes de la base de donnée
        For i = 2 To derlig
            'Si la colonne A = le numéro demandé
            If tabentree(i, 1) = CLng(TB(j)) Then
                'on affiche la ligne
                ActiveSheet.Cells(i, 1).EntireRow.Hidden = False
            End If

        Next i
Next j

Else
    'ici on est dans le cas ou une seule valeur a été entrée
    'si tu as entré reset
    If rez = "reset" Then
            'on affiche toutes les lignes de la feuille
            ActiveSheet.Cells.EntireRow.Hidden = False

    Else
        'Sinon on parcourt les lignes de la bdd
        For i = 2 To derlig
            'Si la cellule de la colonne A est diff du num demandé
            If tabentree(i, 1) <> CLng(rez) Then
                'On masque la ligne
                ActiveSheet.Cells(i, 1).EntireRow.Hidden = True
            End If

        Next i

    End If

End If
'On dégèle l'écran
Application.ScreenUpdating = True
End Sub

Merci pour la réponse,

Malheureusement, ça bloque systématiquement sur ActiveSheet.Cells.EntireRow.Hidden = True

Une solution?

Bizarre, ça ne devrais pas. Cette ligne veux juste dire de masquer toutes les lignes de la feuille active..

Tu es bien sur la feuille que tu veux trier? Cette feuille n'est pas verrouillée? Le bug est arrivé après les changements que tu as fait?

Dans le doute, met moi ton fichier en PJ,, que je regarde de plus pret!

Yann

Voilà où j'en suis.

Merci encore pour ton aide.

3exempletri.xlsm (20.53 Ko)

Ah oui, c'est pas le même tableau ça!

C'est ton tableau final? Sans les entêtes, commençant a la colonne I et avec juste 3 colonnes?

Si c'est le cas, pour adapter en effet, il te faut :

  • Remettre I à la place de A comme tu l'avais fait tout à l'heure.
  • Remplacer For i = 2 to derlig par For i = 1 to derlig.

Par contre, aucune trace de bug de mon coté..!

Yann

C'est de ma faute, j'ai fait des faux tableau, du coup ça ne correspondait pas assez à mon fichier de prod.

Voici donc l'original en version light (seulement quelques lignes)

2test-tri.xlsm (17.67 Ko)

Ok, en effet c'est pas le même tableau!

Je t'adapte la macro, et je te renvois le fichier!

Une question cependant, pour compter le nombre de ligne de ta database, il me faut une colonne pour laquelle il y aura forcement une data par ligne.

Ici la colonne A est vide, la macro considèrera que ta database est vide! Je peux m'appuyer sur quelle colonne pour être sur de compter la totalité de tes lignes?

Yann

Ok, ben sauf si ça pose un souci tu peux te baser sur la colonne I

Merci

Voilà!

De mon coté aucun bug avec la ligne en question.; J'ai adapté ta macro à ton fichier, tout devrait bien se passer maintenant!

Yann

4test-tri.xlsm (26.83 Ko)

Super, merci beaucoup c'est parfait

Esno

Rechercher des sujets similaires à "selection valeurs"