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 SubD'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 SubJ'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 0D'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 IfDonc le cas est résolu !