Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 [Résolu] Bouton nommé par exemple C qui va chercher les mots commençants par C dans une colonne

Marboi

XLDnaute Occasionnel
Bonjour à tous, j'ai fait il y a quelques années sous excel 97 le fichier joint. J'ai maintenant un problème de compatibilité avec excel 365 office mondo 2016 (voir la capture d'écran). J'ai modifié le titre du module "Filtre" par "Lettre" mais je ne me rappelle plus du tout comment j'ai pu affecter un nom alphabétique à chaque bouton. Quand je copie un des boutons "C" par exemple dans un autre fichier avec le module renommé, cela fonctionne.
Je voudrai pouvoir réitérer cette possibilité de création de bouton avec recherche alphabétique, dans un nouveau fichier mais j'en suis incapable.
J'ai modifié le nom du module "Filtre" par "Lettre" et les boutons jusqu'au bouton "La".
Pouvez-vous m'aider ? Merci par avance.
 

Pièces jointes

  • Capture d’écran 2024-10-19 160246.jpg
    43.2 KB · Affichages: 15
  • Liste DVD.xls
    768 KB · Affichages: 11
Solution
Bonjour,
On a eu du mal à cerner votre besoin.
Pour affecter à tous vos boutons, il suffit de lancer cette macro que j'avais incluse dans mes post précédent :
VB:
Sub AffecterMacro()
For Each Sh In ActiveSheet.Shapes
    If Left(Sh.Name, 6) = "Bouton" Then
        ActiveSheet.Shapes(Sh.Name).OnAction = "Lettre"
    End If
Next Sh
End Sub

mapomme

XLDnaute Barbatruc
Bonjour @Marboi ,
  • sélectionner l'ensemble des boutons
  • puis cliquer-droit sur un des boutons sélectionnés
  • choisir le sous-menu "Affecter une macro..."

Puis dans la fenêtre qui se sera ouverte :
  • choisir pour le champ "Macros dans :" dans la liste déroulante la valeur "Ce classeur"
  • choisir la macro "Lettre" dans la liste des macros disponibles
  • cliquez sur OK
nota : il faut bien sûr que la macro "Lettre" soit dans le classeur concerné (celui des boutons)
 

Pièces jointes

  • macros-1.gif
    592.4 KB · Affichages: 4
Dernière édition:

Marboi

XLDnaute Occasionnel
Bonjour, merci de votre réponse, mais ça je sais, c'est ce que j'ai indiqué dans le sujet. Ce que je ne sais plus faire, c'est créer un bouton avec par exemple A qui va me chercher les mots commençants par A dans une colonne. Avant, je crois que c'était grâce à la fonction "Fonction" du bouton que l'on pouvait indiqué BoutonA, BoutonB etc, mais je n'en suis pas sûr et cela n'existe pas dans 365, enfin je crois.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Marboi, Mapomme,
En lançant cette macro on réaffecte à tous les boutons dont le nom commence par "Bouton" la macro Lettre :
VB:
Sub AffecterMacro()
For Each Sh In ActiveSheet.Shapes
    If Left(Sh.Name, 6) = "Bouton" Then
        ActiveSheet.Shapes(Sh.Name).OnAction = "Lettre"
    End If
Next Sh
End Sub
 

Pièces jointes

  • Liste DVD.xls
    859.5 KB · Affichages: 3

Marboi

XLDnaute Occasionnel
Bonjour Sylvanu et merci de votre réponse, en fait ce que je cherche c'est "Je voudrai pouvoir réitérer cette possibilité de création de bouton avec recherche alphabétique, dans un nouveau fichier mais j'en suis incapable" qui soit compatible xlsx ou xlsm.
J'ai essayé de créé un bouton avec la macro lettre, mais rien ne se passe car le bouton ne porte pas la mention "BoutonA" comme dans la capture d'écran.
Si je copie chaque bouton avec sa lettre correspondante dans un nouveau fichier xlsx, ça fonctionne, mais je voulais absolument pouvoir le refaire par création.
 

Pièces jointes

  • Capture d’écran 2024-10-19 175627.jpg
    6.7 KB · Affichages: 4

Gégé-45550

XLDnaute Accro
Bonjour,
Une proposition en PJ utilisant la puissance des tableaux structurés.
Cordialement,
 

Pièces jointes

  • Liste DVD.xlsm
    303.5 KB · Affichages: 5

Marboi

XLDnaute Occasionnel
Bonjour, merci Gégé, effectivement ça fonctionne pas mal, j'avais essayé mais les macros ne fonctionnaient pas (blocage). Après déblocage ça fonctionne bien. Et je fais comment si je veux faire la même chose dans un autre dossier ?

Le problème est que ça utilise toujours mes fameux boutons nommés. Si j'en créé un nouveau et que je lui attribue la lettre F par exemple, rien ne se passe.

J'ai du mal m'exprimer, ce que je voudrai, c'est faire la même chose dans d'autres fichiers mais en créant les boutons, pas en les copiant/collant qui permettraient d'aller directement sur la 1ère lettre concernée dans la liste, comme sur le fichier joint au début.
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Re à tous ,

La petite version de ma pomme.

J'ai ajouté un bouton "Trier" qui trie la plage des DVD selon les titres des DVD. Cette procédure de tri en profite pour mettre les bordures à la plage. Ce tri est utile si on ajoute, supprime ou modifie des titres des DVD.

Pour les autres boutons, le nom des boutons est indifférent et n'a aucune signification.
Ce qui compte, c'est le texte du bouton. Quand on clique sur un bouton, on recherche le titre du premier DVD qui commence par le texte du bouton. Si aucun titre ne répond à cette condition, on revient à la première ligne des DVD.

La meilleure méthode est celle du tableau structuré avec filtrage mais elle a déjà été déjà prise .

Le code est dans module 1 :
VB:
Sub lettre()
Dim modele$, ligne&
   With ActiveSheet
      modele = .Shapes(Application.Caller).DrawingObject.Caption & "*"
      ligne = 3 + Application.IfError(Application.Match(modele, .Range("b4:b" & Rows.Count), 0), 0)
      If ligne = 3 Then ligne = 4: Beep
      ActiveWindow.ScrollRow = ligne
      ActiveWindow.ScrollColumn = 1
   End With
End Sub

Sub trier()
Dim der&
   With ActiveSheet
      If .FilterMode Then .ShowAllData
      der = .Cells(Rows.Count, "b").End(xlUp).Row
      With .Range("a3:f" & der)
         .Sort key1:=.Range("b3"), order1:=xlAscending, MatchCase:=False, Header:=xlYes
         .Borders.LineStyle = xlContinuous
      End With
      .Range(.Cells(der + 1, "a"), .Cells(Rows.Count, "f")).Borders.LineStyle = xlLineStyleNone
      .Range("a4").Select
   End With
End Sub
 

Pièces jointes

  • Marboi-Liste DVD- v1.xlsm
    280.6 KB · Affichages: 5
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
J'ai du mal m'exprimer, ce que je voudrai, c'est faire la même chose dans d'autres fichiers mais en créant les boutons, pas en les copiant/collant
Si j'ai bien compris ...
Plutôt que de vouloir vous compliquer la vie en cherchant le nom du bouton, il est possible d'extraire le texte du bouton, ce qui serait plus simple. Vous n'auriez pas à vous préoccuper du nom du bouton.
Par ex vous créez un bouton et dedans vous écrivez "C", en lançant cette macro vous récupérer le titre "C".
Code:
Sub Lettre()
    Titre = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text
    [J2] = Titre
    If Titre = "Tout Voir" Then
        ActiveSheet.Range("$A$3:$F$274").AutoFilter Field:=2
    Else
        ActiveSheet.Range("$A$3:$F$1000").AutoFilter Field:=2, Criteria1:="=" & Titre & "*", Operator:=xlAnd
    End If
End Sub
En Pj vous appuyez sur un bouton et vous récupérer le texte du bouton en J2.
( C'est juste un exemple bien sur )
 

Pièces jointes

  • Liste DVD (3).xls
    812.5 KB · Affichages: 5

Marboi

XLDnaute Occasionnel
Bonjour Mapomme, Sylvanu, c'est exactement ce que je cherchai, avec l'ancienne macro Lettre, le bouton que je créai en lui indiquant une lettre, n'était pas affecté par la macro et donc rien ne se passait, aucune recherche. Je pensais que c'était à cause du bouton qui était nommé par ladite lettre "BoutonC" pour la lettre C (par exemple) dans mon ancien fichier. Merci beaucoup à vous deux pour votre patience, bonne journée. Merci encore.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
On a eu du mal à cerner votre besoin.
Pour affecter à tous vos boutons, il suffit de lancer cette macro que j'avais incluse dans mes post précédent :
VB:
Sub AffecterMacro()
For Each Sh In ActiveSheet.Shapes
    If Left(Sh.Name, 6) = "Bouton" Then
        ActiveSheet.Shapes(Sh.Name).OnAction = "Lettre"
    End If
Next Sh
End Sub
 

Marboi

XLDnaute Occasionnel
Merci Sylvanu, je pense que je me suis, effectivement, mal exprimé. Je ne trouvai pas le terme exact : bouton"nommé par une lettre"= recherche dans une liste. Je pense que cela aurait était plus simple.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…