XL VBA "Sécurité"

Résolu
fabien25000 Messages postés 697 Statut Membre -  
fabien25000 Messages postés 697 Statut Membre -
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



--
Quand on ne dispose que d'un marteau tout les problèmes ressemblent à un clou

1 réponse

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. fabien25000 Messages postés 697 Statut Membre 59
       
      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
    2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
    3. fabien25000 Messages postés 697 Statut Membre 59
       
      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
    4. fabien25000 Messages postés 697 Statut Membre 59
       
      "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
    5. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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