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:

ced91300

XLDnaute Occasionnel
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.

re bonjour,

oui désolé j'étai au taf donc pas eu trop le temps rendre anonyme le fichier chose que j'ai fait une fois rentré chez moi, effectivement comme indiqué dans mon premier post je precise que la macro fonctionne, le problème reside que si les macros ne sont pas activé les utilisateurs peuvent voir l'intégralité du fichier! le fichier est sur un serveur et ils ont les accès pour voir leur service de n'importe quel PC, donc il faudrait que dès l'instant qu'ils n'ont pas activé les macro que le fichier ne s'ouvre pas du tout, j'ai fait l'essai sur plusieurs PC toujours le meme soucis on peu voir toutes les feuilles si les macros ne sont pas activés
et les elements que vous m'avez donné je ne suis pas arrivé à les intégrer dans la macro déjà présente

merci
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re...

Voilà, j'ai ajouter la macro + une macro qui empêche de fermer le formulaire par la croix.
J'ai mit un label Quitter, attention! En cliquant dessus, le classeur va sauvegarder les enregistrements, puis l'application se ferme.
 

Pièces jointes

  • PLANNING EQUIPE D.xlsm
    207.5 KB · Affichages: 59

ced91300

XLDnaute Occasionnel
Re...

Voilà, j'ai ajouter la macro + une macro qui empêche de fermer le formulaire par la croix.
J'ai mit un label Quitter, attention! En cliquant dessus, le classeur va sauvegarder les enregistrements, puis l'application se ferme.

Re bonsoir
Merci beaucoup effectivement c'est plus propre que moi, par contre j'ai toujours le meme problème "si les macros ne sont pas activés" j'ai toujours la visu de toutes les feuilles du classeur y compris celles des mdp, il faut absolument qu'il ne puisse pas voir quoi que soit sans l'activation des macro
(ils peuvent accéder au fichier via un serveur, et de n'importe qu'elle pc .)

En revanche quand je clic sur "activer les macros", j'ai bien l'userfom qui apparaît et le classeur qui se ferme (mais j'ai eu malheureusement tout le loisir de pouvoir feuilleter le classeur )

sur le net j'ai vu ca :
Forcer l’activation des macros pour accéder au contenu

Créer une nouvelle feuil nommée ouverture

Private Sub Workbook_Open()
Sheets("CONTENU").Visible = -1 (la je suppose que ca serait ma feuil1 avec l'userorm?)
Sheets("OUVERTURE").Visible = 2
End Sub

mais je ne sais pas l'adapter

il faut absolument les obliger à activer les macros sinon les coquins vont matter les ptits copains ce qui n'est pas le but lol

encore merci
cordialement
 
Dernière édition:

phlaurent55

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

........................ par contre j'ai toujours le meme problème "si les macros ne sont pas activés" j'ai toujours la visu de toutes les feuilles du classeur y compris celles des mdp, il faut absolument qu'il ne puisse pas voir quoi que soit sans l'activation des macro

lors de la fermeture du fichier, il est nécessaire de masquer toutes les feuilles qui ne peuvent être vues (par la procédure BeforeSave )

MAIS il est également nécessaire de protéger les macros afin qu'elles ne puissent être accessibles, pour cela il faut mettre un mot de passe dans les propriétés de VBAProject (comme je l'avais fait dans les fichiers joints à mes précédentes réponses)

Cette protection supplémentaire est loin d'être la panacée mais ça permettra de retarder (de quelques minutes) les personnes mal intentionnées qui auraient envie de "démonter" le fichier


100.jpg



à+
Philippe
 

ced91300

XLDnaute Occasionnel
Re,



lors de la fermeture du fichier, il est nécessaire de masquer toutes les feuilles qui ne peuvent être vues (par la procédure BeforeSave )

MAIS il est également nécessaire de protéger les macros afin qu'elles ne puissent être accessibles, pour cela il faut mettre un mot de passe dans les propriétés de VBAProject (comme je l'avais fait dans les fichiers joints à mes précédentes réponses)

Cette protection supplémentaire est loin d'être la panacée mais ça permettra de retarder (de quelques minutes) les personnes mal intentionnées qui auraient envie de "démonter" le fichier


Regarde la pièce jointe 975602


à+
Philippe

Bonjour Phillipe,

Merci pour la réponse mais comment procéder pour intégrer la procédure BeforeSave à mon classeur ? (je suis plutôt pas doué en bva)

Cordialement
 

Lone-wolf

XLDnaute Barbatruc
Bonjour ced, Philippe

Dans le Projet VBA, tu as déjà mit un mot de passe apparement mal mit, puisque je peux acceder aux feuilles mais pas en clic droit sur propriétés de vba project. Si tu le connaît, met le en ligne, je te donnerait celui que je vais mettre; ensuite tu pourra le modifier.
 

ced91300

XLDnaute Occasionnel
Bonjour à tous,

Pour mon fichier j'ai trouver cela sur le net, mais ne sais pas l'imbriquer dans mon classeur et les macros déjà existants.
"forcer un utilisateur à activer les macros"

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ws As Worksheet
Sheets("Start").Visible = xlSheetVisible
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Start" Then
ws.Visible = xlVeryHidden
End If
Next ws
ActiveWorkbook.Save
End Sub
Private Sub Workbook_Open()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Visible = xlSheetVisible
Next ws
Sheets("Start").Visible = xlVeryHidden
End Sub
 

Lone-wolf

XLDnaute Barbatruc
Re

Tout cela est déjà fait ced dans le dernier fichier que j'ai mit. Voici ton fichier protégé par mot de passe dans Projet VBA. Mais encore une fois, si quelqu'un sais comment si prendre pour le contourner, bein tu n'est pas sorti de l'auberge.

Je de donne le MP en message privé

A+
 

Pièces jointes

  • PLANNING EQUIPE D.xlsm
    206.4 KB · Affichages: 50

phlaurent55

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

@ Lone-Wolf
Mais encore une fois, si quelqu'un sais comment si prendre pour le contourner, bein tu n'est pas sorti de l'auberge.

Je de donne le MP en message privé


une preuve s'il en fallait une:
sans connaitre le mot de passe pour voir les codes, en moins de 30 secondes, voici ce que contient ton dernier fichier posté

Private Sub Workbook_open()
Dim i As Long
For i = 2 To 8
Sheets(i).Visible = xlSheetVeryHidden
Next i
UserForm1.show
End Sub

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


à+
Philippe
 

Lone-wolf

XLDnaute Barbatruc
Bonjour Philippe,

en utilisant un utilitaire ou fais autre chose, sûr que tu as pu ouvrir les classeurs du projet :) , normalement même moi je ne pouvais pas afficher les feuilles après avoir mit le mot de passe.
 
Dernière édition:

ced91300

XLDnaute Occasionnel
Bonjour Philippe,

en utilisant un utilitaire ou fais autre chose, sûr que tu as pu ouvrir les classeurs du projet :) , normalement même moi je ne pouvais pas afficher les feuilles après avoir mit le mot de passe.
re bonsoir,

Concernant mon soucis j'ai trouvé un post sur le forum serait-il judicieux de rajouter une feuille ?
(par contre je serais incapable de l'imbriquer avec le reste)

merci

Cordialement

Re : VBA Excel: Contrôle de l'activation des macros ?

bonjour Zorgloub,

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".
 

ced91300

XLDnaute Occasionnel
le problème semble bien être du fait que le fichier se trouve dans le serveur, en direct sur les pc ou via dd et clef usb le fichier fonctionne nickel mais dès qu'il est dans le serveur sur certains PC ca fonctionne, et pour d'autres d'autre ca bug

cordialement
 

Lone-wolf

XLDnaute Barbatruc
Re Cedric,

encore une fois cette macro fais exactement la même chose que celle qu'on t'as montré. En ce qui concerne le serveur, je ne peux rien faire de plus, n'étant pas programmeur. Peut-être quelqu'un d'autre pourra t'aider à parer à ce problème.
 

Discussions similaires

Réponses
1
Affichages
168

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 185
dernier inscrit
salhit