masquer les barres affichées chez chaque utilisateur

sniper2002

XLDnaute Occasionnel
bonjour

j'ai un fichier partagé avec plusieurs utilisateurs, je souhaite avoir votre aide afin de perfectionner l'utilisation de ce fichier.
ma question est la suivante : comment masquer toute les barres possible dans ce fichier , j'ai essayer de develeopper une macro en se basant sur ce qui existe sur internet, le probleme c'est que macro marche partiellement, chaque utilisateur peut avoir un nombre de barres précis!
j'ai besoin d'un code qui permet de compter le nombre de barres affichées selon les utilisateurs (première partie) et et de les masquées (2ème partie) (uniquement sur le fichier en question).

je ne sais pas est ce que j'été clair ou pas !!

merci pour votre aide


bonne fin de journée
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : masquer les barres affichées chez chaque utilisateur

Bonjour Sniper, bonjour le forum,

Le problème Sniper c'est que les barres d'outils ne sont pas liées à un fichier mais à l'application. Cela veut dire que si tu les enlèves il te faut les remettre à la fermeture de ton classeur pour ne pas laisser l'utilisateur de ton fichier avec une haine farouche contre toi, te maudissant pendant 25 générations de lui avoir fait disparaître ses chères barres d'outils dont certaines peuvent être personnalisée. Donc méfiance... Ton code dois les compter, les stocker quelque part en mémoire, les effacer et à la fermeture du fichier les remettre...
Je te propose la macro événementielle Open du composant ThisWorkbook qui stocke dans la dernière colonne à l'ouverture du fichier :
Code:
Private Sub Workbook_Open()
Dim cb As CommandBar 'déclare la variable cb (Command Bar)
Dim x As Byte 'déclare la variable x
 
x = 1 'définit la variable x
For Each cb In Application.CommandBars 'boucle sur toutes les barres d'outils
    On Error Resume Next 'évite le bug de la barre de menu
    If cb.Visible = True Then 'condition : si la barre d'outils est visible
        cb.Visible = False 'masque la barres d'outils
        Sheets("Feuil1").Cells(x, 256).Value = cb.Name 'stocke le nom de la barre d'outil dans la dernière colonne (IV)
        x = x + 1 'redéfinit la variable x
    End If 'fin de la condition
Next cb 'prochaine barre d'outils
End Sub
et la macro événementielle BeforeClose qui remet les choses en ordre à la fermeture du fichier :
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each cel In Sheets("Feuil1").Range("IV1").CurrentRegion 'boucles sur toutes les cellules de la colonne IV
    CommandBars(cel.Value).Visible = True 'affiche la barre d'outil correspondante
    cel.Clear 'vide la cellule
Next cel 'prochaine cellule de la boucle
End Sub
 
Dernière édition:

dd25

XLDnaute Nouveau
Re : masquer les barres affichées chez chaque utilisateur

tu peut aussi memorisé toute les barres dans une feuille ce qui permet de tout retrouver si tu arrete ta macro

alors :

' - FillTabBO stocke dans un tableau le nom et l'état de la propriété Visible
' de toutes les barres d'outils existant dans Excel lorsqu'elle est lancée

' - ResetEtatBO rétablit l'état de la propriété Visible enregistré dans le
' tableau par la procédure FillTabBO.

Option Base 1
Dim TabBO

Sub FillTabBO()
'enregistre le nom et l'état de la propriété Visible des barres d'outils
'End Sub
'à appeler par ex dans Workbook_Open
Dim nbBO, i%

nbBO = Application.CommandBars.Count
ReDim TabBO(nbBO, nbBO)
'remplit le tableau avec le nom des barres d'outils
'existantes et l'état de leur propriété Visible
For i = LBound(TabBO, 1) To UBound(TabBO, 1)
TabBO(1, i) = Application.CommandBars(i).Name
TabBO(2, i) = Application.CommandBars(i).Visible
Next i

'Affiche la feuille envirenement utilisateur excel
Sheets("Environement").Select

'Enregistrement
For i = LBound(TabBO, 1) To UBound(TabBO, 1)
Cells(i, 1) = TabBO(1, i)
Cells(i, 2) = TabBO(2, i)
Next i

End Sub

Sub ResetEtatBO()
'rétablit l'état de la propriété Visible des BO enregistré par FillTabBO
'à appeler par ex dans Workbook_BeforeClose
Dim i%
'au cas où une barre d'outils du tableau ait été supprimée entre temps :
On Error Resume Next
'rétablir l'état de la propriété Visible enregistré par FillTabBO
'pour les barres d'outils qui existaient au moment de l'enregistrement
Sheets("Environement").Select
For i = 1 To 200
Application.CommandBars(Range("a" & i).Value).Visible = Range("b" & i)
Next i
End Sub


et tu met FillTabBO dans Workbook_Open
et ResetEtatBo dans Workbook_BeforeClose
 

Discussions similaires

Statistiques des forums

Discussions
314 053
Messages
2 105 101
Membres
109 264
dernier inscrit
lejulpat