XL 2021 Recherches de valeurs dans deux colonnes

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Constantin

XLDnaute Occasionnel
Supporter XLD
Bonjour à tous,
J'ai déjà demandé à la communauté de m'éclairer sur ce thème. Gbinforme m'a proposé une solution qui correspondait bien à ma requête, malheureusement, je ne pas réussi à l'adapter au fichier joint. Sylvanu m'a montré comment faire avec les commandes d'Excel, c'est bien mais moins rapide qu'avec la solution de Gbinforme (XLD GBF) que je mets en ligne avec mon fichier qui reproduit la page anonymisée du fichier que, in fine, je veux modifier (BD MASSACRE V5). Ayant oublié comment envoyé de façon nominative (donc à Gbinforme et Sylvanu) je m'adresse à la communauté étant bien sûr ouvert à toutes les suggestions.
Bien à vous tous et bon dimanche.
Constantin
 

Pièces jointes

Solution
Avant qu'on se quitte, puisque vous ne voulez pas qu'on touche à quoi que ce soit, utilisez uniquement cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect([A3:A450,E3:F450], Target) Is Nothing Then Exit Sub
Dim site$, nom$, prenom$, i&, P As Range
site = [A3] & "*": nom = "*" & [E3] & "*": prenom = "*" & [F3] & "*"
Target.Select
Application.ScreenUpdating = False
Rows("4:" & Rows.Count).Hidden = False 'affiche tout
For i = 4 To 450
    If Not (Cells(i, 1) Like site And Cells(i, 5) Like nom And Cells(i, 6) Like prenom) _
        Then Set P = Union(IIf(P Is Nothing, Rows(i), P), Rows(i))
Next
If Not P Is Nothing Then P.Rows.Hidden = True
End Sub
Maintenant il n'y a plus de listes de validation en E3 et F3.
Vu comme ça, je suis d'accord, cette formule, sortie de son contexte, n'a aucun sens. Le petit fichier de travail n'est qu'une petit d'un beaucoup plus gros qui n'est autre qu'un gestionnaire d'une association de jardiniers. Je ne suis pas le concepteur de ce fichier mais seulement utilisateur en tant qu'assistant trésorier de mon épouse. Je vous joins un fichier plus ou moins anonymisé pour que vous vous fassiez une idée. Je peux ajouter des utilitaires de recherche mais je ne peux pas toucher à la structure du fichier et des calculs programmés. Ce fichier n'est pas le plus récent et je n'ai pas réussi à lui ajouter des "boites" de recherche qui fonctionnent (j'ai de belles boites déroulantes mais qui n'affichent rien).
Bonne journée,
 

Pièces jointes

Adapter ce que j'ai fait à votre nouveau fichier ne pose aucun problème.

Il suffit de mettre les formules de filtrage en colonne CW au lieu de la colonne N.

Je les ai améliorées en utilisant dans cette colonne CW la fonction VBA MonFiltre du Module1 :
VB:
Option Compare Text 'la casse est ignoré

Function MonFiltre(Fsite$, site$, Fnom$, nom$, Fprenom$, prenom$) As Variant
If Fsite & Fnom & Fprenom = "" Then MonFiltre = 1: Exit Function
If site Like Fsite & "*" And nom Like "*" & Fnom & "*" And prenom Like "*" & Fprenom & "*" Then MonFiltre = 1 Else MonFiltre = ""
End Function
J'ai aussi amélioré la macro Worksheet_Change de la 1ère feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect([A3:A450,E3:F450], Target) Is Nothing Then Exit Sub
Target.Select
Application.ScreenUpdating = False
Rows("4:" & Rows.Count).Hidden = False 'affiche tout
On Error Resume Next 'si aucune SpecialCell
Range("CW4:CW" & Rows.Count).SpecialCells(xlCellTypeFormulas, 2).Rows.Hidden = True 'masque les textes (vides)
With Sheets("Listes")
    .Columns("A:B").Clear
    Intersect(Columns("E:F"), Range("CW4:CW" & Rows.Count).SpecialCells(xlCellTypeFormulas, 1).EntireRow).Copy .[A1]
    .Columns("A").Sort .Columns("A"), xlAscending, Header:=xlNo 'tri alphabétique
    .Columns("B").Sort .Columns("B"), xlAscending, Header:=xlNo 'tri alphabétique
    .Columns("A").RemoveDuplicates 1, Header:=xlNo 'supprime les doublons
    .Columns("B").RemoveDuplicates 1, Header:=xlNo 'supprime les doublons
End With
End Sub
Elle s'exécute maintenant quand on modifie une cellule quelconque des plages A3:A450 et E3:F450.

Edit : j'ai aussi supprimé les doublons des listes de validation en E3 et F3.
 

Pièces jointes

Dernière édition:
Chapeau ! Çà fonctionne presque parfaitement ! Mais maintenant dites-moi si j'ai compris et surtout ce que je n'ai pas compris :
1 - Il n'est plus question de TextBox ou de ComboBox mais de listes déroulantes programmées avec la macro de la 1ère feuille (je préfère ça)
2 - Pour voir, j'ai remplacé N001 par Zorglub qui est venu se placer naturellement en fin des noms de la feuille liste. Par contre, le prénom n'apparait plus à coté de Zorglub dans Listes. Pas normal. En fait les prénoms ne correspondent plus aux noms. Il y a un bug quelque part... Pour autant, quand je saisi N003, il me propose bien David et non Yvonne comme précisé dans listes. La recherche ne se faitdonc pas dans Listes mais dans base de données ? Je rame !
3 - La feuille liste a t-elle besoin d'être visible ? On peut la masquer ? J'ai regardé les paramètres dans validation des données, tout semble OK. Moi pas comprendre.
4 - Vous avez modifié la colonne CW qui est sensée recenser les jardins occupés (=1) ou libres (=0). Là, je comprends pas ce que me fait cette loi fonction (monFiltre) mais ce n'est pas le but du jeu...
En gros, je suis toujours embêté d'être aussi nul.
Bien à vous,
 

Pièces jointes

Mes réponses à votre post #34 :

1 - Tout à fait.

2 - Dans la feuille "Listes" il n'y a pas de lien entre les noms et les prénoms et c'est normal : les listes de validation servent à la recherche dans la base de données mais la feuille "Listes" ne sert qu'à remplir les listes de validation en E3 et F3.

3 - Oui on peut masquer la feuille "Listes".

4 - Les formules en colonne CW servent uniquement à repérer (valeur 1) les lignes qui doivent être affichées selon les critères en A3 E3 F3.
Si vous voulez connaître les jardins occupés c'est simple : ce sont ceux où il y a un nom en colonne E.
 
Une autre façon de surligner en MFC la ligne sélectionnée :
1770889118258.png
Il faut toutefois mettre dans le code de la feuille :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'ThisWorkbook.Names.Add "lig", ActiveCell.Row 'nom défini pour la MFC
    Me.Calculate
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

A
Réponses
13
Affichages
2 K
A
Retour