macro et ouverture fichier

ced91300

XLDnaute Occasionnel
Bonjour à tous,

j'ai un classeur Excel planning d'une équipe avec macro mdp utilisateur afin qu'ils n'accèdent qu'a leur propre service
mon problème c'est que si il n'active pas les macros, il peuvent arrivé à voir tout le classeur.
ils peuvent utiliser n'importe quel pc de la boite, et le classeur se trouve dans un serveur

userform ils rentre leur nom + MDP et accès à leur service (une feuil = 1 service)

le classeur comporte 7 feuils dont la feuil01 ou s'affiche l'userform

je souhaiterais que le classeur soit bloquer de toute lecture si ils n'activent pas les macros? ou si il y a à une autre solution?

ThisWorkbook :

Private Sub Workbook_open()
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name <> "Feuil1" Then Ws.Visible = xlSheetVeryHidden
Next Ws
Load UserForm1
UserForm1.show
End Sub

merci
cordialement.

PS: j'ai trouvé cela sur le net mais ne sait pas l'adapté à mon bva

une solution possible serait de créer une feuille affichant le message "Vous devez activer les macros".
Puis :
> à la fermeture du classeur, tu caches toutes les feuilles sauf celle-là
Code (Text):
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Sheets("FeuilleActivationDesMacros").Visible = xlSheetVisible
Dim curSheet As Worksheet
For Each curSheet In ThisWorkbook.Sheets
If curSheet.Name <> "FeuilleActivationDesMacros" Then curSheet.Visible = xlSheetVeryHidden
Next curSheet
ThisWorkbook.Save
End Sub
> à l'ouverture, tu cache cette feuille et affiche les autres
Code (Text):
Private Sub Workbook_Open()
Dim curSheet As Worksheet
For Each curSheet In ThisWorkbook.Sheets
If curSheet.Name <> "FeuilleActivationDesMacros" Then curSheet.Visible = xlSheetVisible
Next curSheet
ThisWorkbook.Sheets("FeuilleActivationDesMacros").Visible = xlSheetVeryHidden
End Sub
si les macros ne sont pas activées, la seule feuille affichée du classeur sera celle contenant le message "Vous devez activer les macros".
 
Dernière édition:

phlaurent55

Nous a quittés en 2020
Repose en paix
Bonjour à tous,

en pièce jointe un petit exemple
si les macros ne sont pas activées à l'ouverture du fichier, il n'est pas possible de voir les feuilles

le code est protégé avec le mot de passe ---> azerty

............ mais pour quelqu'un qui sait s'y prendre, la protection ne tient pas longtemps :(
à+
Philippe
 

Pièces jointes

  • 111.xlsm
    16.8 KB · Affichages: 47

ced91300

XLDnaute Occasionnel
Bonjour à tous,

en pièce jointe un petit exemple
si les macros ne sont pas activées à l'ouverture du fichier, il n'est pas possible de voir les feuilles

le code est protégé avec le mot de passe ---> azerty

............ mais pour quelqu'un qui sait s'y prendre, la protection ne tient pas longtemps :(
à+
Philippe

bonjour philippe

merci pour ton fichier c'est bien ce que je souhaite, mais comment l'adapter à mon fichier?

cordialement
 

Lone-wolf

XLDnaute Barbatruc
Bonjour Philippe :)

@Ced: il faut mettre ceci dans le code du bouton du formulaire login et mot de passe

VB:
For i = 2 To 5
Sheets(i).Visible = -1
Next i

Et dans Thisworkbook

VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For i = 2 To 5
Sheets(i).Visible = 2
Next i
End Sub
 

ced91300

XLDnaute Occasionnel
Bonjour Philippe :)

@Ced: il faut mettre ceci dans le code du bouton du formulaire login et mot de passe

VB:
For i = 2 To 5
Sheets(i).Visible = -1
Next i

Et dans Thisworkbook

VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For i = 2 To 5
Sheets(i).Visible = 2
Next i
End Sub

Bonjour, merci pour la réponse, mais je ne saisi pas trop ou devoir les insérer (je ne suis pas tres doué en bva j'ai suivi des tutos sur le net pour la realisation

dans Thisworkbook j'ai cela:

Private Sub Workbook_open()
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name <> "Feuil1" Then Ws.Visible = xlSheetVeryHidden
Next Ws
Load UserForm1
UserForm1.show
End Sub

Et le code bouton (userform) login mot de passe j'ai cela:

Private Sub CommandButton1_Click()
If TextBox1 = "" Then
MsgBox "Saisie du nom d'utilisateur obligatoire.", vbInformation
Exit Sub
End If
'Même chose avec TextBox2
If TextBox2 = "" Then
MsgBox "Saisie du mot de passe obligatoire.", vbInformation
Exit Sub
End If
'Lance la fonction VerifMDP en utilisant :
'- TextBox1 comme paramètre "utilisateur"
'- TextBox2 comme paramètre "MdP"
'Si la fonction renvoie FAUX :
If VerifMDP(TextBox1, TextBox2) = False Then
'c'est que le mot de passe ou l'utilisateur est faux donc
'Message à l'utilisateur
MsgBox "Erreur Mot de passe et/ou utilisateur. Merci de saisir à nouveau.", vbInformation
'on vide les 2 textbox
TextBox1 = ""
TextBox2 = ""
'on sort de la procédure
Exit Sub
End If
'A partir d'ici, le code ne se déroule que lorsque mdp et nom sont corrects.
'On peut donc afficher les feuilles correspondant à l'utilisateur saisi
AfficheFeuilles TextBox1
'masque l'UserForm
UserForm1.Hide
Application.Visible = True
End Sub
Private Sub Label1_Click()
End Sub
Private Sub TextBox2_Change()
End Sub
'code se déclenchant à l'ouverture de Userform1
Private Sub UserForm_Initialize()
Application.Visible = False
TextBox1 = ""
TextBox2 = ""
'réglage des propriétés Caption
'de l'Userform :
Me.Caption = "Saisie du Mot de Passe"
'des labels :
Label1.Caption = "Utilisateur"
Label2.Caption = "Mot de Passe"
'du bouton
CommandButton1.Caption = "VALIDER"
'Remplace les caractères saisis dans le textbox2 par des astérisques
Me.TextBox2.PasswordChar = "*"
End Sub


Si tu peux me dire ou combiner le tout

merci

cordialement
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re,

un autre exemple un peu plus abouti en pièce jointe
chaque retour vers la feuille d'Accueil masque automatiquement les autres feuilles

@ Lone Wolf, la procédure est à mettre dans le BeforeSave et surtout pas dans le BeforeClose car cela permettrait de faire une sauvegarde du fichier en ayant des feuilles visibles

à+
Philippe
 

Pièces jointes

  • 111.xlsm
    23.7 KB · Affichages: 50

Lone-wolf

XLDnaute Barbatruc
Re

@ Philippe: ahhh! Daccord. Merci pour l'explication.

@ ced: si tu as un formulaire de ce style

formulaire.gif


Tu met la 1ère macro dans le code du bouton(Login). L'autre tu l'insère ici (en image)

TsW.gif


Mais à la place de WorkBook_Open() tu met

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim i As Long
For i = 2 to 5
Sheets(i).Visible = 2
Next i
End Sub

comme l'a suggeré Philippe
 
Dernière édition:

ced91300

XLDnaute Occasionnel
Re

@ Philippe: ahhh! Daccord. Merci pour l'explication.

@ ced: si tu as un formulaire de ce style

Regarde la pièce jointe 975563

Tu met la 1ère macro dans le code du bouton(Login). L'autre tu l'insère ici (en image)

Regarde la pièce jointe 975564

Mais à la place de WorkBook_Open() tu met

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim i As Long
For i = 2 to 5
Sheets(i).Visible = 2
Next i
End Sub

comme l'a suggeré Philippe

Re bonjour

merci pour tes explications, effectivement j'ai bien oui j'ai bien un formulaire de ce style, mais je ne vois toujours ou placé le 1 code car en plaçant le premier code je n'ai plus l'userform

mon bva c'est ca:
Private Sub CommandButton1_Click()

If TextBox1 = "" Then
MsgBox "Saisie du nom d'utilisateur obligatoire.", vbInformation
Exit Sub
End If
If TextBox2 = "" Then
MsgBox "Saisie du mot de passe obligatoire.", vbInformation
Exit Sub
End If
If VerifMDP(TextBox1, TextBox2) = False Then
MsgBox "Erreur Mot de passe et/ou utilisateur. Merci de saisir à nouveau.", vbInformation
TextBox1 = ""
TextBox2 = ""
Exit Sub
End If

AfficheFeuilles TextBox1

UserForm1.Hide
Application.Visible = True
End Sub

Private Sub Label1_Click()

End Sub

Private Sub TextBox2_Change()

End Sub


Private Sub UserForm_Initialize()
Application.Visible = False
TextBox1 = ""
TextBox2 = ""
Me.Caption = "Saisie du Mot de Passe"
Label1.Caption = "Utilisateur"
Label2.Caption = "Mot de Passe"
CommandButton1.Caption = "VALIDER"
Me.TextBox2.PasswordChar = "*"

End Sub


merci cordialement
 

Lone-wolf

XLDnaute Barbatruc
Re Philippe

Ajout d'un (faux lien) retour à Accueil et masquage de la feuille Accueil dans les autres feuilles. Bon là je m'arrête, c'est vrai que c'est l'automne et que les feuilles tombent mais... ça commence à faire beaucoup de feuilles LOL :D
 

Pièces jointes

  • Copie de 111.xlsm
    29.5 KB · Affichages: 39

ced91300

XLDnaute Occasionnel
Re
Ajout ceci dans la macro du bouton

VB:
If VerifMDP(TextBox1, TextBox2) = True Then
For i = 2 to ThisWorkbook.Sheets.Count
'Nom de la feuille à modifier
If Sheets(i).Name <> "Accueil" then Sheets(i).Visible = -1
Next i
End If

merci, mais je suis pas un pro du bva, et je ne vois pas ou mettre cela par apport à mon BVA (ce que je dois enlever)

voici mon fichier qui pose problème login ADMIN mdp ADMIN

merci

cordialement
 

Pièces jointes

  • PLANNING EQUIPE D.xlsm
    206.9 KB · Affichages: 48
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Bonsoir ced,

si tu aurais mit dès le début le fichier, tu nous aurais épargné tout ce travail. Dans le module 3 tu as cette macro pour afficher les feuilles correspondant au nom de l'utilisateur.

VB:
Sub AfficheFeuilles(Utilisateur As String)
Dim Col As Byte, i As Byte, Lig As Integer

With Sheets("parametrage") 'dans la feuille paramétrage
    'comme on va boucler de la colonne 4 à la dernière colonne, on stocke le n° de la dern colonne :
    Col = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
    'on cherche colonne A le nom d'utilisateur saisi et on stocke son num de ligne
    Lig = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole).Row
    For i = 3 To Col
        If UCase(.Cells(Lig, i)) = "X" Then 'si on trouve un "X" dans la cellule
            Sheets(.Cells(1, i).Value).Visible = True 'on affiche la feuille
        Else
            Sheets(.Cells(1, i).Value).Visible = xlSheetVeryHidden 'sinon on la masque
        End If
    Next i
End With
End Sub

Et dans le bouton du formulaire tu as ceci: AfficheFeuilles TextBox1

Je ne comprends pas dans ce cas, ce que tu veux au juste. Le principe des macro que l'on t'as fournit est quasi le même. Je viens de faire un test et la macro m'affiche bien les feuilles correspondantes au X de la feuille parametrage.
 
Dernière édition:

Discussions similaires

Réponses
1
Affichages
168

Statistiques des forums

Discussions
312 219
Messages
2 086 369
Membres
103 197
dernier inscrit
sandrine.lacaussade@orang