Sélection multiple dans une seule colonne
Bonjour à tous,
Je dois sélectionner plusieurs nombres dans une seule colonne. Existe-t-il un moyen de filtrer cette colonne en saisissant, par exemple, 100; 115; 321; 450; 600 afin d’afficher uniquement ces valeurs, sachant que c’est un Excel avec plus de 1000 lignes?
Ou bien la seule solution consiste-t-elle à rechercher chaque nombre un par un (rechercher 100, sélectionner, puis rechercher 115, sélectionner, etc.) ?
Merci d’avance !
Hello,
Manière simple, tu crées une colonne à part dans laquelle tu rentreras ta liste de nombre les uns sous les autres.
Dans ta table de données tu rajoutes une colonne de recherchev basique avec un si erreur. Si t’as une correspondance tu laisses sinon tu mets 0. Et ensuite tu fais un filtre sur cette colonne en enlevant les 0. 3 minutes à mettre en place et résultat assuré.
@+
Merci ! Pour l’idée. Sachant que j’ai 15 colonnes, je dois faire une recherche V sur les 15 colonnes j’imagine afin d’avoir la ligne complète ?
Hello,
Comment ça 15 colonnes ? De ce que je comprends, tu as 15 colonnes et il faut que tu en rajoutes une 16eme où tu fais la recherchev avec le critère contenu dans la colonne numéro (100,115,321) et hop.
Après sans fichier c’est plus compliqué de t’aider. Tu peux fournir un fichier anonymisé ?
@+
Bonjour à tous !
Une approche possible : tableau structuré et segment.
----> Pour une aide adaptée de la communauté, merci de préciser, dans votre profil, la nature de votre Excel ( 2019 ? 2021 ? 365 ? ...)
(La langue est une information de très faible importance.)
Bonjour Markaev et bienvenue sur XLP
Dans le classeur, indiquez les valeurs à chercher en colonne M ainsi que les deux options en colonne P. Puis cliquez sur le bouton en orange.
version v1b : prend en compte les cellules affichant des valeurs d'erreurs (on peut donc aussi rechercher des cellules avec erreur)
...
La méthode via VBA est basée sur une fonction générique. cette fonction s'appelle :
RangePlageValeurs(rgPlageRecherche , rgPlageValeur , MajusMinus , InclureVide )
Elle renvoie l'ensemble des cellules (type range) dont la valeur est égale à une des valeurs à trouver (renvoie Nothing si aucune cellule ne répond à la condition).
Elle a quatre paramètres obligatoires (dans l'ordre) :
- rgPlageRecherche de type range qui est la plage de recherche
- rgPlageValeur de type range qui est la plage des valeurs à chercher
- MajusMinus de type Boolean (True ou False) qui indique la prise en compte ou non de la casse
- InclureVide de type Boolean (True ou False) qui indique si on inclut ou exclut dans le résultat les cellules vides
Le texte de la fonction générique dans Module1 :
Function RangePlageValeurs(rgPlageRecherche As Range, rgPlageValeur As Range, MajusMinus As Boolean, InclureVide As Boolean) As Range
' rgPlageRecherche : la plage de recherche
' rgPlageValeur : la plage des valeurs (pas forcément sur la même feuille ou classeur que rgPlageRecherche)
' MajusMinus : si True on tient compte de la casse - si False on ne tient pas compte de la casse
' InclureVide : si True on inclut les cellules vides - si False on exclut les cellules vides
Dim tRech, tval, dlig&, dcol&, i&, j&, k&, ok As Boolean, rgSel As Range, typeCompar, aux
typeCompar = IIf(MajusMinus, vbBinaryCompare, vbTextCompare)
tRech = rgPlageRecherche.Value2: tval = rgPlageValeur.Value2
If Not IsArray(tRech) Then aux = tRech: ReDim tRech(1 To 1, 1 To 1): tRech(1, 1) = aux
If Not IsArray(tval) Then aux = tval: ReDim tval(1 To 1, 1 To 1): tval(1, 1) = aux
For i = 1 To UBound(tval)
If IsError(tval(i, 1)) Then tval(i, 1) = CStr(tval(i, 1))
Next i
dlig = rgPlageRecherche.Row - 1: dcol = rgPlageRecherche.Column - 1
With rgPlageRecherche.Parent
For i = 1 To UBound(tRech): For j = 1 To UBound(tRech, 2)
If IsError(tRech(i, j)) Then tRech(i, j) = CStr(tRech(i, j))
ok = False
For k = 1 To UBound(tval)
If InclureVide And tRech(i, j) = "" Then ok = True: Exit For
If tval(k, 1) <> "" Then
If TypeName(tval(k, 1)) = "String" And TypeName(tRech(i, j)) = "String" Then
If StrComp(tval(k, 1), tRech(i, j), typeCompar) = 0 Then ok = True: Exit For
Else
If tval(k, 1) = tRech(i, j) Then ok = True: Exit For
End If
End If
Next k
If ok Then
If rgSel Is Nothing Then Set rgSel = .Cells(i + dlig, j + dcol) Else Set rgSel = Union(rgSel, .Cells(i + dlig, j + dcol))
End If
Next j, i
End With
If Not rgSel Is Nothing Then Set RangePlageValeurs = rgSel
End FunctionLe code associé au bouton orange est dans le module de Feuil1 :
Sub SelectionnerValeur()
Dim rgRech As Range, derlig&, rgVal As Range, rgCellsOk As Range
Set rgRech = Intersect(Columns("a:g"), Me.UsedRange)
If Me.FilterMode Then Me.ShowAllData
derlig = Cells(Rows.Count, "m").End(xlUp).Row
Set rgVal = Cells(1, "m").Resize(derlig)
Set rgCellsOk = RangePlageValeurs(rgRech, rgVal, [p4] = "Oui", [p1] = "Oui")
rgRech.Cells(1, rgRech.Columns.Count + 1).Select
If Not rgCellsOk Is Nothing Then rgCellsOk.Select
End Sub