Filtrer par une fonction VBA

  • Auteur de la discussion Marboi
  • Date de début
M

Marboi

Guest
Bonjour à tous,
Pourriez-vous m'expliquer la manière de procéder (hors le filtre automatique) pour affecter une macro qui me permettrai d'aller directement sur le 1er nom d'une liste dans une colonne en cliquant sur un bouton portant la 1ère lettre : exemple, le bouton intitulé G m'amène directement sur le premier nom commençant par G dans la liste. Je l'ai fait sans aucun problème avec les liens hypertexte, mais à chaque fois que j'ajoute des noms, je suis obligé de décaler les références. Au début ça n'était pas génant, mais maintenant ça devient ardu (plus de 1000 lignes).

PS : Est-il possible de faire de même pour les deux premières initiales etc... ?

Merci d'avance
 
A

AV

Guest
Ave,

Pour la colonne A et avec comme propriété 'Caption' de ton bouton la lettre ou les 2 premières lettres que tu souhaites

Private Sub CommandButton1_Click()
x = CommandButton1.Caption
Range('A' & Application.Match(x & '*', [A:A], 0)).Select
End Sub

AV [MVP Excel]
 
M

Marboi

Guest
Merci AV pour cette réponse rapide. J'ai supprimer la macro du bouton (Button1_quandclick et l'ai remplacé par ta macro. Je crois que je dois être ignare : ça ne marche pas !.... Je joins mon fichier d'exemple, je serai peut-être un peu plus clair.
 
M

Marboi

Guest
Ratez pour le fichier joint, je recommence. :eek: [file name=Filtrer_les_noms.zip size=6657]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Filtrer_les_noms.zip[/file]
 

Fichiers joints

pierrejean

XLDnaute Barbatruc
bonjour Marboi

une solution sur laquelle je travaillais avant d'avoir ton fichier

un peu differente de ce que tu voyais

donne moi ton avis [file name=Filtrerlesnoms.zip size=19618]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Filtrerlesnoms.zip[/file]
 

Fichiers joints

M

Marboi

Guest
:eek:hmy: Ouahh, c'est déjà dans ce que je recherche. La boite de dialogue c'est effectivement pas mal. Deux choses : pourrais-tu m'expliquer pas à pas ta macro, car là je suis complétement largué et je voudrai bien comprendre que telle ou telle nom fait telle ou telle commande, et enfin puis-je modifier la taille du bouton 'chercher' et éventuellement le déplacer. Je suupose que dans cette boîte de dialogue on peut ajouter un bouton ey on peut aussi lui donner l'instruction de retourner sur un menu précis ?

En tout cas, déjà bien le merci pour ta macro.
 

pierrejean

XLDnaute Barbatruc
bonjour Marboi

Il est bien entendu possible de modifier la taille et l'emplacement du bouton chercher

pour cela afficher la boite a outils cliquer sur l'equerre (mode création)

concernant la boite de dialogue il en de même
Quant al'instruction pour aller ailleurs il me faut plus de precision pour te conseiller

ci-dessous le fichier avec le code commenté [file name=Filtrerlesnoms_20060404090453.zip size=19219]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Filtrerlesnoms_20060404090453.zip[/file]
 

Fichiers joints

A

AV

Guest
'... ça ne marche pas !.... '

Salut,

La raison est que tu as utilisé un bouton de la barre d'outil Formulaire.
Ci-joint un fichier utilisant ce type de bouton.
L'adaptation pour ajouter des boutons est simple : Il suffit de nommer les boutons sous la forme 'BoutonXXX' et leur affecter la macro unique.

AV [MVP Excel] [file name=Bouton_Filtre.zip size=9016]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Bouton_Filtre.zip[/file]
 

Fichiers joints

M

Marboi

Guest
Je te remercie, je peux maintenant réduire la taille du bouton et le déplacer dans la feuille (je voulais qu'il soit situé en haut de la feuille), je ne sais pas encore changer la police de caractère ni la couleur mais je vais chercher.
En fait pour 'l'instruction de retourner sur un menu précis', c'était simplement ajouter un bouton dans la boite de dialogue, comme elle reste à l'écran après la demande de recherche, qui fasse retourner au début de la page.

J'aimerai bien comprendre ta macro, j'ai beau la relire, essayer de refaire moi-même, je ne comprends pas ce qui permet de la faire fonctionner. Tous ces termes.... Comment peut-on les connaître, les comprendre et surtout comment les 'compiler' pour obtenir ce résultat ? Merci de ta réponse, j'ai lu pas plus tard qu'hier soir, que John Walkenbach avait écrit des bons bouquins sur excel et notamment un sur la programmation (pour les nuls ?), qu'ne penses-tu ? A+
 
M

Marboi

Guest
Merci AV, ce que tu as fait fonctionne parfaitement. Mais comment as-tu fait pour attribuer à chaque bouton (A, B, C etc) la macro qui lui dit de trouver le nom commençant par A, B, C etc... Je ne le vois pas dans ta macro ni sur le bouton. Peux-tu m'expliquer pour que je puisse continuer sur tout l'alphabet ?

Merci d'avance.

PS : Y-a-t'il un décallage lorsque l'on répond, car lorsque j'ai mis mon message pour remercier Pierrejean, ton message n'était pas présent.
 
M

Marboi

Guest
:woohoo: Ça-y-est, je viens de comprendre : il faut renommer le bouton en le modifiant dans la 'zone de propriété' au dessus de la colonne A de la feuille.
J'ai tout essayé avant, définir >> Nom et ça ne fonctionnait pas. Le fait de cliquer 2 fois sur la zone 'référence' de modifier le nom suffit à faire ce que l'on veut. Génial !... Tu vois, pour toi c'est tellement évident, snif, je ne sais pas si j'y arriverait un jour... :S

Encore Merci

Mais je persiste, si tu veux bien expliquer ta macro par un commentaire ce serait vachement sympa et je finirai par comprendre.
 
A

AV

Guest
'...veux bien expliquer ta macro par un commentaire ...'

Sur le plan de la méthode :
Après avoir dessiné un bouton (barre formulaire) comportant la lettre ou les lettres servant de critère de recherche, clic droit sur le bouton (sélection)--- clic gauche dans la barre de formules ---
Nommer le bouton sous la forme 'BoutonXXX'
XXX reprend la(les) lettre(s) cherchée(s)
PS : Pour nommer le bouton, on fait précéder la lettre de recherche par la chaîne 'Bouton' (toute autre chaîne ferait l'affaire) pour éviter une confusion avec les lettres de colonnes.
Pour affecter la macro au nouveaux boutons : clic droit -- affecter une macro...

Concernant les instructions de la macro :

Sub Filtre()
x = Application.Substitute(Application.Caller(1), 'Bouton', '')
On Error Resume Next
Range('B' & Application.Match(x & '*', [B:B], 0)).Select
End Sub

x= Application.Caller(1) permet de récupérer dans la variable x le nom du bouton
x = Application.Substitute(Application.Caller(1), 'Bouton', '') permet de récupérer dans la variable x le nom du bouton et de remplacer le préfixe 'Bouton' par rien pour ne conserver que la(les) lettre(s) pour la recherche.

On Error Resume Next permet d'ignorer l'erreur déclenchée par une recherche infructueuse

Range('B' & Application.Match(x & '*', [B:B], 0)).Select

La partie : Application.Match(x & '*', [B:B], 0))
renvoie la position (ligne) de la chaîne commençant par x dans la plage B:B
Cela correspond, dans une feuille de calcul, à la formulation suivante :
=EQUIV(x &'*';B:B;0)

L'instruction finale : Range('B' & Application.Match(x & '*', [B:B], 0)).Select
Utilise la concaténation ('B' & N° deligne trouvée) pour définir l'adresse de la cellule et la sélectionner.

AV
MVP (Excel)
 

Hervé

XLDnaute Barbatruc
Bonjour tout le monde :)

en complément de la réponse d'AV, on doit pouvoir se passer de renommer les boutons, en récupérant directement le texte du bouton.

x = Trim(ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text)

salut
 
A

AV

Guest
Re,

x = Trim(ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text)

On pourrait même raccourcir avec :
x = ActiveSheet.DrawingObjects(Application.Caller).Text

mais les noms d'objets du genre 'Machin1' 'Machin2'
...boff..bof..

AV [MVP Excel]
 
M

Marboi

Guest
Merci à vous tous pour cette aide précieuse. Vous manipulez Excel à la perfection. Que me conseillez-vous pour me permettre d'apprendre (un peu déjà) à écrire des macros, livres ou autre.

Encore merci.
 
M

Marboi

Guest
Petite question quand même : si je comprends bien, la ligne de macro
x = Trim(ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text)
prend la place de la ligne de macro
x = Application.Substitute(Application.Caller(1), 'Bouton', '')
ou vient-elle s'ajouter ?
Car j'ai essayé sur un bouton (que je construit avec formulaire) sans le nommer donc, et figurez-vous que ça ne fonctionne pas.
Aurai-je encore oublié quelque chose ?
 

Discussions similaires


Haut Bas