kalobit
Messages postés
169
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
7 avril 2008
2
22 déc. 2005 à 15:41
Ok, je vais tout reprendre.
On oubli l'option registre de windows et les fichiers INI.
En fait tu va enregistrer les options chosies par l'admin dans le classeur, sur une feuille que les utilisateurs ne peuvent pas voir.
Pour ça, tu choisi une feuile de ton classeur, mettons feuil2.
Dans vba, tu va dans les propriétés de la feuille en question et tu trouve "Visible"
La propriété visible de l'objet Worksheet accèpte 3 valeurs
-1 ou xlsheetvisible : signifie que la feuille est visible de tous
0 ou xlsheethidden : signifie que la feuille est cachée. Toutefois, on peu la rendre visible depuis excel en faisant Format / Feuille / Afficher
2 ou xlsheetveryhidden : signifie que la feuille est vraiment bien cachée (hahaha), c'est à dire que pour l'afficher, tu n'a d'autre choix que de passer par VBA ou VBE. Autrement dit, les utilisateurs ne sauront même pas que cette feuille existe.
Je te propose de faire très simple, tu pourras améliorer plus tard, l'essentiel est de comprendre le principe.
lors de la demande de mot de passe, tu verrifie si c'est bien l'admin et là, tu lui lance une inputbox du genre
dim réponse as string
Dim BtnVisible as boolean
reponse = inputbox("Bonjour admin," & vbcrlf & "Veux tu afficher les boutons pour les utilisateurs ?","Gestion des droits","non")if Ucase(reponse) "OUI" then Btnvisible true else bntvisible = false
Bon, on a récupéré les volontés de notre bon admin, on va maintenant les enregistrer pour pouvoir les appliquer pour tout le monde.
On a donc un truc de genre, à la suite du petit code d'au dessus :
Feuil2.range("A1").value = btnvisible
Pourquoi j'écris Feuil2 et pas worksheets("Feuille 2") ?
Et bien c'est simple et c'est à utiliser sans modération.
Chaque feuille de ton classeur possède entre autre 2 propriétés intéressantes qui sont
Worksheet.name et worksheet.codename, autrement dit, le nom de la feuille en vba.
Pourquoi deux propriétés qui peuvent sembler identiques, et bien c'est simple, la première correspond au nom de la feuille dans l'interface graphique d'excel. Ce nom peut être modifié par tous les utilisateurs, ce qui serait un véritable calvaire pour nous autres programmeurs en herbe qui faisont souvent appel à ces feuilles dans notre code.
C'est pour ça qu'une tête pensente de chez l'ami Bill a pensé à mettre un nom en lecture seule à chaque feuille, qui ne peut être modifié que dans VBE et hors execution. Ce nom peut être utilisé pour appelé la feuille dans ton code sans te soucier du nom qu'ont pu lui donner les utilisateurs car c'est en fait le nom de l'objet feuille en question.
Au lieu de
Worksheets("Feuille 2").visible = -1
on préfèrera
Feuil2.visible = -1
Codename est matérialisé par la propriété (Name) dans VBE et tu ne pourra la changer qu'à partir de là.
Bon retournons à notre code,
On a vu comment demander à l'admin si il veut mètre les boutons visible
on a vu comment sauvegarder sa réponse dans le classeur
on a vu comment éviter que les utilisateurs modifie la feuille
il nous reste à voir comment appliquer les options.
Et bien finalement, c'est la partie la plus simple
Tout juste un ligne de code à rajouter dansle bon évennement, et là, je vais manquer d'infos donc on va Supposer que les boutons sont sur la feuille de calcul appelé feuil1
dans l'évènement Workbook_Open, tu va rajouter ceci
feuil1.Shapes("Button 1").Visible = feuil2.range("a1").value
Autrement dit, à chaque ouverture du classeur, Excel appliquera à la propriété visible du bouton "Button 1" de la feuille feuil1 la valeur décidée par l'admin.
Si tu ne connais pas les nom de tes boutons, voici comment faire :
Tu copie la procédure cidessous, tu l'exécute et regadre le résultat dans le déboggeur (fenêtre d'exécution de VBE)
Sub Trouve_les_nom_des_boutons()
dim Object as Shape
For Each Object In Feuil2.Shapes
If Object.Type = msoFormControl Then
Object.Select
Debug.Print "Nom de l'objet : " & Selection.Name & " - Texte de l'objet : " & Selection.Characters.Text
End If
Next
end sub
Si c'est bien un userform, tu rajoute dans userform_Initialize
Bouton1.visible = feuil2.range("A1").value
et voilà, c'est tout
+++