XL 2016 Modele Objet "Application.CommandBars" Chemin Classeur A Pour Création dans un Autres Classeurs B

laurent950

XLDnaute Accro
Bonsoir Le Forum.

' Etats : 2 Classeurs
: Celuis qui contient la procédure de construction "Boutons et Liste déroulante" avec Procédure VBA.."OutilsCommandBar"
: L'autres un Classeur XlSX qui ne conserve pas les procédures VBA..................................."LeClasseurDeTravail.xlsx"

J'ai une question concernant les CommandBar.

Immaginon un classeur "OutilsCreationCommandBar.xlsm" qui contient la procédure de construction d'une :
* CommandBar :
° Décliné en deux Partie
- Une Partie qui sont des bouttons
- Une Partie qui est une liste déroulante.

L'idée est la suivante :
* Immaginon un classeur Excel "LeClasseurDeTravail.xlsx" ou ont aurait besoin ponctuellement d'outils

La Question est la suivante :
* Comment créer les Outils dans le Classeur Excel "LeClasseurDeTravail.xlsx" en "Utilisant le Classeur "OutilsCommandBar" qui contient
le systéme de création de Bouttons et de Liste déroulante.

Explication :
* Le Classeur "OutilsCommandBar" contient le systéme qui permet la création de Barre d'outils "Bouttons" et "Liste Déroulante"

° Il est possible de créer ces outils dans ce même classeur et d'utiliser les deux pocédures Test VBA "sans interet ici juste pour le test"

Demande :
* Comment Utiliser les procédures VBA de construction :
° BarreCommandeBouton (Pour la création des bouttons)
° BarreCommandeMenu (Pour la construction du Menu Déroulant)

* Dans le Fichier Excel "LeClasseurDeTravail.xlsx" qui ne contient pas les procédure VBA (C'est pas un .xslm)

* Dans l'exemple du code (Ci-Dessous) la variable Barre est associer au classeur "OutilsCreationCommandBar.xlsm" qui contient le Code VBA qui tourne !

- Application.CommandBars

j'avais pensais a faire cela
Dim Wkb as Workbook
set Wkb = Workbooks("LeClasseurDeTravail.xlsx")

Puis Wkb.Application.CommandBars

Mais cela ne fonctionne pas ?

J'ai constaté que la cosntruction de la Barre "Bouttons" Ou "Liste Déroulante" se construit que sur le Classeur Actif

J'ai donc rendu le Classeur Actif

Wkb.Activate

est donc la construction de l'outils se réalise bien sur le classeur actif.


La Question :

* Comment retrouver le chemin entre application . Wkb . CommandBars


° Pour éviter de passer par Activate et rendre le classeur actif ("LeClasseurDeTravail.xlsx") est travailler
Seulement en Modéle Objet


Pour Exemple :
* BarreCommandeBouton

Le Début du Code :

Option Explicit
Sub BareCommandeButton()
' Pour Test en Bouttons

Dim Barre As CommandBar
Dim Affiche As CommandBarButton

Set Barre = Application.CommandBars.Add("BarreTest !")

Set Affiche = Barre.Controls.Add
With Affiche
[ Suite du Code ]

End Sub


Tous le Code :
Module Standard : OutilsBarreCommande (Le code associer au deux créations : Boutons et Menu Déroulant"
VB:
Option Explicit
Sub SupEspace()
' Cela ne sert a rien juste pour le test !
Dim plage As Range
    Set plage = Range("A1:A10")
    plage = Application.Trim(plage)
End Sub

Sub MajPhrase()
' Cela ne sert a rien juste pour le test !
Dim plage As Range
Dim Cval As Range
    Set plage = Range("A1:A10")
    For Each Cval In plage
        Cval.Value = UCase(Mid(Cval.Value, 1, 1)) & LCase(Mid(Cval.Value, 2, Len(Cval.Value)))
    Next Cval
    
    plage = Application.Trim(plage)
End Sub

Module Standard : BarreCommandeBouton (Création des boutons via le Complément dans la Barre)
Code:
Option Explicit
Sub BareCommandeButton()
' https://fring.developpez.com/vba/excel/faceid/
' Pour Test en Bouttons

On Error Resume Next
    Application.CommandBars("BarreTest !").Delete
On Error GoTo 0

' Test pour ajouter 2 (VBA) avec Boutons associer a une Barre de Commandes
  Dim Barre As CommandBar
  Dim Affiche As CommandBarButton

    Set Barre = Application.CommandBars.Add("BarreTest !")
 
' Pour ce test
' 2 Procédures VBA Simple pour Test
' Procedure de Nettoyage des Espaces Trim
' Procédure pour mettre la premiere lettre d'une phrase en Majuscule (Le reste en Minuscile)
    
    Set Affiche = Barre.Controls.Add
    With Affiche
        .Caption = "SupEspace"
        .State = msoButtonUp
        .TooltipText = "Supprime tous les espaces du texte à l'exception des espaces simples entre les mots"
        .FaceId = 576
        .OnAction = "SupEspace"
    End With
    
    Set Affiche = Barre.Controls.Add
    With Affiche
        .Caption = "MajPhrase"
        .State = msoButtonUp
        .TooltipText = "Premiére Lettre d'une phrase Majuscule, les autres Minuscules"
        .FaceId = 162
        .OnAction = "MajPhrase"
    End With
    'Application.CommandBars("").Position = msoBarTop
    Barre.Position = msoBarTop
    Barre.Visible = True
End Sub

Module Standard : BarreCommandeMenu (Création de la liste déroulante via le Complément dans la Barre)
Code:
Sub BarreCommandeMenuDeroulant()
' https://fring.developpez.com/vba/excel/faceid/
' Pour Test En Menu Déroulant

On Error Resume Next
    Application.CommandBars(1).Controls("BarreTest !").Delete
On Error GoTo 0

Dim MenuPopup As CommandBarPopup
    Set MenuPopup = Application.CommandBars(1).Controls.Add(Type:=msoControlPopup, temporary:=True)
        MenuPopup.Caption = "BarreTest !"
Dim MenuDeroulant As CommandBarControl

    Set MenuDeroulant = MenuPopup.Controls.Add(Type:=msoControlButton)
    With MenuDeroulant
        .Caption = "SupEspace"
        .State = msoButtonUp
        .TooltipText = "Supprime tous les espaces du texte à l'exception des espaces simples entre les mots"
        .FaceId = 576
        .OnAction = "SupEspace"
    End With
    
    Set MenuDeroulant = MenuPopup.Controls.Add(Type:=msoControlButton)
    With MenuDeroulant
        .Caption = "MajPhrase"
        .State = msoButtonUp
        .TooltipText = "Premiére Lettre d'une phrase Majuscule, les autres Minuscules"
        .FaceId = 162
        .OnAction = "MajPhrase"
    End With

End Sub

L'idée est de connaitre la procédure pour avoir le chemin Application.CommandBars est Variable Objet est évité de passé par l'instruction Activate pour construire ces
deux Outils "Barre Bouton Et Ou Liste Déroulante" en Modéle Objet

Et Connaitre la procédure avec l'instruction Set = Pour initialisé la variable

Si Vous avez la réponse à cette question Merci

Laurent
 

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T