XL VBA "Sécurité"

Résolu/Fermé
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 - 12 sept. 2018 à 09:32
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 - 13 sept. 2018 à 16:02
Bonjour,

Je reviens vers vous à la suite du poste ci dessous qui date de l'année dernière
https://forums.commentcamarche.net/forum/affich-34839603-information-securite-mots-de-passe-feuilles-classeur-et-vba
pour ceux qui ne veulent pas tout lire je cherchais à sécuriser un fichier et cs_Le Pivert m'a généreusement fournit quelques exemples de code.
Mon problème c'est que j'ai essayé de m'en servir et que depuis toutes mes procedures sont systématiquement interrompues et je n'arrive pas à rétablir ce phénomène
J'ai essayé de trouver les ordres contraires sans grand succès, j'ai contrôlé les options excel mais rien n'y fait..
voici le code utilisé :

Private Sub Workbook_BeforeClose(Cancel As Boolean)

' 'on rétabli à la fermeture
 ThisWorkbook.IsAddin = True
'et à la fin de ta macro : remettre raccourci clavier Ctrl Pause
Application.EnableCancelKey = xlInterrupt 'Ou xlErrorHandler

End Sub

Private Sub Workbook_Open()
    Dim tmpmsgbx As Integer
    
''empêcher l'affichage d'un classeur s'il est ouvert alors que l'exécution
''des macros est désactivée dans les options de sécurité
    ThisWorkbook.IsAddin = True
''au début de ta macro
    Application.EnableCancelKey = xlDisabled 'empeche raccourci clavier Ctrl Pause

    Names("EditDevis").Visible = False
    Worksheets("BDD devis").Visible = 0
    Worksheets("Statistiques").Visible = 0
    Worksheets("bddCPVA").Visible = 0
    Worksheets("tmptarif").Visible = 0
    Worksheets("Fiche Contact").Visible = 0
    Worksheets("PERGOLA VERANDA").Visible = 1
    Worksheets("PERGOLA VERANDA").Activate
    ActiveWindow.DisplayHeadings = False
    ActiveWindow.DisplayGridlines = False
    Application.DisplayFormulaBar = False
       
    tmpmsgbx = MsgBox("Merci de vous assurer de ne pas avoir d'autre fichier Excel ouvert" & vbCrLf & vbCrLf & _
    "Assurez vous d'enregistrer et fermer vos différents fichiers Excel avant de lancer l'aplication de chiffrage XXX", vbCritical + vbOKCancel, "XXX")
    
    If tmpmsgbx = vbOK Then
        Application.WindowState = xlMinimized
        Application.Visible = False
        ufLoggin.Show 0
    Else
        ThisWorkbook.Close savechanges:=False
    End If

End Sub

Merci d'avance pour vos conseils avisés


1 réponse

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
Modifié le 12 sept. 2018 à 14:33
Bonjour,

a la place de cela

Private Sub Workbook_Open()
    Dim tmpmsgbx As Integer
    
''empêcher l'affichage d'un classeur s'il est ouvert alors que l'exécution
''des macros est désactivée dans les options de sécurité
    ThisWorkbook.IsAddin = True


il faut mettre

Private Sub Workbook_Open()
    Dim tmpmsgbx As Integer
    
''empêcher l'affichage d'un classeur s'il est ouvert alors que l'exécution
''des macros est désactivée dans les options de sécurité
    ThisWorkbook.IsAddin = False


par ailleurs, je n'ai jamais vu cela:

  Names("EditDevis").Visible = False


A consulter:

https://silkyroad.developpez.com/VBA/FeuilleDeCalcul/

0
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59
12 sept. 2018 à 14:55
j'ai tellement trifouillé que j'ai reussi à mal recopier..
je n'ai pas bien compris d'ou venait le problème mais je l'ai résolu en supprimant ce passage, redémarrer l'ordi et re copier ton code..
J'ai sûrement fait une erreur hier soir..
@cs_Le Pivert J'essaye de comprendre ton deuxième fichier "protection vbaproject" pour l'adapter également..
Encore merci pour ces deux fichiers !

J'ai d'ailleurs une autre question : je travail sur ce fichier avec
Application.WindowState = xlMinimized 
Application.Visible = False


ça fonctionne très bien mais si le commercial ouvre un autre fichier excel alors que mon application est en route, ça a le même effet que si j'écrivais :
Application.WindowState = xlMaximized
Application.Visible = True


y a t'il un moyen de contrer cela?
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
Modifié le 12 sept. 2018 à 16:17
voir ceci, si classeur ouvert tu lances ta macro

Application.WindowState = xlMinimized 
Application.Visible = False


https://excel-malin.com/codes-sources-vba/vba-verifier-si-un-classeur-est-ouvert/

cela necessite l'emploi d'un timer qui va relancer la macro toutes les x secondes, ce qui est contraignant. Il vaut mieux faire l'opération manuellement

@+ Le Pivert
0
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59
Modifié le 12 sept. 2018 à 16:46
Merci cs mais j'ai peur que je ne puisse pas utiliser cette solution

Je détailles :
le fichier excel que j'ai créé sert à nos commerciaux à faire des devis en direct avec les clients
une fois arrivé à l'étape du budget ils peuvent avoir besoin de Cetelem et il s'avère que c'est aussi un fichier excel
si ils ouvrent le fichier de financement ca rend mon classeur de devis visible et accessible et le plus ennuyant : modifiable

le fichier de financement est bien sûr verrouillé de partout donc impossible d'y ajouter une macro or si j'ai bien compris c'est dans ce classeur qu'il faudrait entrer la fonction "si ouvert" et si je redonne l'ordre minimised et visible=false ça va également cacher cetelem non?

en écrivant une interrogation me vient : ne peut on pas avoir le même résultat avec une commande sur thisworkbook?
0
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59
Modifié le 12 sept. 2018 à 17:05
"par ailleurs, je n'ai jamais vu cela:

Names("EditDevis").Visible = False
"

c'est pourtant tiré de ta méthode, cacher le mot de passe dans le gestionnaire de noms
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
12 sept. 2018 à 18:53
autant pour moi, je n'avais pas fait le rapprochement!

tu peux mettre dans ThisWorkbook ce code:

Option Explicit
Private Sub Workbook_Open()
If Application.WindowState = xlMaximized Then
Application.WindowState = xlMinimized
End If
End Sub


Pour y avoir accès de nouveau, il suffit de cliquer sur l'icone dans la barre de tâche

Voilà

@+ Le Pivert
0