Fichier Excel en mode protégé avec Open Workbook

Bonjour à toutes et à tous !

J'ai envie de perfectionner mon Open Workbook event avec une détection du fichier s'il est en mode protégé.

Ma question est donc la suivante comment peut-on déprotéger un fichier à l'ouverture et continuer le code ? ci-dessous mon code :

J'avais trouvé une solution qui déprotégeait le fichier mais mes Wb.activate ne fonctionnait plus...

Dim WithEvents App As Excel.Application

Private Sub Workbook_Open()
  Set App = Excel.Application
End Sub

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
  'Intercepte l'ouverture de tout classeur
   Dim wbPV As ProtectedViewWindow
  If Wb.Name <> "PERSONAL.XLSB" Then

  'IL FAUT CHANGER LES CHEMINS pour Joris

    Dim Chemin As String

      Dim Nom_fichier As String

      Nom_fichier = "oave"
      Chemin = "exemple"

    'si le document est en lecture sub, la macro s'arrête !
    'ou si il est en mode de compatibilité

    If Wb.ReadOnly Or Wb.Excel8CompatibilityMode Then

    MsgBox ("Document en lecture seule")

    Exit Sub

    End If

     Wb.Activate

If Wb.Sheets(1).Range("A1").Value = "Numéro de commande" And Wb.Sheets(1).Range("B1").Value = "Ordre de vente" And Wb.Name <> Nom_fichier & ".xlsx" Then ' Check n°1, ici les conditions mutliples !

     'continue le code ici, si vrai

     'Question avec Oui et Non
Dim answer As Integer

answer = MsgBox("Voulez-vous déclencher la Macro OA ? ", vbQuestion + vbYesNo + vbDefaultButton2, "Oave MACRO")

If answer = vbYes Then

      MsgBox "C'est le fichier oave" 'test pour voir si ça fonctionne

       Application.DisplayAlerts = False ' désactive les pop-ups

       'enregistrement sous, avec chemin + Nom

    ActiveWorkbook.SaveAs Chemin & Nom_fichier & ".xlsx", FileFormat:=51, ConflictResolution:=Excel.XlSaveConflictResolution.xlLocalSessionChanges

       Application.DisplayAlerts = True ' réactive les pop-ups

      'ouvre le fichier formule

        Workbooks.Open "exemple"

          Workbooks.Open "exemple"

    End If

  End If

    Dim Nom_fichier_2 As String
    Nom_fichier_2 = "base"
     Chemin = "exemple"

        Wb.Activate

    If Wb.Sheets(1).Range("A9").Value = "Order Number" And Wb.Sheets(1).Range("H9").Value = "Item Number" And Wb.Sheets(1).Range("N9").Value = "Vendor Item Number" And Wb.Name <> Nom_fichier_2 & ".xlsx" Then  ' Check n°2, ici les conditions mutliples !

     'Question avec Oui et Non

    Dim answer_2 As Integer

answer_2 = MsgBox("Voulez-vous déclencher la Macro Base ? ", vbQuestion + vbYesNo + vbDefaultButton2, "Base MACRO")

If answer_2 = vbYes Then

    'continue le code ici, si vrai

    MsgBox ("Base") 'test pour voir si ça fonctionne

           Application.DisplayAlerts = False ' désactive les pop-ups

      'enregistrement chemin + nom

    ActiveWorkbook.SaveAs Chemin & Nom_fichier_2 & ".xlsx", FileFormat:=51, ConflictResolution:=Excel.XlSaveConflictResolution.xlLocalSessionChanges

        Application.DisplayAlerts = True ' réactive les pop-ups

     Workbooks.Open "exemple"

          Workbooks.Open "exemple" ' ouvre le fichier enregistrer sous !

    End If

    End If

    Dim Nom_fichier_3 As String

     Nom_fichier_3 = "ve"
      Chemin = "exemple"

         Wb.Activate

    If Wb.Sheets(1).Range("A1").Value = "Numéro de commande" And Wb.Sheets(1).Range("B1").Value = "N° d'ordre Winner" And Wb.Sheets(1).Range("C1").Value = "Nom adresse de livraison" And Wb.Name <> Nom_fichier_3 & ".xlsx" Then   ' Check n°3, ici les conditions mutliples !

 'Question avec Oui et Non
        Dim answer_3 As Integer

answer_3 = MsgBox("Voulez-vous déclencher la Macro VE ? ", vbQuestion + vbYesNo + vbDefaultButton2, "VE MACRO")

If answer_3 = vbYes Then

    'continue le code ici, si vrai

    MsgBox ("VE") 'test pour voir si ça fonctionne

           Application.DisplayAlerts = False ' désactive les pop-ups

       'enregistrement sous, avec chemin + Nom

   ActiveWorkbook.SaveAs Chemin & Nom_fichier_3 & ".xlsx", FileFormat:=51, ConflictResolution:=Excel.XlSaveConflictResolution.xlLocalSessionChanges

        Application.DisplayAlerts = True ' réactive les pop-ups

           Workbooks.Open "exemple" ' avant xlsm

          Workbooks.Open "exemple" ' ouvre le fichier enregistrer sous !

  End If
  End If
 End If
End Sub

D'avance merci !

Bonjour Vincent_SL7

A ma connaissance ce n'est pas possible et heureusement dirais-je

Un fichier se trouve en mode protégé, quand Excel ne le reconnais pas comme étant légitime (téléchargé d'internet)

Il faut l'ouvrir une 1èe fois, valider la modification possible du fichier et le fermer en l'enregistrant
A la 2ème ouverture, plus de souci.

A+

Hello Bruno !

Le truc c'est vu qu'il y a un open workbook Event quand on active le fichier protéger ça créer une erreur :(, j'aimerai donc avoir un exit SUB à la présence d'un fichier protégé ou au meilleur des cas que la macro se lance quand même (j'y crois moyen).

J'ai un début de piste trouvée sur un forum anglophone, mais je ne comprends pas trop, voir code :

Option Explicit

    Sub Auto_edit_Workbooks()

    Dim wb As Workbook
    Dim wbPV As ProtectedViewWindow
        If Application.ProtectedViewWindows.Count > 0 Then
            For Each wbPV In Application.ProtectedViewWindows
            wbPV.Activate
            Set wb = wbPV.Edit()
            Next wbPV
        Else
        End If
    Set wb = Nothing
    End Sub

J'ai également trouvé ce deuxième code ci-dessous, par contre pour mon cas il faudrait retirer les boucles .. :

'protected view fix
Dim bk As Workbook, w As Long, wCount As Long
wCount = Application.ProtectedViewWindows.Count
On Error Resume Next
If wCount > 0 Then
    For w = 1 To wCount
        Application.ProtectedViewWindows(w).Activate
        Application.ProtectedViewWindows(w).Edit
    Next w
End If
On Error GoTo 0

D'avance merci pour vos investissements :) !

re à tous,

Etant donné que mes fichiers où je voulais déclencher la macro n'étaient jamais en protégé, j'ai opté pour la solution de détection du fichier protégé pour sortir du Sub et éviter une Erreur débogage voir code ci-dessous :

If Application.ProtectedViewWindows.Count > 0 Then
        Exit Sub

        End If

Donc le cas est résolu !

Rechercher des sujets similaires à "fichier mode protege open workbook"