Suppression des barres

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 !

Antho35

XLDnaute Occasionnel
Bonjour,

J'ai créer un mini programes sous VBA, je voudrais que lorsqu'on le lance, il n'est plus aucun barre sous excel (en clair le faire tourner sous excel, mais sans faire voir que c'est du exel).

Si je supprime les barre cela s'applic à l'esnemble de mes fichiers.

Y-a til un code possible pour tout "masquer"

Merci
 
Re : Suppression des barres

Bonjour Antho35,

Si l'utilisateur n'a à aucun moment besoin de saisir/lire des données sur une des feuilles de ton classeur (la saisie/consultation se fait uniquement par le biais de UserForms), tu peux cacher l'application Excel à l'ouverture de ton fichier et la raficher à sa fermeture.

Du coup, tu n'auras que tes UserForms de visible.

Sinon, il faudra programmer la barre des menu. (un exemple parmi plein d'autres sur le net)

a+
 
Re : Suppression des barres

Bonjour Antho, Mromain

Et pourquoi ne pas mettre Excel en plein écran.

Ou comme l'a dit Mromain, masquer Excel avec application.visible=false. Mais attention c'est dangereux et il faut savoir programmer 😉.

Sinon, toucher aux barres d'outils, je le déconseillerai, car on va vers de graves problèmes 😕.
 
Re : Suppression des barres

Re, bonjour Michel, JM

C'est vrai que c'est risqué et qu'il faut savoir programmer, dans le sens où si la macro buge alors que Excel était masqué, une application d'Excel sera en train de tourner, mais inaccessible (dans ce cas là, il faut tuer le processus dans le gestionnaire des tâches).

Mais il y a quand même un moyen assez propre d'éviter ce genre d'erreur.
Prenons le cas de cette macro (qui buge volontairement) :
VB:
Public Sub MaMacro()
Dim nbre As Double

    'ligne qui fait buger la macro
    nbre = 1 / 0
    
End Sub
Si on veut désactiver l'affichage d'Excel, il ne faut pas modifier les options de l'application dans cette macro, mais dans une autre qui va juste servir à lancer celle-ci.
Je ne sais pas si c'est très clair, donc voici le code "préconisé".
VB:
Private Sub MaMacroInt()
Dim nbre As Double

    'ligne qui fait buger la macro
    nbre = 1 / 0
    
End Sub


Public Sub MaMacro()
    'cacher Excel
    Application.Visible = False
    
    '"déseactiver" la gestion des erreurs (dans ce Sub)
    On Error Resume Next
    
     'lancer la macro
     MaMacroInt
    
    '"réactiver" la gestion des erreur
    On Error GoTo 0
    
    'réafficher Excel
    Application.Visible = True
End Sub
De même, lorsqu'on manipule la gestion des évènements, ou le mode de calcul, il vaut mieux gérer ces options dans une macro "spécifique" affin d'être sûr de "remettre" Excel dans le même état :
VB:
Public Sub Macro()
Dim mem1 As Long, mem2 As Long, mem3 As Long
    
    'mémoriser les options d'excel et les désactiver
    mem1 = Application.ScreenUpdating: Application.ScreenUpdating = False           'raffraichissement de l'affichage
    mem2 = Application.EnableEvents: Application.EnableEvents = False               'gestion des évènements
    mem3 = Application.Calculation: Application.Calculation = xlCalculationManual   'mode de calcul
    
    'Exécuter la macro
    On Error Resume Next
     MacroInt
    On Error GoTo 0
    
    'rétablir les options d'excel
    Application.ScreenUpdating = mem1
    Application.EnableEvents = mem2
    Application.Calculation = mem3
    
End Sub


Private Sub MacroInt()

    'code "de traitement"
    '...
    '...
    
End Sub
a+
 
Dernière édition:
Re : Suppression des barres

Bonjour à tous.

Dans mes petites applications, je masque souvent les menus Excel (y compris les menus contextuels du clic droit sur une cellule, que je remplace par un menu contextuel de ma façon) pour empêcher l'utilisateur de faire ce qu'il ne faut pas. Et je les rétablis au moment de la fermeture de l'application.

La solution consistant à mémoriser l'état des menus dans des variables avant de masquer les menus Excel m'ayant posé quelques problèmes (notamment quand l'application perd les variables, ce qui peut arriver), je l'ai abandonnée.

Voici le code que j'utilise sous Excel 2003 pour masquer (et donc rendre inaccessible à l'utilisateur) TOUTES les barres de menu de Excel, SAUF celles que je nomme après le 1er "Case" (je ne me souviens plus s'il fonctionnait sous Excel 97)
ATTENTION : si l'application crée son propre menu, ce menu doit avoir été créé avant le masquage des menus Excel et nommé dans le 1er "Case" de la boucle "For.... Next"

Code:
Private Sub Masquer_Click()
    Dim CBar As CommandBar
    
    For Each CBar In Application.CommandBars
        Select Case CBar.Name
'==> Mettre après le 1er Case le nom des barres de menu à conserver, séparés par une virgule
            Case "Ma_Barre_de_Menu_Perso"
                CBar.Enabled = True
            Case Else
                CBar.Enabled = False
        End Select
    Next
    
End Sub

Voici le code que j'utilise pour rétablir TOUTES les barres de menu au moment de la fermeture de l'application.

1 : Code à placer dans le module de code de l'objet "ThisWorkbook" de l'application
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Retablir_MenusExcel
End Sub

2 : Code à placer dans un module quelconque de l'application
ATTENTION : au moment de l'exécution de cette procédure, la feuille active ne doit pas être une feuille de graphique mais une feuille de calcul normale.
ATTENTION : code corrigé le 04/10/2009 (il y avait une omission pouvant provoquer une erreur : les instructions commençant par "ActiveWindow" ne peuvent être exécutées que si un classeur est ouvert). Le fichier joint a été corrigé le même jour.
Code:
Sub Retablir_MenusExcel()
    Dim CBar As CommandBar
    
Rem     Remet toutes les barres de menu à "Enabled" y compris les barres perso, qu'elles le soient déjà ou pas
    For Each CBar In Application.CommandBars
        CBar.Enabled = True
    Next CBar

Rem     Remet "Visible" les barres de base, qu'elles le soient déjà ou pas
    CommandBars("Worksheet Menu Bar").Visible = True
    CommandBars("Standard").Visible = True
    CommandBars("Formatting").Visible = True

Rem     Supprime le plein écran s'il est actif
    Application.DisplayFullScreen = False
Rem     Rétablit la barre de statut
    Application.DisplayStatusBar = True
Rem     Rétablit la barre de formule
    Application.DisplayFormulaBar = True

Rem     Ne poursuit la procédure que si un classeur est ouvert
    If Workbooks.Count = 0 Then Exit Sub

Rem     Rétablit les entêtes de lignes et colonnes
    ActiveWindow.DisplayHeadings = True
Rem     Rétablit les onglets de feuilles
    ActiveWindow.DisplayWorkbookTabs = True
Rem     Rétablit les barres de défilement
    ActiveWindow.DisplayHorizontalScrollBar = True
    ActiveWindow.DisplayVerticalScrollBar = True

End Sub

Mais l'application peut "planter" et ne pas rétablir les menus. Il est donc impératif de disposer en permanence d'un outil de secours (un fichier Excel contenant le code de rétablissement).

Je joins le fichier de secours que j'utilise et qui peut servir de test.
(nota : la procédure se déclenche par un clic sur une zone de texte à laquelle est attachée une macro, car l'insertion de "CommandButton" dans une feuille de calcul m'a déjà posé des problèmes)

Pour info, j'utilise aussi une astuce pour empêcher l'usage intempestif de la "croix de fermeture Windows", qui pose souvent problème avec des utilisateurs "dans la lune", mais c'est un autre sujet.

Bonne journée.

PS : dans les menus de mes applications, j'ajoute systématiquement un bouton qui me permet, avec un mot de passe, de rétablir les menus Excel quand je veux modifier l'application.
 

Pièces jointes

Dernière édition:
Re : Suppression des barres

Bonjour à tous.

Je trouve dommage de renoncer à masquer les menus Excel dans une application, du simple fait que les risques qui en découlent ont été mis en évidence. On n’avance pas en programmation si l’on refuse les risques ! Et soyons raisonnables : si les développeurs de Excel ont donné la possibilité de masquer les menus et barres d’outils, c’est que c’est faisable sans risque ni de cramer la bécane, ni de bloquer les autres progiciels installés ! Dans la pire des situations, il faudra peut-être désinstaller puis réinstaller Excel, ce qui n’est pas la mer à boire !

Mes expériences d’applications sous Excel m’ont largement prouvé qu’il est utile – voire souvent indispensable – d’interdire aux utilisateurs l’usage des menus et barres d’outils intégrées de Excel (et de la satanée « croix de fermeture », mais c’est un autre sujet), sous peine d’obtenir des résultats surprenants, voire catastrophiques. Mais il est prudent d’inclure dans une barre d’outils de l’application un bouton réservé au développeur, permettant, avec un mot de passe, de rétablir les menus Excel pour modifier ou corriger le code.

Et pour masquer les menus Excel en sécurité dans une application, il faut :
- avoir une « trousse de secours » et savoir l’utiliser, il y en a sur ce site ;
- faire en sorte que l’application crée son propre menu avant de masquer les menus Excel ;
- faire des essais pour déterminer les menus (notamment contextuels) et outils que l’on veut conserver et ceux que l’on veut masquer ;
- tâtonner longtemps pour trouver la meilleure solution, en utilisant les conseils de sites spécialisés : c’est ainsi qu’on apprend.

Dans le cas d’une application qui s’adresse à des utilisateurs néophytes ne sachant pas utiliser une « trousse de secours » et tournant sur plusieurs machines, on peut trouver une solution qui rétablit systématiquement les menus de Excel chaque fois qu’on ouvre ce progiciel, que l’application ait planté ou non.

Je propose ici la mienne, qui fonctionne chez moi (Excel 2003 sous Vista et XP). Les critiques seront bien sûr les bienvenues (serait-ce un « appel du pied » aux experts de ce site ?)

Cette solution consiste à :
1 : Placer dans le dossier « Macros complémentaires » de chaque utilisateur un classeur enregistré en format « Macro complémentaire » (extension « .xla ») et contenant les procédures de rétablissement des menus, lesquelles s’exécutent chaque fois que l’on lance Excel.
2 : Dans Excel, installer cette macro complémentaire avec le menu « Outils / Macros complémentaires »

Pour mettre en place ce système sur plusieurs postes, on peut procéder comme suit :
1 : Créer un dossier « Installation » sur une mémoire amovible (clé USB par exemple)
2 : Créer la macro complémentaire et la sauvegarder dans ce dossier
3 : Créer un classeur d’installation, avec sur la 1ere feuille de calcul un bouton qui lance la procédure d’installation, et le sauvegarder dans ce même dossier
4 : Exécuter sous Excel, pour chaque compte d’utilisateur, le classeur d’installation.

Pour mémoire, le chemin complet du dossier « Macros complémentaires » est sous Vista :
« C:\Users\[Nom de l’utilisateur]\AppData\Roaming\Microsoft\Macros complémentaires »
Et sous XP : « C:\Documents and Settings\[Nom de l’utilisateur]\Application Data\Microsoft\Macros complémentaires »

On peut aussi utiliser les 2 fichiers compressés dans l’archive « Retab Auto MenusExcel.zip » que je joins, et qu’il faudra recopier dans le même dossier sur une clé USB par exemple. Le projet VBA de la macro complémentaire est verrouillé. Le code de déverrouillage est dans son nom (« MenusRetablir_Code_a ») : il s’agit de la lettre « a » en minuscule. En effet, il est utile de verrouiller un projet VBA pour éviter que, en cas de plantage, l’utilisateur néophyte ne se perde pas dans les lignes de code.

Voici le code de ces fichiers :

REMARQUE : il y avait une omission dans le code de ma réponse du 1er octobre : j’ai corrigé le code et le fichier joint le 4 octobre.

1 : Code de la macro complémentaire (nommée ici « Activer Menus Excel.xla »)
1-a : Placer dans le module de code de l’objet « Thisworkbook » le code suivant :
Code:
Private Sub Workbook_Open()
    Activation_Auto_MenusExcel
End Sub

1-b : Placer dans un module quelconque le code suivant :
Code:
Sub Activation_Auto_MenusExcel()
    Dim CBar As CommandBar

Rem     Remet toutes les barres de menu à "Enabled" y compris les barres perso, qu'elles le soient déjà ou pas
    For Each CBar In Application.CommandBars
        CBar.Enabled = True
    Next CBar

Rem     Remet "Visible" les barres de base, qu'elles le soient déjà ou pas
    CommandBars("Worksheet Menu Bar").Visible = True
    CommandBars("Standard").Visible = True
    CommandBars("Formatting").Visible = True

Rem     Supprime le plein écran s'il est actif
    Application.DisplayFullScreen = False
Rem     Rétablit la barre de statut
    Application.DisplayStatusBar = True
Rem     Rétablit la barre de formule
    Application.DisplayFormulaBar = True

Rem     Supprimer cette ligne si on veut garder visibe le "Volet Office"
    Application.CommandBars("Task Pane").Visible = False

Rem     Ne poursuit la procédure que si un classeur est ouvert
    If Workbooks.Count = 0 Then Exit Sub

Rem     Rétablit les entêtes de lignes et colonnes
    ActiveWindow.DisplayHeadings = True
Rem     Rétablit les onglets de feuilles
    ActiveWindow.DisplayWorkbookTabs = True
Rem     Rétablit les barres de défilement
    ActiveWindow.DisplayHorizontalScrollBar = True
    ActiveWindow.DisplayVerticalScrollBar = True
End Sub

2 : Code du classeur d’installation (nommé ici « Installer_ActivationMenusExcel.xls »)
2-a : placer dans un module de code quelconque le code suivant
Code:
Sub Installer_la_Macro()
    Dim i As Integer
    Dim Msg As String
    Dim Usager As String
    Dim NomAddins As String
    Dim CheminCible As String
    Dim CheminSource As String
    Dim Test As Boolean
    
    ' recup le nom du compte utilisateur
    Usager = Application.UserName
    ' stocke le nom de la macro complémentaire
    NomAddins = "Activer Menus Excel.xla"
    
    ' stocke les chemins complets des dossiers
    CheminCible = Application.UserLibraryPath
    CheminSource = ThisWorkbook.Path & "\"

Rem     Vérifie que la macro complémentaire est dans le même dossier que le classeur d'installation
    If Dir(CheminSource & "\" & NomAddins, vbNormal) = "" Then
        MsgBox "La macro complémentaire est introuvable dans le dossier du classeur d'installation !", 16, "MACRO COMPLEMENTAIRE ABSENTE"
        Exit Sub
    End If

Rem     Verifie si la macro existe dans le dossier "Macros complémentaires" de l'utilisateur
        ' et propose de l'y copier si elle en est absente
    Msg = "Compte d'utilisateur : " & Usager
    Msg = Msg & vbCr & "Vérification de la présence de la macro complémentaire """ & NomAddins & """" & vbCr & vbCr
    
    With Application.FileSearch
        .LookIn = CheminCible
        .Filename = NomAddins
        If .Execute > 0 Then
        ' la macro complémentaire a été trouvée
        Msg = Msg & "La macro est présente dans :" & vbCr & CheminCible
            MsgBox Msg, 64, "Installation de " & NomAddins
        Else
        ' la macro complémentaire n'a pas été trouvée
            Msg = Msg & "La macro n'a pas été trouvée." & vbCr
            Msg = Msg & "Cette macro va être copiée dans " & CheminCible
            ' propose de copier la macro complémentaire dans le dossier "Macros complémentaires" de l'utilisateur
            If MsgBox(Msg, 65, "Installation de " & NomAddins) = vbCancel Then
                ' abandonne l'installation si on clique sur "Annuler"
                Exit Sub
            Else
                ' copie la macro complémentaire si on clique sur OK
                FileCopy CheminSource & NomAddins, CheminCible & NomAddins
            End If
        End If
    End With
    
Rem     vérifie si la macro est dans la liste du gestionnaire de macros complémentaires
    For i = 1 To AddIns.Count
        If AddIns(i).FullName = CheminCible & NomAddins Then
            Test = True
            Exit For
        End If
    Next
    
Rem     si elle n'y est pas, propose de l'ajouter
    If Test = False Then
        Msg = "La macro complémentaire va être ajoutée au gestionnaire de macros complémentaires"
        If MsgBox(Msg, 65, "Installation de " & NomAddins) = vbCancel Then
        ' abandonne la procédure si on clique sur Annuler
            Exit Sub
        Else
        ' ajoute la macro au gestionnaire de macros complémentaires si on clique sur OK
            ' NOTE : la commande "Addins.Add" n'accepte pas les variables
            ' il faut donc se placer dans le dossier des macros complémentaires pour pouvoir
            ' l'ajouter au gestionnaire de macros complémentaires et saisir son nom réel
            ' QUI DOIT ETRE LE MEME que pour la variable "NomAddins"
            ChDir CheminCible
            AddIns.Add "Activer Menus Excel.xla", False
        End If
    End If
    
Rem     active la macro si elle ne l'est pas
    For i = 1 To AddIns.Count
        If AddIns(i).FullName = CheminCible & NomAddins Then
            If AddIns(i).Installed = False Then
                AddIns(i).Installed = True
            End If
            Exit For
        End If
    Next
    
Rem     finale
    MsgBox "La macro complémentaire est installée", 64, "Installation de " & NomAddins

End Sub

2-b : Créer un CommandButton de déclenchement (nommé ici "Go") dans une feuille de calcul du classeur et coller dans le module de code de cette feuille le code suivant :
Code:
Private Sub Go_Click()
    Installer_la_Macro
End Sub

Remarques relatives à la sécurité :
1 : Pour que les procédures du classeur d’installation puissent s’exécuter, il faut que le niveau de sécurité de Excel (menu « Outils / Macro / Sécurité ») soit réglé sur le niveau « Moyen » (le niveau « Faible » étant fortement déconseillé)
2 : Le dossier « Macros complémentaires » étant considéré comme un emplacement fiable par l’outil de sécurité de Excel, la macro complémentaire s’exécutera sans message de confirmation quel que soit le niveau de sécurité choisi.
 

Pièces jointes

Re : Suppression des barres

Bonsoir, Staple1600

Quand je dis "interdire aux utilisateurs l’usage des menus et barres d’outils intégrées de Excel", je me place évidemment dans le cadre d'une application sous Excel et non pas dans celui de l'utilisation courante de Excel. Il ne s'agit pas de brimer ceux qui utilisent Excel pour leurs propres besoins !

Dans le cas d'une application, il me paraît légitime de remplacer les menus intégrés par ceux de l'application. D'une part, ça évite à l'utilisateur de l'application de se mélanger les pédales entre les menus intégrés et ceux qui sont propres à l'application (l'image jointe illustre mon propos...). Et d'autre part, ça évite par exemple que l'utilisateur "shunte" les procédures de fermeture de l'application en utilisant le menu intégré "Fichier / Fermer" au lieu du bouton ad hoc du menu de l'application.

Et il me semble que, dans une application, l'utilisateur de l'application n'a pas à faire ce qu'il veut mais seulement ce pour quoi l'application a été développée et ce que le développeur à prévu. Ne sommes-nous pas d'accord sur ce point ?

Cordialement.
Lermiton
 

Pièces jointes

  • Avec Sans.jpg
    Avec Sans.jpg
    46.9 KB · Affichages: 80
Dernière édition:
Re : Suppression des barres

Re

Oui et non
Mon cerveau reptilien étant plutôt Open Source
J'aime pas qu'on impose l'apparence des outils avec lesquels bosser.
(D'ailleurs actuellement je souffre, pas le droit d'utiliser l'invite MsDOS dans mon boulot actuel, et on m'impose IE 7 ! )

En ce qui me concerne je préfère accompagner un néophyte dans un apprentissage d'Excel que de le figer dans l'utilisation d'une appli qui fait peu de cas de son confort d'utilisation.
Quand on sait à quoi servent les menus d'Excel , on sait les utiliser donc pourquoi les cacher ?


Mais bon cela reste une histoire de point vue.

[fiction]
Si je devais bosser avec une de tes applis, la première chose que je ferais c'est de mettre en commentaires tout ton code VBA relatif à la gestion des menus, histoire de retrouver ma liberté de mouvement.
(Maintenant si dans mon contrat, il est stipulé je suis obligé d'utiliser ton appli telle quelle, je rongerai mon frein le temps de développer une appli que j'estimerai meilleure que la tienne sans tous ces menus personnalisés, j'irai voir le boss , pour lui soumettre cet nouvelle appli et alors ... 😀)
[/fiction]
 
Re : Suppression des barres

Euh... on est sur la même longueur d'onde ?

Si l'appli gère des données critiques pour l'entreprise, les recopie sur plusieurs serveurs, les échange avec des machines distantes, etc..., on peut laisser l'utilisateur faire comme il l'entend ? Aïe aïe, bonjour les dégâts...

Et j'ai tiré une leçon de mon expérience en applications sous Excel : le plus difficile est :
1 : de faire quelque chose de vraiment ergonomique, intuitif et agréablement présenté
2 : d'imaginer toutes les fausses manip que pourrait faire
l'utilisateur et les solutions pour y parer

Cordialement.
Et bonne nuit, je vais me coucher !
 
- 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

Réponses
9
Affichages
300
Réponses
3
Affichages
428
Retour