Bonjour,
je voudrais savoir s'il est possible de faire en VBA, pour qu'à l'ouverture
de mon fichier Excel, une fenetre s'affiche avec un choix (Par exemple,
"2005", "2006", et "Administrateur"). Et à partir de ses choix, seules mes
feuilles concernées (13 pour "2005" et "2006", et la totalité pour
"Administrateur") soient visibles.
De plus, pour "Administrateur", un mot de passe s'impose.
Je ne vois pas du tout comment traiter ça, donc si quelqu'un voit ma
solution, ça serait trop sympa.
Merci.
YANN
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
papou
Bonjour Je ne crois pas que cela demande beaucoup de travail. Il faut simplement réfléchir à la méthode à utiliser. Je t'en propose une assez simple : Définir sur toutes les feuilles sauf une la propriété Visible à XlSheetVeryHidden Sur la seule feuille restée visible placer une zone de liste déroulante à partir de la boîte à outils contrôles Pour la propriété ListFillRange, faire référence à une plage de cellules contenant les différents noms d'utilisateurs (je suggère d'éventuellement placer cette plage sur la feuille consultable uniquement par l'administrateur par exemple) Associer à l'évènement Change de la Combobox un contrôle (avec Select Case par exemple) sur la valeur trouvée et en fonction de celle-ci réaffecter la valeur xlSheetVisible aux feuilles qui vont bien. Pour le mot de passe Administrateur, évidemment le plus pro serait de faire un petit Userform avec une zone de texte pour la saisie du mot de passe, mais éventuellement tu peux simplifier à l'extrême avec un InputBox. Pour la sortie, j'utiliserai l'évènement Workbook_BeforeClose pour aller vérifier les propriétés Visible de chaque feuille afin de leur réaffecter la valeur xlsheetveryhidden sauf sur la feuille d'accueil. Avantage : même si les macros ne sont pas activées, par défaut les feuilles ne seront pas affichées. Mais ce n'est qu'une humble suggestion ;-) Bon courage Cordialement Pascal
"YANN24" a écrit dans le message de news:
Bonjour, je voudrais savoir s'il est possible de faire en VBA, pour qu'à l'ouverture de mon fichier Excel, une fenetre s'affiche avec un choix (Par exemple, "2005", "2006", et "Administrateur"). Et à partir de ses choix, seules mes feuilles concernées (13 pour "2005" et "2006", et la totalité pour "Administrateur") soient visibles. De plus, pour "Administrateur", un mot de passe s'impose.
Je ne vois pas du tout comment traiter ça, donc si quelqu'un voit ma solution, ça serait trop sympa. Merci. YANN
Bonjour
Je ne crois pas que cela demande beaucoup de travail.
Il faut simplement réfléchir à la méthode à utiliser.
Je t'en propose une assez simple :
Définir sur toutes les feuilles sauf une la propriété Visible à
XlSheetVeryHidden
Sur la seule feuille restée visible placer une zone de liste déroulante à
partir de la boîte à outils contrôles
Pour la propriété ListFillRange, faire référence à une plage de cellules
contenant les différents noms d'utilisateurs
(je suggère d'éventuellement placer cette plage sur la feuille consultable
uniquement par l'administrateur par exemple)
Associer à l'évènement Change de la Combobox un contrôle (avec Select Case
par exemple) sur la valeur trouvée et en fonction de celle-ci réaffecter la
valeur xlSheetVisible aux feuilles qui vont bien.
Pour le mot de passe Administrateur, évidemment le plus pro serait de faire
un petit Userform avec une zone de texte pour la saisie du mot de passe,
mais éventuellement tu peux simplifier à l'extrême avec un InputBox.
Pour la sortie, j'utiliserai l'évènement Workbook_BeforeClose pour aller
vérifier les propriétés Visible de chaque feuille afin de leur réaffecter la
valeur xlsheetveryhidden sauf sur la feuille d'accueil.
Avantage : même si les macros ne sont pas activées, par défaut les feuilles
ne seront pas affichées.
Mais ce n'est qu'une humble suggestion ;-)
Bon courage
Cordialement
Pascal
"YANN24" <YANN24@discussions.microsoft.com> a écrit dans le message de news:
9AD2A5AB-BB54-49C2-BB0A-C5930470BD28@microsoft.com...
Bonjour,
je voudrais savoir s'il est possible de faire en VBA, pour qu'à
l'ouverture
de mon fichier Excel, une fenetre s'affiche avec un choix (Par exemple,
"2005", "2006", et "Administrateur"). Et à partir de ses choix, seules mes
feuilles concernées (13 pour "2005" et "2006", et la totalité pour
"Administrateur") soient visibles.
De plus, pour "Administrateur", un mot de passe s'impose.
Je ne vois pas du tout comment traiter ça, donc si quelqu'un voit ma
solution, ça serait trop sympa.
Merci.
YANN
Bonjour Je ne crois pas que cela demande beaucoup de travail. Il faut simplement réfléchir à la méthode à utiliser. Je t'en propose une assez simple : Définir sur toutes les feuilles sauf une la propriété Visible à XlSheetVeryHidden Sur la seule feuille restée visible placer une zone de liste déroulante à partir de la boîte à outils contrôles Pour la propriété ListFillRange, faire référence à une plage de cellules contenant les différents noms d'utilisateurs (je suggère d'éventuellement placer cette plage sur la feuille consultable uniquement par l'administrateur par exemple) Associer à l'évènement Change de la Combobox un contrôle (avec Select Case par exemple) sur la valeur trouvée et en fonction de celle-ci réaffecter la valeur xlSheetVisible aux feuilles qui vont bien. Pour le mot de passe Administrateur, évidemment le plus pro serait de faire un petit Userform avec une zone de texte pour la saisie du mot de passe, mais éventuellement tu peux simplifier à l'extrême avec un InputBox. Pour la sortie, j'utiliserai l'évènement Workbook_BeforeClose pour aller vérifier les propriétés Visible de chaque feuille afin de leur réaffecter la valeur xlsheetveryhidden sauf sur la feuille d'accueil. Avantage : même si les macros ne sont pas activées, par défaut les feuilles ne seront pas affichées. Mais ce n'est qu'une humble suggestion ;-) Bon courage Cordialement Pascal
"YANN24" a écrit dans le message de news:
Bonjour, je voudrais savoir s'il est possible de faire en VBA, pour qu'à l'ouverture de mon fichier Excel, une fenetre s'affiche avec un choix (Par exemple, "2005", "2006", et "Administrateur"). Et à partir de ses choix, seules mes feuilles concernées (13 pour "2005" et "2006", et la totalité pour "Administrateur") soient visibles. De plus, pour "Administrateur", un mot de passe s'impose.
Je ne vois pas du tout comment traiter ça, donc si quelqu'un voit ma solution, ça serait trop sympa. Merci. YANN
anonymousA
bonjour,
Créer un userform et avec 1 combobox de 3 items , "2005", "2006","administrateur" et avec 2 boutons dénommé "Annuler" (commandbutton2) et "OK" ( commandbutton1) et 1 textbox (textbox1) avec un label (label1) qu'on appelera textbox1 et label1. Label1 recoit le texte "entrez mot de passe".
Au passage , on prive le userform de la croix en utilisant les API. tu noteras qu'à la fermeture du fichier , celui est considéré comme un addin donc le fichier ne sera visible qu'à condition de passer par le userform. Par ailleurs, si tu veux que le textbox du userform affiche des * quand le mdp est frappé, il faut que tu mettes * dans la propirété Passwordchar du textbox. je t'ai aussi donné un exemple dans la fonction controlmdp d'une saisie possible de plusieurs mdp. c'est à adapter à ta demande bien sur.
Enfin, je n'ai pas prévu de réessais multiples avec une limitation en nombre d'essais ni de retour en arrière quand on a cliqué sur Administrateur.Mais le code est evidemment améliorable
Ecrire dans le code du userform les procédures suivantes 'déclarations API nécessaires pour empêcher l'affichage de la 'croix de fermeture du userform
Private Declare Function GetWindowLongA Lib "user32" _ (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "user32" _ (ByVal hwnd As Long, ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "user32" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub CommandButton2_Click()
'si l'utilisateur clique sur Annuler, on quitte.
Unload Me
ThisWorkbook.Close
End Sub
Private Sub UserForm_Initialize()
'empêche l'affichage de la croix de fermeture en utilisant les API 'déclarées en début de module
Dim hwnd As Long hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _ "X", "D") & "Frame", Me.Caption) SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF
With Me.ComboBox1 .AddItem "2005" .AddItem "2006" .AddItem "Administateur" End With
Case "2005" ThisWorkbook.IsAddin = False For I = 3 To 3 Sheets(I).Visible = True Next
Unload Me
Case "2006" ThisWorkbook.IsAddin = False For I = 2 To 2 Sheets(I).Visible = True Next
Unload Me
Case "Administateur"
With Me .ComboBox1.Visible = False With .TextBox1 .Visible = True .SetFocus End With .Label1.Visible = True End With
End Select
End Sub
Private Sub commandbutton1_Click()
If Me.ComboBox1.Value = "" Then MsgBox "vous n'avez rien saisi" Me.ComboBox1.SetFocus Else If TextBox1.Value = "" Then Else If controlmdp(TextBox1.Value) = True Then ThisWorkbook.IsAddin = False For I = 1 To ThisWorkbook.Sheets.Count Sheets(I).Visible = True Next Unload Me End If End If End If
trouve = Application.WorksheetFunction.HLookup(nommdp, tabmdp, 1, False)
If Err.Number <> 0 Then Err.Clear MsgBox "pas le bon mdp" Else MsgBox "bon mdp" controlmdp = True End If
End Function
puis écrire dans le module thisworkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next Sheets(1).Visible = True For I = 2 To ThisWorkbook.Sheets.Count Sheets(I).Visible = xlSheetVeryHidden Next ThisWorkbook.IsAddin = True
End Sub
Private Sub Workbook_Open()
UserForm1.Show
End Sub
A+
Bonjour, je voudrais savoir s'il est possible de faire en VBA, pour qu'à l'ouverture de mon fichier Excel, une fenetre s'affiche avec un choix (Par exemple, "2005", "2006", et "Administrateur"). Et à partir de ses choix, seules mes feuilles concernées (13 pour "2005" et "2006", et la totalité pour "Administrateur") soient visibles. De plus, pour "Administrateur", un mot de passe s'impose.
Je ne vois pas du tout comment traiter ça, donc si quelqu'un voit ma solution, ça serait trop sympa. Merci. YANN
bonjour,
Créer un userform et avec 1 combobox de 3 items , "2005",
"2006","administrateur" et avec 2 boutons dénommé "Annuler" (commandbutton2)
et "OK" ( commandbutton1) et 1 textbox (textbox1) avec un label (label1)
qu'on appelera textbox1 et label1. Label1 recoit le texte "entrez mot de
passe".
Au passage , on prive le userform de la croix en utilisant les API.
tu noteras qu'à la fermeture du fichier , celui est considéré comme un addin
donc le fichier ne sera visible qu'à condition de passer par le userform.
Par ailleurs, si tu veux que le textbox du userform affiche des * quand le
mdp est frappé, il faut que tu mettes * dans la propirété Passwordchar du
textbox.
je t'ai aussi donné un exemple dans la fonction controlmdp d'une saisie
possible de plusieurs mdp. c'est à adapter à ta demande bien sur.
Enfin, je n'ai pas prévu de réessais multiples avec une limitation en nombre
d'essais ni de retour en arrière quand on a cliqué sur Administrateur.Mais
le code est evidemment améliorable
Ecrire dans le code du userform les procédures suivantes
'déclarations API nécessaires pour empêcher l'affichage de la
'croix de fermeture du userform
Private Declare Function GetWindowLongA Lib "user32" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "user32" _
(ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub CommandButton2_Click()
'si l'utilisateur clique sur Annuler, on quitte.
Unload Me
ThisWorkbook.Close
End Sub
Private Sub UserForm_Initialize()
'empêche l'affichage de la croix de fermeture en utilisant les API
'déclarées en début de module
Dim hwnd As Long
hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
"X", "D") & "Frame", Me.Caption)
SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF
With Me.ComboBox1
.AddItem "2005"
.AddItem "2006"
.AddItem "Administateur"
End With
Case "2005"
ThisWorkbook.IsAddin = False
For I = 3 To 3
Sheets(I).Visible = True
Next
Unload Me
Case "2006"
ThisWorkbook.IsAddin = False
For I = 2 To 2
Sheets(I).Visible = True
Next
Unload Me
Case "Administateur"
With Me
.ComboBox1.Visible = False
With .TextBox1
.Visible = True
.SetFocus
End With
.Label1.Visible = True
End With
End Select
End Sub
Private Sub commandbutton1_Click()
If Me.ComboBox1.Value = "" Then
MsgBox "vous n'avez rien saisi"
Me.ComboBox1.SetFocus
Else
If TextBox1.Value = "" Then
Else
If controlmdp(TextBox1.Value) = True Then
ThisWorkbook.IsAddin = False
For I = 1 To ThisWorkbook.Sheets.Count
Sheets(I).Visible = True
Next
Unload Me
End If
End If
End If
trouve = Application.WorksheetFunction.HLookup(nommdp, tabmdp, 1, False)
If Err.Number <> 0 Then
Err.Clear
MsgBox "pas le bon mdp"
Else
MsgBox "bon mdp"
controlmdp = True
End If
End Function
puis écrire dans le module thisworkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Sheets(1).Visible = True
For I = 2 To ThisWorkbook.Sheets.Count
Sheets(I).Visible = xlSheetVeryHidden
Next
ThisWorkbook.IsAddin = True
End Sub
Private Sub Workbook_Open()
UserForm1.Show
End Sub
A+
Bonjour,
je voudrais savoir s'il est possible de faire en VBA, pour qu'à l'ouverture
de mon fichier Excel, une fenetre s'affiche avec un choix (Par exemple,
"2005", "2006", et "Administrateur"). Et à partir de ses choix, seules mes
feuilles concernées (13 pour "2005" et "2006", et la totalité pour
"Administrateur") soient visibles.
De plus, pour "Administrateur", un mot de passe s'impose.
Je ne vois pas du tout comment traiter ça, donc si quelqu'un voit ma
solution, ça serait trop sympa.
Merci.
YANN
Créer un userform et avec 1 combobox de 3 items , "2005", "2006","administrateur" et avec 2 boutons dénommé "Annuler" (commandbutton2) et "OK" ( commandbutton1) et 1 textbox (textbox1) avec un label (label1) qu'on appelera textbox1 et label1. Label1 recoit le texte "entrez mot de passe".
Au passage , on prive le userform de la croix en utilisant les API. tu noteras qu'à la fermeture du fichier , celui est considéré comme un addin donc le fichier ne sera visible qu'à condition de passer par le userform. Par ailleurs, si tu veux que le textbox du userform affiche des * quand le mdp est frappé, il faut que tu mettes * dans la propirété Passwordchar du textbox. je t'ai aussi donné un exemple dans la fonction controlmdp d'une saisie possible de plusieurs mdp. c'est à adapter à ta demande bien sur.
Enfin, je n'ai pas prévu de réessais multiples avec une limitation en nombre d'essais ni de retour en arrière quand on a cliqué sur Administrateur.Mais le code est evidemment améliorable
Ecrire dans le code du userform les procédures suivantes 'déclarations API nécessaires pour empêcher l'affichage de la 'croix de fermeture du userform
Private Declare Function GetWindowLongA Lib "user32" _ (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "user32" _ (ByVal hwnd As Long, ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "user32" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub CommandButton2_Click()
'si l'utilisateur clique sur Annuler, on quitte.
Unload Me
ThisWorkbook.Close
End Sub
Private Sub UserForm_Initialize()
'empêche l'affichage de la croix de fermeture en utilisant les API 'déclarées en début de module
Dim hwnd As Long hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _ "X", "D") & "Frame", Me.Caption) SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF
With Me.ComboBox1 .AddItem "2005" .AddItem "2006" .AddItem "Administateur" End With
Case "2005" ThisWorkbook.IsAddin = False For I = 3 To 3 Sheets(I).Visible = True Next
Unload Me
Case "2006" ThisWorkbook.IsAddin = False For I = 2 To 2 Sheets(I).Visible = True Next
Unload Me
Case "Administateur"
With Me .ComboBox1.Visible = False With .TextBox1 .Visible = True .SetFocus End With .Label1.Visible = True End With
End Select
End Sub
Private Sub commandbutton1_Click()
If Me.ComboBox1.Value = "" Then MsgBox "vous n'avez rien saisi" Me.ComboBox1.SetFocus Else If TextBox1.Value = "" Then Else If controlmdp(TextBox1.Value) = True Then ThisWorkbook.IsAddin = False For I = 1 To ThisWorkbook.Sheets.Count Sheets(I).Visible = True Next Unload Me End If End If End If
trouve = Application.WorksheetFunction.HLookup(nommdp, tabmdp, 1, False)
If Err.Number <> 0 Then Err.Clear MsgBox "pas le bon mdp" Else MsgBox "bon mdp" controlmdp = True End If
End Function
puis écrire dans le module thisworkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next Sheets(1).Visible = True For I = 2 To ThisWorkbook.Sheets.Count Sheets(I).Visible = xlSheetVeryHidden Next ThisWorkbook.IsAddin = True
End Sub
Private Sub Workbook_Open()
UserForm1.Show
End Sub
A+
Bonjour, je voudrais savoir s'il est possible de faire en VBA, pour qu'à l'ouverture de mon fichier Excel, une fenetre s'affiche avec un choix (Par exemple, "2005", "2006", et "Administrateur"). Et à partir de ses choix, seules mes feuilles concernées (13 pour "2005" et "2006", et la totalité pour "Administrateur") soient visibles. De plus, pour "Administrateur", un mot de passe s'impose.
Je ne vois pas du tout comment traiter ça, donc si quelqu'un voit ma solution, ça serait trop sympa. Merci. YANN