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

Dans le code de la feuille "base de données",
vous trouverez une sub "Bld_List" qui vous créera les noms et validation nécessaires .*

VB:
Option Compare Text
Const Row_Data = 4 ' Ligne où commencent les données
Function Bld_List()
    Dim Plage As Range, Cel As Range, Nb_Rows As Long, I As Long
   ' Suppession des noms existants de type Bd_
    On Error Resume Next
    With Me.Names
    For I = .Count To 1 Step -1
        If .Item(I).Name Like "'" & Me.Name & "'!Bd_*" _
        Then .Item(I).Delete
    Next
    End With
    On Error GoTo 0
    
   ' Calcul du nombre de lignes de données
    Nb_Rows = (Cells(Rows.Count, "A").End(xlUp).Row - Cells(Row_Data, "A").Row) + 1
    
    For Each Cel In [E:F].Rows(Row_Data - 1).Cells ' pour Colonnes Nom et Prénom
       ' On crée un nom désignant une plage de données en colonne
        Nameid = "Bd_" & Cel.Address(False, False)
        Set Plage = Cells(Row_Data, Cel.Column).Resize(Nb_Rows)
        Me.Names.Add Nameid, "='" & Me.Name & "'!" & Plage.Address
        Cel.Interior.Color = 3969910
       ' on définit une listes de validation à partir du nom créé
        With Cel.Validation
            .Delete
            .Add Type:=xlValidateList, Formula1:="=" & Nameid
        End With
    Next
End Function
 
Chapeau l'artiste ! Et c'est sincère !
Tout fonctionne à merveille et Goto_site positionne parfaitement les cases désirées sauf pour C qui se positionne en C5 au lieu de C4. J'ai beau essayer de comprendre Goto-Site, je n'y arrive pas.
Il me faut maintenant réussir à exporter ces données vers mon fichier complet... Et comme je ne sais pas créer des User_forms (text ou combo box), j'ai bien du mal à avancer.
Par ailleurs je ne saisis pas le rôle de cette macro :
Private Sub Del_Module()
With ActiveWorkbook.VBProject.VBComponents
For I = .Count To 1 Step -1
Select Case True
Case .Item(I).Type <> 1
Case .Item(I).CodeModule.CountOfLines > 0
Case Else: .Remove .Item(I)
End Select
Next
End With
End Sub

Vous faites tous un super travail que je suis trop nul pour en profiter. C'est désespérant...
Bonne nuit !
 
Chapeau l'artiste ! Et c'est sincère !
Tout fonctionne à merveille et Goto_site positionne parfaitement les cases désirées sauf pour C qui se positionne en C5 au lieu de C4. J'ai beau essayer de comprendre Goto-Site, je n'y arrive pas.
Il me faut maintenant réussir à exporter ces données vers mon fichier complet... Et comme je ne sais pas créer des User_forms (text ou combo box), j'ai bien du mal à avancer.
Par ailleurs je ne saisis pas le rôle de cette macro :
Private Sub Del_Module()
With ActiveWorkbook.VBProject.VBComponents
For I = .Count To 1 Step -1
Select Case True
Case .Item(I).Type <> 1
Case .Item(I).CodeModule.CountOfLines > 0
Case Else: .Remove .Item(I)
End Select
Next
End With
End Sub

Vous faites tous un super travail que je suis trop nul pour en profiter. C'est désespérant...
Bonne nuit !
C'est une sub qui détruit les modules vides du code, vu le nombre existant, cela me gavait de devoir tous les parcourir pour retrouver du code...
 
Bien vu ! Moi aussi ça me gonflait de devoir éplucher tous ces modules vides!
Je vais aller acheter un livre sur le VBA et Excel (les miens datent de 2003 et 2007)
1770618829265.png
se positionne toujours sur C5 et non C4 et je ne comprends tjs pas pourquoi...
J'ai modifié Const Row_Data=3 au lieu de 4... Çà marche mais je ne comprends pas pourquoi.

Bonne journée...
 
Bien vu ! Moi aussi ça me gonflait de devoir éplucher tous ces modules vides!
Je vais aller acheter un livre sur le VBA et Excel (les miens datent de 2003 et 2007)
Regarde la pièce jointe 1227611 se positionne toujours sur C5 et non C4 et je ne comprends tjs pas pourquoi...
J'ai modifié Const Row_Data=3 au lieu de 4... Çà marche mais je ne comprends pas pourquoi.

Bonne journée...
Je vais corriger le goto_site, je sais pourquoi . Le find quand il lance la recherche le fait toujours après la position courante, le début de plage par défaut. On cherche le C qui est en début de données, la recherche se lance donc à partir de la première ligne (exclue), le résultat est donc la deuxième ligne .
 
Sub Corrigée :
VB:
Sub Goto_Site()
    Dim Target As Range, Plage As Range, To_Find As String, Last_Cell As Range
   ' on récupère le 1er caractère du texte contenu dans le bouton
    To_Find = Left(Trim(Shapes(Application.Caller).DrawingObject.Caption), 1)
   ' on définit la plage de données concernée
    Set Last_Cell = Cells(Rows.Count, "A").End(xlUp)
    Set Plage = Range(Cells(Row_Data, "A"), Last_Cell)
   ' on lance la recherche
    Set Target = Plage.Find(To_Find & "*", after:=Last_Cell, LookIn:=xlFormulas, lookat:=xlWhole)
   ' si cellule trouvée, on l'affiche
    If Not Target Is Nothing Then Application.GoTo Target, True
End Sub
 
Hello !
Çà, çà marche...
Par contre, dans le fichier joint (je change de nom parce que j'ai bcp de mal à m'y retrouver dans ma boite de téléchargements) ... Et tu t'en doutes, je suis largué !
Reprenons...
Fichier joint = BdMASSACRE V7 F55
Colonne NOM (mais même chose pour PRENOM).( Cellules E3 et F3).
Les menus déroulants fonctionnent bien mais rien ne se passe après. J'imagine qu'après tous ces échanges, j'aurais dû retrouver mes "petits" (expression angevine). J'attendais, en fait, que "Zorg" ayant été repéré dans la liste déroulante de E3, la ligne 17 s'afficherait.
Je sais que je devrais pouvoir le faire, mais je suis trop nul pour extraire les bons codes d'autres fichiers pour les importer ailleurs.
Ne rigole pas, c'est pénible (j'allais dire autre chose mais pensons aux enfants) de ne pas :
- comprendre certains codes
- utiliser "Functions"
- de ne pas comprendre où se trouvent les macros qui font fonctionner une action et uniquement celle-ci sans être emmerdé (je l'ai dit) par toutes les macros qui font fonctionner de gros fichiers...
Bon, promis, j'arrête de couiner!
Et merci pour ta patience ! (tu as été instituteur dans une vie antérieure ?)
Pierre
 

Pièces jointes

Bonjour Constantin, le forum,

Voici une solution très simple.

Voyez le fichier joint, les listes de validation en A3 E3 F3 et la feuille "Listes".

La macro dans le code de la 1ère feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect([A3,E3:F3], 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("N4:N" & Rows.Count).SpecialCells(xlCellTypeFormulas, 2).Rows.Hidden = True 'masque les textes (vides)
With Sheets("Listes")
    .Columns("A:B").Clear
    Intersect(Columns("E:F"), Range("N4:N" & 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
End With
End Sub
PS : la colonne N ne servait pas à grand-chose, je l'utilise pour filtrer.

A+
 

Pièces jointes

Dernière édition:
Hello !
Çà, çà marche...
Par contre, dans le fichier joint (je change de nom parce que j'ai bcp de mal à m'y retrouver dans ma boite de téléchargements) ... Et tu t'en doutes, je suis largué !
Reprenons...
Fichier joint = BdMASSACRE V7 F55
Colonne NOM (mais même chose pour PRENOM).( Cellules E3 et F3).
Les menus déroulants fonctionnent bien mais rien ne se passe après. J'imagine qu'après tous ces échanges, j'aurais dû retrouver mes "petits" (expression angevine). J'attendais, en fait, que "Zorg" ayant été repéré dans la liste déroulante de E3, la ligne 17 s'afficherait.
Je sais que je devrais pouvoir le faire, mais je suis trop nul pour extraire les bons codes d'autres fichiers pour les importer ailleurs.
Ne rigole pas, c'est pénible (j'allais dire autre chose mais pensons aux enfants) de ne pas :
- comprendre certains codes
- utiliser "Functions"
- de ne pas comprendre où se trouvent les macros qui font fonctionner une action et uniquement celle-ci sans être emmerdé (je l'ai dit) par toutes les macros qui font fonctionner de gros fichiers...
Bon, promis, j'arrête de couiner!
Et merci pour ta patience ! (tu as été instituteur dans une vie antérieure ?)
Pierre
Remettez le Row_Data = 4
 
Sur le fichier du post #23 j'ai modifié la formule de filtrage en N4 :
Code:
=SIERREUR(1/((A$3&E$3&F$3="")+NB.SI(A4;A$3&"*")*NB.SI(E4;"*"&E$3&"*")*NB.SI(F4;"*"&F$3&"*"));"")
Elle permet d'afficher aussi les lignes vides quand A3 E3 F3 sont toutes les trois vides.
 
Sur le fichier du post #23 j'ai modifié la formule de filtrage en N4 :
Code:
=SIERREUR(1/((A$3&E$3&F$3="")+NB.SI(A4;A$3&"*")*NB.SI(E4;"*"&E$3&"*")*NB.SI(F4;"*"&F$3&"*"));"")
Elle permet d'afficher aussi les lignes vides quand A3 E3 F3 sont toutes les trois vides.
Oups... le diner de famille étant fini je retourne à mes moutons... Qu'est devenue ma petite formule qui me permettait d'afficher le n° de ligne sélectionné ? C'est gentil d'ajouter des formules mais encore faudrait-il ne pas dézinguer le peu de boulot que mes pauvres neurones aient réussi à concevoir.
Bonne nuit !
 
Bonjour le forum,
Qu'est devenue ma petite formule qui me permettait d'afficher le n° de ligne sélectionné ?
Ce n'est guère utile mais puisque vous y tenez j'ai ajouté cette macro :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ThisWorkbook.Names.Add "lig", ActiveCell.Row 'nom défini pour la MFC
End Sub
Avec cette formule pour la MFC (jaune) =LIGNE()=lig

A+
 

Pièces jointes

Bonjour Constantin, le forum,

Voici une solution très simple.

Voyez le fichier joint, les listes de validation en A3 E3 F3 et la feuille "Listes".

La macro dans le code de la 1ère feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect([A3,E3:F3], 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("N4:N" & Rows.Count).SpecialCells(xlCellTypeFormulas, 2).Rows.Hidden = True 'masque les textes (vides)
With Sheets("Listes")
    .Columns("A:B").Clear
    Intersect(Columns("E:F"), Range("N4:N" & 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
End With
End Sub
PS : la colonne N ne servait pas à grand-chose, je l'utilise pour filtrer.

A+
Bonjour job75,
Réponse au Post 23.
Désolé d'avoir raté ce post. J'ai oublié de signaler que, n'étant pas "propriétaire" du fichier auquel je destine toutes ces modifications, je ne peux en modifier la structure. Le fichier sur lequel je fais mes essais est expurgé d'environ 10 feuilles et de toutes les macros et calculs trop nombreux pour que je m'y retrouve. Le fichier destinataire (gestion d'une association de jardiniers répartis sur 4 sites)comporte 383 membres. Étant devenu leur trésorier, je suis autorisé à apporter des modifications qui n'affectent ni les calculs ni la structure du fichier (recherche des adhérents, lisibilité du fichier) et ce, moyennant l'autorisation du conseil d'administration. D'où cette simple feuille "Base de données" qui va de A à N au lieu de A à CW...
Donc la colonne N qui semble ne pas servir à grand chose est de fait utilisée dans d'autres feuilles. Donc, "pas touche" au contenu N4:N450...
Bien cordialement,
 
Post 26 : Même réponse qu'en post 29.
Par contre, la formule pour visualiser la ligne saisie est parfaite et me permet de bien visualiser l'adhérent pour renseigner ces versements (cotisation, cautions, date d'opérations...) quant j'ai besoin d'effectuer ces mises à jour.
Merci,
Bonne journée
 
- 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