OVH Cloud OVH Cloud

Vérouillage des feuilles

6 réponses
Avatar
YANN24
Bonjour,

j'ai un fichier avec une quarantaine de feuille.
Lors de l'ouverture, j'ai un chois par année, et un choix "Administrateur".
Si je choisi l' "Administrateur", je vois toutes les feuilles.
Si je choisi une année, je ne vois que les 13 feuilles correspondantes.

Ce que je voudrais faire c'est vérouiller les feuilles par macro
automatique, sauf pour l'accès par Admin.
Il faut donc que je vérouille les feuilles visibles, mais seulement de la
feuille 1 à 12. (la dernière feuille n'est pas à verouiller).
***Pour l'automatisation, est-il possible de vérouiller chaque feuille
visible si la date à l'ouverture du fichier est vieille de plus d'un mois de
celle de la cellule B5 de chaque feuille? (qui est en format date jj/mm/aa)

Je vous remercie.
YANN

6 réponses

Avatar
Daniel
Bonjour.
Procédure à ajouter eu choix par année :

Sub test()
For Each Sheet In Worksheets
If Sheet.Visible = True And Sheet.Name <> "Feuil13" Then 'remplacer
Feuil13 par le nom de la feuille à ne pas protéger.
Sheet.Protect
End If
Next Sheet
End Sub

Cordialement.
Daniel

"YANN24" a écrit dans le message de news:

Bonjour,

j'ai un fichier avec une quarantaine de feuille.
Lors de l'ouverture, j'ai un chois par année, et un choix
"Administrateur".
Si je choisi l' "Administrateur", je vois toutes les feuilles.
Si je choisi une année, je ne vois que les 13 feuilles correspondantes.

Ce que je voudrais faire c'est vérouiller les feuilles par macro
automatique, sauf pour l'accès par Admin.
Il faut donc que je vérouille les feuilles visibles, mais seulement de la
feuille 1 à 12. (la dernière feuille n'est pas à verouiller).
***Pour l'automatisation, est-il possible de vérouiller chaque feuille
visible si la date à l'ouverture du fichier est vieille de plus d'un mois
de
celle de la cellule B5 de chaque feuille? (qui est en format date
jj/mm/aa)

Je vous remercie.
YANN


Avatar
YANN24
Bonjour,
encore 2 problème:
comment vérouiller en fonction de la date actuelle? est ce possible?
de plus, ma feuille n°13 porte un nom différent chque année. Est ce possible
de faire la procédure en vérouillant les feuilles qui coincide en fonction
des dates, en excluant la feuille 13 (sans la nommer")?

Merci d'avance pour ce problème assez complexe.
YANN


Bonjour.
Procédure à ajouter eu choix par année :

Sub test()
For Each Sheet In Worksheets
If Sheet.Visible = True And Sheet.Name <> "Feuil13" Then 'remplacer
Feuil13 par le nom de la feuille à ne pas protéger.
Sheet.Protect
End If
Next Sheet
End Sub

Cordialement.
Daniel

"YANN24" a écrit dans le message de news:

Bonjour,

j'ai un fichier avec une quarantaine de feuille.
Lors de l'ouverture, j'ai un chois par année, et un choix
"Administrateur".
Si je choisi l' "Administrateur", je vois toutes les feuilles.
Si je choisi une année, je ne vois que les 13 feuilles correspondantes.

Ce que je voudrais faire c'est vérouiller les feuilles par macro
automatique, sauf pour l'accès par Admin.
Il faut donc que je vérouille les feuilles visibles, mais seulement de la
feuille 1 à 12. (la dernière feuille n'est pas à verouiller).
***Pour l'automatisation, est-il possible de vérouiller chaque feuille
visible si la date à l'ouverture du fichier est vieille de plus d'un mois
de
celle de la cellule B5 de chaque feuille? (qui est en format date
jj/mm/aa)

Je vous remercie.
YANN







Avatar
Daniel
Bonjour.
Quand tu rends visible les 13 feuilles, tu connais le nom de la treizième
feuille, sinon, comment procèdes-tu ?
Peux-tu publier ton code ?
Cordialement.
Daniel
"YANN24" a écrit dans le message de news:

Bonjour,
encore 2 problème:
comment vérouiller en fonction de la date actuelle? est ce possible?
de plus, ma feuille n°13 porte un nom différent chque année. Est ce
possible
de faire la procédure en vérouillant les feuilles qui coincide en fonction
des dates, en excluant la feuille 13 (sans la nommer")?

Merci d'avance pour ce problème assez complexe.
YANN


Bonjour.
Procédure à ajouter eu choix par année :

Sub test()
For Each Sheet In Worksheets
If Sheet.Visible = True And Sheet.Name <> "Feuil13" Then
'remplacer
Feuil13 par le nom de la feuille à ne pas protéger.
Sheet.Protect
End If
Next Sheet
End Sub

Cordialement.
Daniel

"YANN24" a écrit dans le message de
news:

Bonjour,

j'ai un fichier avec une quarantaine de feuille.
Lors de l'ouverture, j'ai un chois par année, et un choix
"Administrateur".
Si je choisi l' "Administrateur", je vois toutes les feuilles.
Si je choisi une année, je ne vois que les 13 feuilles correspondantes.

Ce que je voudrais faire c'est vérouiller les feuilles par macro
automatique, sauf pour l'accès par Admin.
Il faut donc que je vérouille les feuilles visibles, mais seulement de
la
feuille 1 à 12. (la dernière feuille n'est pas à verouiller).
***Pour l'automatisation, est-il possible de vérouiller chaque feuille
visible si la date à l'ouverture du fichier est vieille de plus d'un
mois
de
celle de la cellule B5 de chaque feuille? (qui est en format date
jj/mm/aa)

Je vous remercie.
YANN









Avatar
YANN24
Re,
Oui, le nom de la treizieme feuille est connu. Mais la macro que tu m'as
proposé ne marche que pour 1 choix dans mon userform? il faut donc que je
mette une macro par choix? Ou peut on créer une macro générique, qui permet
de ne pas vérouiller la treizième feuille sans la nommer?

Ci après mon code de mon userform? As tu besoin d'autre code?
De plus, lorsque je sélectionne "Admin" à l'ouverture du fichier, il ne
m'affiche pas les premières pages. Mais quand je choisi par exemple 2004 ou
2005 ou 2006, et que je choisi après ma connexion "Admin",(j'ai un bouton
macro sur chaque année qui me rouvre mon userform pour changer de connexion)
là j'ai toutes mes feuilles? Comment ce fait-ce?

Merci d'avance.
YANN

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 "2004"
.AddItem "2005"
.AddItem "2006"
.AddItem "Administrateur"
End With

Me.TextBox1.Visible = False
Me.Label1.Visible = False
End Sub

Private Sub Combobox1_Click()
Select Case Me.ComboBox1.Value

Case "2004"
ThisWorkbook.IsAddin = False
ActiveWorkbook.Unprotect
For I = 11 To 16
Sheets(I).Visible = True
Next
For I = 1 To 10
Sheets(I).Visible = xlSheetVeryHidden
Next
For I = 17 To 43
Sheets(I).Visible = xlSheetVeryHidden
Next
ActiveWorkbook.Protect
Unload Me

Case "2005"
ThisWorkbook.IsAddin = False
ActiveWorkbook.Unprotect
For I = 17 To 29
Sheets(I).Visible = True
Next
For I = 1 To 16
Sheets(I).Visible = xlSheetVeryHidden
Next
For I = 30 To 43
Sheets(I).Visible = xlSheetVeryHidden
Next
ActiveWorkbook.Protect
Unload Me

Case "2006"
ThisWorkbook.IsAddin = False
ActiveWorkbook.Unprotect
For I = 30 To 42
Sheets(I).Visible = True
Next
For I = 1 To 29
Sheets(I).Visible = xlSheetVeryHidden
Next
ActiveWorkbook.Protect
Unload Me

Case "Administrateur"

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
ActiveWorkbook.Unprotect
Sheets(I).Visible = True
ActiveWorkbook.Protect
Next
Unload Me
End If
End If
End If

End Sub
Function controlmdp(nommdp)
On Error Resume Next
tabmdp = Array("24200s")
trouve = Application.WorksheetFunction.HLookup(nommdp, tabmdp, 1, False)
If Err.Number <> 0 Then
Err.Clear
MsgBox "Vous n'êtes pas autoriser à pénétrer cet espace réservé"
Else
MsgBox "Autorisation acceptée"
controlmdp = True
End If
End Function
Avatar
Daniel
Bonjour.
Tu passes la ComboBox1.Value en paramètre et dans celle-ci tu fais le test
pour savoir quelle est la 13e feuille.
Cordialement.
Daniel
"YANN24" a écrit dans le message de news:

Re,
Oui, le nom de la treizieme feuille est connu. Mais la macro que tu m'as
proposé ne marche que pour 1 choix dans mon userform? il faut donc que je
mette une macro par choix? Ou peut on créer une macro générique, qui
permet
de ne pas vérouiller la treizième feuille sans la nommer?

Ci après mon code de mon userform? As tu besoin d'autre code?
De plus, lorsque je sélectionne "Admin" à l'ouverture du fichier, il ne
m'affiche pas les premières pages. Mais quand je choisi par exemple 2004
ou
2005 ou 2006, et que je choisi après ma connexion "Admin",(j'ai un bouton
macro sur chaque année qui me rouvre mon userform pour changer de
connexion)
là j'ai toutes mes feuilles? Comment ce fait-ce?

Merci d'avance.
YANN

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 "2004"
.AddItem "2005"
.AddItem "2006"
.AddItem "Administrateur"
End With

Me.TextBox1.Visible = False
Me.Label1.Visible = False
End Sub

Private Sub Combobox1_Click()
Select Case Me.ComboBox1.Value

Case "2004"
ThisWorkbook.IsAddin = False
ActiveWorkbook.Unprotect
For I = 11 To 16
Sheets(I).Visible = True
Next
For I = 1 To 10
Sheets(I).Visible = xlSheetVeryHidden
Next
For I = 17 To 43
Sheets(I).Visible = xlSheetVeryHidden
Next
ActiveWorkbook.Protect
Unload Me

Case "2005"
ThisWorkbook.IsAddin = False
ActiveWorkbook.Unprotect
For I = 17 To 29
Sheets(I).Visible = True
Next
For I = 1 To 16
Sheets(I).Visible = xlSheetVeryHidden
Next
For I = 30 To 43
Sheets(I).Visible = xlSheetVeryHidden
Next
ActiveWorkbook.Protect
Unload Me

Case "2006"
ThisWorkbook.IsAddin = False
ActiveWorkbook.Unprotect
For I = 30 To 42
Sheets(I).Visible = True
Next
For I = 1 To 29
Sheets(I).Visible = xlSheetVeryHidden
Next
ActiveWorkbook.Protect
Unload Me

Case "Administrateur"

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
ActiveWorkbook.Unprotect
Sheets(I).Visible = True
ActiveWorkbook.Protect
Next
Unload Me
End If
End If
End If

End Sub
Function controlmdp(nommdp)
On Error Resume Next
tabmdp = Array("24200s")
trouve = Application.WorksheetFunction.HLookup(nommdp, tabmdp, 1, False)
If Err.Number <> 0 Then
Err.Clear
MsgBox "Vous n'êtes pas autoriser à pénétrer cet espace réservé"
Else
MsgBox "Autorisation acceptée"
controlmdp = True
End If
End Function


Avatar
YANN24
Merci,
je vais adapter tout ça.
à plus.
YANN


Bonjour.
Tu passes la ComboBox1.Value en paramètre et dans celle-ci tu fais le test
pour savoir quelle est la 13e feuille.
Cordialement.
Daniel
"YANN24" a écrit dans le message de news:

Re,
Oui, le nom de la treizieme feuille est connu. Mais la macro que tu m'as
proposé ne marche que pour 1 choix dans mon userform? il faut donc que je
mette une macro par choix? Ou peut on créer une macro générique, qui
permet
de ne pas vérouiller la treizième feuille sans la nommer?

Ci après mon code de mon userform? As tu besoin d'autre code?
De plus, lorsque je sélectionne "Admin" à l'ouverture du fichier, il ne
m'affiche pas les premières pages. Mais quand je choisi par exemple 2004
ou
2005 ou 2006, et que je choisi après ma connexion "Admin",(j'ai un bouton
macro sur chaque année qui me rouvre mon userform pour changer de
connexion)
là j'ai toutes mes feuilles? Comment ce fait-ce?

Merci d'avance.
YANN

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 "2004"
.AddItem "2005"
.AddItem "2006"
.AddItem "Administrateur"
End With

Me.TextBox1.Visible = False
Me.Label1.Visible = False
End Sub

Private Sub Combobox1_Click()
Select Case Me.ComboBox1.Value

Case "2004"
ThisWorkbook.IsAddin = False
ActiveWorkbook.Unprotect
For I = 11 To 16
Sheets(I).Visible = True
Next
For I = 1 To 10
Sheets(I).Visible = xlSheetVeryHidden
Next
For I = 17 To 43
Sheets(I).Visible = xlSheetVeryHidden
Next
ActiveWorkbook.Protect
Unload Me

Case "2005"
ThisWorkbook.IsAddin = False
ActiveWorkbook.Unprotect
For I = 17 To 29
Sheets(I).Visible = True
Next
For I = 1 To 16
Sheets(I).Visible = xlSheetVeryHidden
Next
For I = 30 To 43
Sheets(I).Visible = xlSheetVeryHidden
Next
ActiveWorkbook.Protect
Unload Me

Case "2006"
ThisWorkbook.IsAddin = False
ActiveWorkbook.Unprotect
For I = 30 To 42
Sheets(I).Visible = True
Next
For I = 1 To 29
Sheets(I).Visible = xlSheetVeryHidden
Next
ActiveWorkbook.Protect
Unload Me

Case "Administrateur"

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
ActiveWorkbook.Unprotect
Sheets(I).Visible = True
ActiveWorkbook.Protect
Next
Unload Me
End If
End If
End If

End Sub
Function controlmdp(nommdp)
On Error Resume Next
tabmdp = Array("24200s")
trouve = Application.WorksheetFunction.HLookup(nommdp, tabmdp, 1, False)
If Err.Number <> 0 Then
Err.Clear
MsgBox "Vous n'êtes pas autoriser à pénétrer cet espace réservé"
Else
MsgBox "Autorisation acceptée"
controlmdp = True
End If
End Function