Protection d'un classeur envoyé automatiquement par mail VBA
Bonjour,
Je suis actuellement alternant dans une entreprise de transport et j'essaye d'automatiser l'envoie d'une feuille Excel en pièce joint d'un mail pour simplifier la tache de mes collègues qui perdent des heures à envoyer leurs feuilles Excel par mail manuellement.
Jusque là tout fonctionne correctement.
Mon problème est que le destinataire reçoit le fichier sans protection, il peut donc agir sur les filtres et afficher d'autres informations que celles que j'ai voulu lui transmettre.
Est-il possible de protéger uniquement le classeur placer en pièce jointe sans protéger la feuille d'origine, car j'ai besoin de répéter l'opération plusieurs fois en ajustant les données à chaque fois grâce à des filtres (Protéger/ôter à chaque fois sera trop chronophage)
Je vous laisse une copie du code que j'ai utilisé pour la macro inspiré de plusieurs topics de ce forum.
Merci par avance pour vos réponses.
Sub Mail_ActiveSheet()
' definition des variables
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim Sourcewb As Workbook
Dim Destwb As Workbook
Dim TempFilePath As String
Dim TempFileName As String
Dim OutApp As Object
Dim OutMail As Object
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set Sourcewb = ActiveWorkbook
ActiveSheet.Copy
Set Destwb = ActiveWorkbook
With Destwb
If Val(Application.Version) < 12 Then
FileExtStr = ".xls": FileFormatNum = -4143
Else
If Sourcewb.Name = .Name Then
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
MsgBox "You answered NO in the security dialog."
Exit Sub
Else
Select Case Sourcewb.FileFormat
Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
Case 52:
If .HasVBProject Then
FileExtStr = ".xlsm": FileFormatNum = 52
Else
FileExtStr = ".xlsx": FileFormatNum = 51
End If
Case 56: FileExtStr = ".xls": FileFormatNum = 56
Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
End Select
End If
End If
End With
TempFilePath = Environ$("temp") & "\"
'nom du fichier qui va s'envoyer en pièce jointe
TempFileName = Sourcewb.Name & " - " & Feuil5.Range("B21") & " - " & Format(Now, "dd.mmm.yy") _
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With Destwb
.SaveAs TempFilePath & TempFileName & FileExtStr, _
FileFormat:=FileFormatNum
' recuperer la signature outlook (feuil5... = nom de la signature)
SigString = Environ("appdata") & "\Microsoft\Signatures\" & Feuil5.Range("k1") & ".htm"
If Dir(SigString) <> "" Then
Signature = GetBoiler(SigString)
Else
Signature = ""
End If
On Error Resume Next
'informations concernant le mail
With OutMail
.To = Feuil5.Range("G7")
.CC = ""
.BCC = ""
.Subject = "SUIVI PAL EURO DBS"
'Corp du mail
.HTMLBody = "<p>Bonjour,</p>" _
& "<p>Vous trouverez ci-joint votre solde de palette europe,</p>" _
& "<p>Merci d'oragniser une restitution au plus vite.</p>" _
& "<p>Si il y a des erreurs, merci de nous le signaler avec les lettres de voiture concernées.</p>" _
& Signature
.Attachments.Add Destwb.FullName
'Si tu ne veux pas que Outlook s'ouvre, il faut juste commenter la ligne suivante :)
.Display
End With
On Error GoTo 0
.Close SaveChanges:=False
End With
Kill TempFilePath & TempFileName & FileExtStr
Set OutMail = Nothing
Set OutApp = Nothing
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
Function GetBoiler(ByVal sFile As String) As String
'definition de la fonction pour recupéré la signature en html
Dim fso As Object
Dim ts As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
GetBoiler = ts.readall
ts.Close
End FunctionBonjour,
Je pense qu'à cet endroit c'est possible :
Set Sourcewb = ActiveWorkbook
ActiveSheet.Copy
Set Destwb = ActiveWorkbook
Destwb.activesheet.protect 'la feuille du nouveau classeurCdlt,
Merci beaucoup ça a fonctionné !!
Bonne soirée.