Enregistrer pièce jointe
- Messages
- 409
- Excel
- 365, Anglais
- Inscrit
- 07/03/2016
- Emploi
- Entrepreneur en construction
Bonjour Forum, Baboutz
pour suite à ce sujet:
https://forum.excel-pratique.com/office/enregistrer-piece-jointe-151196
Baboutz m'avait concocté un petit code que j'avais un peu améliorer, qui permettait d'enregistrer automatiquement des pièces jointes avec extensions prédéfinis dans des dossier associés à la date d'envoi du courriel.
Exemple: courriel recu le 2 février 2022, enregistre automatiquement dans le dossier 2022/02-Février
par contre, je recois des états de compte pour des factures du mois précédent, j'aimerais pouvoir avoir un autre option (ca peut être un autre userform) qui ferait la même procédure, mais dans le mois précédent celle du courriel.
Exemple: État de compte du mois de février recu le 03-03-2022 .. enregistrer la pièce jointe dans 02-Février
le userform est seulement une listbox avec un bouton
La variable Mois étant une STRING, je ne sais pas trop comment m'y prendre pour lui faire comprendre .... -1
j'ai essayé de transformer la variable mois en INTEGER, enlever les noms de mois, et lui dire -1 .. ca ne fonctionne pas, et il faudrait aussi contrôler pour le mois de janvier...
EDIT: J'ai crée 2 combobox pré-rempli avec les bonnes informations, modifiables au besoin.
Merci!
Option Explicit
'Déclaration des constantes publiques
Const path As String = "D:\Chemin\Comptabilité\"
'Déclaration des variables publiques
Dim meMail As Variant
Dim Annee As Integer
Dim Mois As String
Private Sub CommandButton_Validation_Click()
'Déclaration des variables
Dim i As Byte
'Enregistrement de chaque PJ sélectionné
For i = 0 To ListBox_PJ.ListCount - 1
If ListBox_PJ.Selected(i) = True Then
If Not Len(Dir(path & Annee & "\" & Mois & "\" & ListBox_PJ.List(i), vbDirectory)) > 0 Then
meMail.Attachments(ListBox_PJ.List(i)).SaveAsFile (path & Annee & "\" & Mois & "\" & ListBox_PJ.List(i))
Else
Kill path & Annee & "\" & Mois & "\" & ListBox_PJ.List(i)
meMail.Attachments(ListBox_PJ.List(i)).SaveAsFile (path & Annee & "\" & Mois & "\" & ListBox_PJ.List(i))
End If
End If
Next i
'Fermeture de l'USF
Unload Me
End Sub
Private Sub Userform_Initialize()
'Déclaration des variables
Dim Atmt As Variant, r As Byte
'Attribution de l'email à traiter à la variable objet meMail
Set meMail = Application.ActiveExplorer.selection.Item(1)
'Récupération des variables mois et année de récéption du mail
Mois = Choose(Month(meMail.CreationTime), "01-Janvier", "02-Février", "03-Mars", "04-Avril", "05-Mai", "06-Juin", "07-Juillet", "08-Août", "09-Septembre", "10-Octobre", "11-Novembre", "12-Décembre")
Annee = Year(meMail.CreationTime)
'Création des dossier année et mois si inexistant
If Not Len(Dir(path & Annee, vbDirectory)) > 0 Then MkDir (path & Annee & "\")
If Not Len(Dir(path & Annee & "\" & Mois, vbDirectory)) > 0 Then MkDir (path & Annee & "\" & Mois & "\")
'Récupération de toutes les pièces jointes
For Each Atmt In meMail.Attachments
If Not Atmt.fileName Like "*image*" And Not Atmt.fileName Like "*.gif" And Not Atmt.fileName Like "*.htm*" And Not Atmt.fileName Like "*.txt" Then ListBox_PJ.AddItem Atmt.fileName
Next Atmt
'Sélection automatique de tous les pièces jointes
For r = 0 To ListBox_PJ.ListCount - 1
ListBox_PJ.Selected(r) = True
Next r
End Sub
Private Sub Userform_terminate()
'Vide la variable objet -> Allège la mémoire
Set meMail = Nothing
End Sub