Recherche de noms en tapant la 1ère lettre

J2P

XLDnaute Nouveau
Bonjour,
J'ai un fichier excel dans lequel j'ai des colonnes nom, prénom, adresse,...(un répertoire)
Je voudrais créer un bouton qui en le renseignant de la 1ère lettre m'afficherait les noms concernés afin de compléter une autre cellule correspondante dans le tableau.
(Tri comme le fait l'explorateur Windows, par exemple)
Merci de votre aide.
J2P
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Recherche de noms en tapant la 1ère lettre

Bonjour J2P et bienvenu, bonjour le forum,

Puisque tu es nouveau parmi nous, je te recommande de lire la
Lien supprimé du forum qui donne tous les bons plans pour obtenir de l'aide rapidement.
Dans ton cas ce qui pose problème c'est l'absence de fichier exemple et l'absence même d'un début de travail de ta part...
 

J2P

XLDnaute Nouveau
Re : Recherche de noms en tapant la 1ère lettre

Bonsoir,
Merci de cette réponse rapide.
J'ai bien essayé des aides trouvées sur le web, mais sans pouvoir aller assez loin.
Blocage à la création de Userform, si bien est que je doive passer par la ?
Je découvre =ment ce forum et j'espère ne pas faire trop d'erreur.
PJ : fichier "adhésions essaib"
avec le fichier
 

Pièces jointes

  • adhésions essaib.xls
    33 KB · Affichages: 81
  • adhésions essaib.xls
    33 KB · Affichages: 79
  • adhésions essaib.xls
    33 KB · Affichages: 85
Dernière édition:

job75

XLDnaute Barbatruc
Re : Recherche de noms en tapant la 1ère lettre

Bonsoir J2P, salut Robert :)

Voyez le fichier joint qui j'espère vous donnera des idées.

Cette macro est dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ref As Range
Set ref = Intersect(Target.Cells(1, 1), [A1:D1])
If Not ref Is Nothing Then
  ref.Select
  [Z:Z].ClearContents 'RAZ colonne auxiliaire
  If IsEmpty(ref) Then Exit Sub
  Application.ScreenUpdating = False
  Me.AutoFilterMode = False
  With Range(Cells(2, ref.Column), Cells(Rows.Count, ref.Column).End(xlUp))
    .AutoFilter 1, ref.Text & "*" 'filtre automatique
    .SpecialCells(xlCellTypeVisible).Copy [Z1]
    .AutoFilter 'désactive le filtre
  End With
  SendKeys "%{UP}" 'affiche la liste de validation
End If
End Sub
En A1 B1 C1 D1 il y a des listes de validation...

A+
 

Pièces jointes

  • adhésions essaib(1).xls
    48.5 KB · Affichages: 95

job75

XLDnaute Barbatruc
Re : Recherche de noms en tapant la 1ère lettre

Re,

En fait il faut 4 listes de validations distinctes et cette macro :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ref As Range
Set ref = Intersect(Target.Cells(1, 1), [A1:D1])
If Not ref Is Nothing Then
  ref.Select
  ref.Offset(, 26).EntireColumn.ClearContents 'RAZ colonne auxiliaire
  If IsEmpty(ref) Then Exit Sub
  Application.ScreenUpdating = False
  Me.AutoFilterMode = False
  With Range(Cells(2, ref.Column), Cells(Rows.Count, ref.Column).End(xlUp))
    .AutoFilter 1, ref.Text & "*" 'filtre automatique
    .SpecialCells(xlCellTypeVisible).Copy ref.Offset(, 26)
    .AutoFilter 'désactive le filtre
  End With
  SendKeys "%{UP}" 'affiche la liste de validation
End If
End Sub
Par ailleurs il faut mettre la colonne B au format Texte et revalider tous les N° pour que le filtre fonctionne sur cette colonne.

Fichier (2).

A+
 

Pièces jointes

  • adhésions essaib(2).xls
    49 KB · Affichages: 86

job75

XLDnaute Barbatruc
Re : Recherche de noms en tapant la 1ère lettre

Re,

Si le but est uniquement de filtrer, il suffit de laisser le filtre en place :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ref As Range
Set ref = Intersect(Target.Cells(1, 1), [A1:D1])
If Not ref Is Nothing Then
  ref.Select
  Application.ScreenUpdating = False
  Me.AutoFilterMode = False
  ref.Offset(, 26).EntireColumn.ClearContents 'RAZ colonne auxiliaire
  If IsEmpty(ref) Then Exit Sub
  With Range(Cells(2, ref.Column), Cells(Rows.Count, ref.Column).End(xlUp))
    .AutoFilter 1, ref.Text & "*" 'filtre automatique
    .SpecialCells(xlCellTypeVisible).Copy ref.Offset(, 26)
    .AutoFilter 'désactive le filtre pour trier
    ref.Offset(, 26).EntireColumn.Sort ref.Offset(, 26), Header:=xlYes 'tri
    .AutoFilter 1, ref.Text & "*" 'replace le filtre
  End With
  If Not IsEmpty(ref.Offset(2, 26)) Then _
    SendKeys "%{UP}" 'affiche la liste de validation
End If
End Sub
Fichier (3).

Edit 1 : ajouté un tri sur la liste de validation et un test sur SendKeys.

Edit 2 : il faut désactiver le filtre pour pouvoir trier (je découvre).

A+
 

Pièces jointes

  • adhésions essaib(3).xls
    52.5 KB · Affichages: 82
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Recherche de noms en tapant la 1ère lettre

Bonsoir le fil, bonsoir le forum,

Une autre proposition avec une UserForm. En fonction du texte édité la ListBox1 se remplie. Un double-clic sur un des éléments de la ListBox1 permet de récupérer les données dans les 4 textboxes. Il est ensuite possible de modifier une ou plusieurs données. Le clic sur le bouton Ok renvoie les données des textboxes dans le tableau et lance le tri alphabétique par rapport aux noms...
 

Pièces jointes

  • J2P_v01.xls
    56 KB · Affichages: 123
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Re : Recherche de noms en tapant la 1ère lettre

Bonsour®
J'ai un fichier excel dans lequel j'ai des colonnes nom, prénom, adresse,...(un répertoire)
Je voudrais créer un bouton qui en le renseignant de la 1ère lettre m'afficherait les noms concernés afin de compléter une autre cellule correspondante dans le tableau.
(Tri comme le fait l'explorateur Windows, par exemple)

J2P

Utiliser une comboBox dont la propriété MatchEntry avec la valeur 0 -fmMatchEntryFirstLetter
 

Pièces jointes

  • adhésions essaib.xls
    73 KB · Affichages: 98
  • adhésions essaib.xls
    73 KB · Affichages: 92
  • adhésions essaib.xls
    73 KB · Affichages: 87

job75

XLDnaute Barbatruc
Re : Recherche de noms en tapant la 1ère lettre

Bonjour Modeste geedee, le fil,

fmMatchEntryFirstLetter permet d'afficher le 1er item de la ComboBox qui répond au critère.

Mais il semble bien que J2P veuille tous les items concernés :

(...) qui en le renseignant de la 1ère lettre m'afficherait les noms concernés (...)

Edit : au temps pour moi Modeste, en répétant on récupère bien tous les items concernés !

Je ne connaissais pas ça, merci, c'est une solution très élégante.

PS : j'ai édité mon post #6 car le tri de la liste de validation ne se faisait pas avec le filtre en place.

A+
 
Dernière édition:

J2P

XLDnaute Nouveau
Re : Recherche de noms en tapant la 1ère lettre

Bonjour à tous,
Ravi de voir ces réponses.
Les fichiers de job75 fonctionnent, de même que celui de Modeste geedee ;

D’ailleurs l’un et l’autre me conviennent, ma recherche passe toujours par le nom.
J’ai adapté le fichier de job75 au mien qui comporte 560 lignes et 15 colonnes, et ça marche.
Celui de Robert, me donne « erreur 94 » ???
Petit truc : Les 3 me donnent une alerte de sécurité et me demantdent d’activer le contenu.
Je vous remercie tous pour votre aide, super !
J2P
 

job75

XLDnaute Barbatruc
Re : Recherche de noms en tapant la 1ère lettre

Bonjour Fo_rum :)

Tu vas au plus simple, mais il y a encore plus simple et surtout plus rapide.

Appliquer le filtre automatique sur la colonne C et basta :

Code:
Private Sub TextBox1_Change()
  Application.ScreenUpdating = False
  Me.AutoFilterMode = False
  If TextBox1 = "" Then Exit Sub
  Range("C1", Cells(Rows.Count, 3).End(xlUp)).AutoFilter 1, TextBox1 & "*"
End Sub
A+
 

Pièces jointes

  • ListeParInitiales(1).xls
    39 KB · Affichages: 104

J2P

XLDnaute Nouveau
Re : Recherche de noms en tapant la 1ère lettre

Bonsoir job 75,
Le fichier ListePar Initiales va très bien tel que je l'ai reçu.
Par contre, j'ai un soucis pour rajouter des colonnes...

Lorsque je change le C1 en N1 (par exemple), ça ne marche pas.
J2P
 

Fo_rum

XLDnaute Accro
Re : Recherche de noms en tapant la 1ère lettre

Bonsoir,

@Job : merci pour le retour optimisé :) et je permets de répondre.

@J2P : as-tu bien changé les 2 lettres ?

Private Sub TextBox1_Change()
Application.ScreenUpdating = False
Me.AutoFilterMode = False
If TextBox1 = "" Then Exit Sub
Range("N1", Cells(Rows.Count, "N").End(xlUp)).AutoFilter 1, TextBox1 & "*"
End Sub

j'ai mis "N" mais on pourrait se contenter de 14 (n° de colonne).
 

Discussions similaires

Statistiques des forums

Discussions
312 113
Messages
2 085 427
Membres
102 889
dernier inscrit
monsef JABBOUR