1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278
| Option Explicit
Public Sub SaveAttachment()
Dim myItem, myAttachments As Object
Dim myOlApp As New Outlook.Application
Dim myOlExp As Outlook.Explorer
Dim myOlSel As Outlook.Selection
Dim appExcel As Object
Dim appWrkLog As Object
Dim objNSpace As Object
Dim objNDossier As Object
Dim objNFolder As Object
Dim i As Integer
Dim j As Integer
Dim intI As Integer
Dim intI2 As Variant
Dim intI3 As Variant
Dim Colonne As String
Dim Sujet As String
Dim SujetaTrier As String
Dim MyRange As Range
Dim MonFichier As String
Dim Document As String
Dim DocOriginal As String
Dim Probleme As String
Dim Recup_Code As Variant
Dim TestRecup_Code As Variant
Dim FSO
Dim DossierSource
Dim Ligne
Dim Existence
Dim Fichier
Dim XL As New Excel.Application
Dim FeuilleLog
Dim FeuilleAuto
On Error GoTo errorhandler
intI = 0
intI2 = 0
intI3 = 0
'Actions sur les objets sélectionnés dans la messagerie en question
Set myOlExp = myOlApp.ActiveExplorer
Set myOlSel = myOlExp.Selection
Set Existence = CreateObject("Scripting.FileSystemObject")
'péparation des objets pour le bon répertoire outlook où déplacer l'email après traitement
Set objNSpace = myOlApp.GetNamespace("MAPI")
Set objNDossier = objNSpace.GetDefaultFolder(olFolderInbox)
Set objNFolder = objNDossier.Folders("Traités")
Set appExcel = CreateObject("Excel.application")
appExcel.Application.Visible = False
appExcel.Workbooks.Open "O:\répertoire\Automatisation.xlsx"
Sheets("ListeAutomatisation").Select
Set FeuilleAuto = Sheets("ListeAutomatisation")
FeuilleAuto.Range("A1").Select
Set MyRange = appExcel.ActiveSheet.Range("$A:$E")
Set FSO = CreateObject("Scripting.FileSystemObject")
'pour le fichier Log
Workbooks.Open "O:\répertoire\LogAutomatisation.xlsx"
Sheets("Log").Select
Set FeuilleLog = Sheets("Log")
FeuilleLog.Range("A1").Select
'boucle
For Each myItem In myOlSel
'découpage du sujet pour recherche dans Excel
SujetaTrier = myItem.Subject
Sujet = myItem.Subject
'récupérer le bon numéro de référence pour les sujets RLE
If SujetaTrier Like "*RLE" Then
myItem.Subject = Left(myItem, 18)
myItem.Subject = Right(myItem, 7)
Sujet = myItem.Subject
'récupérer le bon numéro de référence pour les sujets RLV
ElseIf SujetaTrier Like "*RLV" Then
myItem.Subject = Left(myItem, 18)
myItem.Subject = Right(myItem, 7)
Sujet = myItem.Subject
'récupérer le bon numéro de référence pour les sujets RLT
ElseIf SujetaTrier Like "*RLVT" Then
myItem.Subject = Left(myItem, 18)
myItem.Subject = Right(myItem, 7)
Sujet = myItem.Subject
Else
myItem.Subject = Left(myItem, 7)
End If
' premier cas RLE
If SujetaTrier Like "*RRRRRRR" Then
'prends la valeur du chemin dans la colonne C
Colonne = appExcel.WorksheetFunction.VLookup(myItem, MyRange, 3, False)
' premier cas RLV
ElseIf SujetaTrier Like "*RRRRRRR" Then
'prends la valeur du chemin dans la colonne C
Colonne = appExcel.WorksheetFunction.VLookup(myItem, MyRange, 3, False)
'second cas RLE
ElseIf SujetaTrier Like "*RRRRRRR" Then
'prends la valeur du chemin dans la colonne D
Colonne = appExcel.WorksheetFunction.VLookup(myItem, MyRange, 4, False)
'second cas RLV
ElseIf SujetaTrier Like "*RRRRRRR" Then
'prends la valeur du chemin dans la colonne D
Colonne = appExcel.WorksheetFunction.VLookup(myItem, MyRange, 4, False)
'MsgBox (Colonne)
'troisième cas RLE
ElseIf SujetaTrier Like "*RRRRRRR" Then
Colonne = appExcel.WorksheetFunction.VLookup(myItem, MyRange, 5, False)
'troisième cas RLV
ElseIf SujetaTrier Like "*RRRRRRR" Then
'prends la valeur du chemin dans la colonne E
Colonne = appExcel.WorksheetFunction.VLookup(myItem, MyRange, 5, False)
End If
Set myAttachments = myItem.Attachments
'boucle pour un email
If myAttachments.Count > 0 Then
Set DossierSource = FSO.GetFolder(Colonne)
'pour tous les documents attachés
For i = 1 To myAttachments.Count
'les sauvegarder sur la destination -----
intI2 = Right(DateValue(Now), 4) & Mid(DateValue(Now), 4, 2) & Left(DateValue(Now), 2)
intI3 = Left(TimeValue(Now), 2) & Mid(TimeValue(Now), 4, 2) & Right(TimeValue(Now), 2)
intI = intI + 1
Document = intI2 & intI3 & intI & "-" & myAttachments(i).DisplayName
DocOriginal = myAttachments(i).DisplayName
MonFichier = Colonne & Document
myAttachments(i).SaveAsFile MonFichier
myItem.Subject = SujetaTrier
myItem.Body = "Fichier sauvegardé" & vbCrLf & MonFichier & vbCrLf & vbCrLf & myItem.Body
j = 1
Do While (FeuilleLog.Cells(j, 1) <> "") And (j < 10000)
j = j + 1
Loop
FeuilleLog.Cells(j, 1) = myItem.CreationTime
FeuilleLog.Cells(j, 2) = myItem.Subject
FeuilleLog.Cells(j, 3) = DocOriginal
FeuilleLog.Cells(j, 4) = Colonne
FeuilleLog.Cells(j, 5) = Now()
ActiveWorkbook.Save
Document = ""
'fin pour tous les documents attachés
Next i
myItem.UnRead = False
myItem.Save
myItem.Move objNFolder
'fin de boucle pour le nombre de fichiers attachés
End If
' prochain email - fin de la boucle principale
Next
intI = 0
intI2 = 0
intI3 = 0
Colonne = ""
Sujet = ""
DocOriginal = ""
Workbooks("Automatisation.xlsx").Close SaveChanges:=False
Workbooks("LogAutomatisation.xlsx").Close SaveChanges:=False
appExcel.Quit
Set appExcel = Nothing
Set appWrkLog = Nothing
Set myAttachments = Nothing
Set myOlApp = Nothing
Set myOlExp = Nothing
Set myOlSel = Nothing
Set myItem = Nothing
Colonne = ""
Sujet = ""
Document = ""
MonFichier = ""
Set MyRange = Nothing
Set DossierSource = Nothing
Set FSO = Nothing
Set Existence = Nothing
Fichier = ""
Exit Sub
errorhandler:
MsgBox Err.Description, , Err.Source
If Err.Number <> 0 Then
For Each Fichier In DossierSource.Files
If Existence.fileexists(MonFichier) = False Then
myItem.FlagIcon = olFlagMarked
myItem.Importance = 2
myItem.UnRead = True
FeuilleLog.Cells(j + 1, 6) = "OUI"
myItem.Subject = Sujet
myItem.Body = "********************" & vbCrLf & "Problème de sauvegarde avec le fichier " & vbCrLf & MonFichier & vbCrLf & "Merci de
vérifier le répertoire de destination dans le tableau Excel." & vbCrLf & vbCrLf & myItem.Body
myItem.Save
End If
Next Fichier
End If
Resume Next
End Sub |
Partager