Droit Admin VBA

cs_TTHIERRY Messages postés 50 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 22 décembre 2005 - 21 déc. 2005 à 15:56
kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 - 22 déc. 2005 à 15:41
bonjour,
sur ma feuil1 j'es mis des bouttons en invisible pour les utilisateurs
je ne sais pas comment faire pour que quand l'administrateur met ce boutton visible pour les utilisateurs celui-ci reste visible et de même si il veut les rendres

merci de votre aide
et Bravo pour ce site

TThierry133

3 réponses

kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 2
21 déc. 2005 à 19:17
salut,

Je te propose ceci

Tu rajoute des options pour l'admin pour qu'il puisse décider si les boutons sont visibles.

dans les procédures de modification des controles, tu rajoute le code pour enregistrer les options dans le registre.
Ensuite dans la proc userform_initialize, tu rajoute le code de lecture du registre pour affecter la valeur voulue a CB.visible:

Voici les fonction à utiliser

getsetting : Pour lire les infos du registre
setsetting : Pour les enregistrer

pour info les info sont enregistrer dans HKCU\software\vb and vba program settings.

le pb est que si les utilisateurs n'utilisent pas le même loggin de sessions windows, la lecture des paramètres enregistrer par l'admin ne se fera pas. because HKCU.

Un autre solution consiste à enregistrer les valeurs dans une feuille ecxel dont la propriété visible est à 2.

Sinon tu peux te lancer dans les fichiers INI mais ça deviens compliqué.

exemple pour lire la propriété visible dans une feuille

Monbouton.visible = CBool(Mafeuillecachée.range("a1").value)

et enregistrer
mafeuillecahée.range("a1").value = val(OptionbuttonVisible)

A toi de voir ce qui te conviens le mieux

@++
0
cs_TTHIERRY Messages postés 50 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 22 décembre 2005
22 déc. 2005 à 09:23
merci de ton aide mais je n'es rien compris (je suis débutant)

TThierry133
0
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
+++
0
Rejoignez-nous