Sortir fihicer excel de mes emails stockes ds dossier special

happymarmotte

XLDnaute Occasionnel
Bonjour,

J`ai un petit (gros ?) souci et je pense qu`il y a moyen de trouver une solution

J`ai 1100 emails que j`ai colle ds un dossier special (C:\Documents and Settings\emails\Docexcel) et je cherche a sortir les files excels attaches a ces emails alors plutôt que de faire cela email par email depuis ma boite outlook (copier / coller), puis je faire cela par Macro ?
Est-ce possible?

je vous remercie, sinon j`attaque le copier - coller avec mes pattes :)
et ca va recommencer le trimestre prochain


happymarmotte
 

smotty

XLDnaute Occasionnel
Re : Sortir fihicer excel de mes emails stockes ds dossier special

Bonsoir,

c'est effectivement possible d'aller rechercher tes emails et les documents attachés.

Je n'ai malheureusement pas le temps de faire un code mais voici qui pourrait peut-être t'inspirer.

Dans ce code je recherche un RDV précis dans un calendrier outlook.

A adapter pour les emails. Pour chaque email, il te suffit d'aller chercher le document attaché.

Attention: dans les références du vba, cocher "microsoft outlook"

Sub EnregistreRDV()

Dim oRdv As AppointmentItem
Dim AppOut As Outlook.Application
Dim FoldRDV As MAPIFolder


Set AppOut = CreateObject("Outlook.Application")
Set FoldRDV = AppOut.Session.GetDefaultFolder(olFolderCalendar)
Set RdvItems = FoldRDV.Items
'MsgBox RdvItems.Count
oC = Me.Caption & "-" & Nom_contact & "-" & DatePrecedente & "-" & HeurePrecedente
oFiltre = "[Mileage]= """ & oC & """"
Set MyI = RdvItems.Restrict(oFiltre)
'MsgBox MyI.Count
If MyI.Count > 0 Then
Set oRdv = MyI(1)
oRdv.Delete
End If

End Sub

Cordialement
 

smotty

XLDnaute Occasionnel
Re : Sortir fihicer excel de mes emails stockes ds dossier special

bonjour à tous,

J'ai eu le temps de tapper ce code, voir fichier joint.

Il cherche les email dans un répertoire Outlook et copie les fichiers attachés à ces emails dans un répertoire. Tout ça est à adapter à ta situation bien sur.

Ce code peut aussi bien fonctionner depuis VBA Outlook.

Comme je l'ai développé sous 2007, il te faudra aller dans les references du vba et sélectionner "Microsoft Outlook 11.0 object Library" et décocher le 12.0.

Tu peux également faire un test sur l'adresse mail, voir commentaire dans le code.

Cordialement
 

Pièces jointes

  • OutlookCherche.xls
    34.5 KB · Affichages: 77
  • OutlookCherche.xls
    34.5 KB · Affichages: 82
  • OutlookCherche.xls
    34.5 KB · Affichages: 82

happymarmotte

XLDnaute Occasionnel
Re : Sortir fihicer excel de mes emails stockes ds dossier special

Bonjoujr Smotty, le forum,

je te remercie pour ton aide
je vais tester cela demain mais je risque d`avoir des questions.car en regardant le code, je suis pas sur de comprendre.
je vais essayer de l`adapter demain

en tout cas merci a toi et a demain probablement
je te souhaite une bonne fin de soiree

happymarmotte
 

happymarmotte

XLDnaute Occasionnel
Re : Sortir fihicer excel de mes emails stockes ds dossier special

Re-bonjour

ben voila je reviens avec des questions ;)

question 1 : le code, je le laisse ds le file excel ou je le mets ds outlook?si je laisse ds le file excel, je dois sauivegarder le file ds le dossier ou j`espere recuperer les emails? correct?

sinon j`ai un pb avec Dim oFld As Folder et j`ai ajoute des questions le long de ton code (3 questions)

je te remercie pour ton aide. j`espere que ca va marcher car ca peut etre tres tres utile ce genre de macro
a tout a l`heure j`espere


Sub ChercheFichiers()
Dim myolApp As Outlook.Application
Dim myNamespace As Outlook.NameSpace
Dim oFld As Folder

'comment: User-defined type not defined

Dim MyItems As Items
Dim MyI As Outlook.MailItem
Dim Attach As Attachment
Dim NomFichier, Chemin As String


Set myolApp = CreateObject("Outlook.Application")
Set myNamespace = myolApp.GetNamespace("MAPI")

' comment: MAPI, c`est quoi? le titre de l`email?

'****************************************************
'utiliser l'option ci-dessous pour indiquer où se trouve
'le répertoire dans Outlook
'****************************************************
Set oFld = myNamespace.Folders("DGT")
' comment : nom du dossier cree ds ma boite email = DGT - c`est la que je mets tous mes emails que je veux scanner

'***********************************************************************
'utiliser l'option ci-dessous si ces emails sont dans boite de réception
'***********************************************************************
'Set oFld = myNamespace.GetDefaultFolder(olFolderInbox) 'boite de réception
Set MyItems = oFld.Items

'********************************************************************
'test possible sur l'email avec la propriété "MyI.SenderEmailAddress"
'********************************************************************
For Each MyI In MyItems
If MyI.Attachments.Count > 0 Then
For Each Attach In MyI.Attachments
NomFichier = Attach.FileName
Chemin = "C:\Documents and Settings\Hmarmotte\Hmarmotte\TEST MACRO" & NomFichier
Attach.SaveAsFile (Chemin)
Exit For
Next Attach
End If
Next MyI

End Sub
 

happymarmotte

XLDnaute Occasionnel
Re : Sortir fihicer excel de mes emails stockes ds dossier special

hello

desole mais est ce quelqu`un peut m`aider sur le code de smotty car je bloque.
je pense que son code marche mais j`arrive pas a l`adapter

merci pour votre aide eventuelle

bonne journee sinon

happymarmotte
 

smotty

XLDnaute Occasionnel
Re : Sortir fihicer excel de mes emails stockes ds dossier special

Bonsoir,

Désolé pour ce délai de réponse mais je suis en congé et je n'étais pas là pendant qq jours.

En réponse à ta première question, comme je l'ai développé sous 2007, il te faudra aller dans les references du vba et sélectionner "Microsoft Outlook 11.0 object Library" et décocher le 12.0.

Ainsi tu peux laisser le code dans Excel. Sinon, tel quel, tu peux le mettre dans le vba d'outlook. ça marche aussi bien.

pour MAPI: tu peux remplacer par MyOlApp.session. En fait ça ouvre une cession. Il faudra donc être connecté.

Concernant le répertoire DGT, tu dois décrire le chemin complet:
ex:mynamespace.folders("dossiers personnels").folders("Boite de réception").folders("DGT")

ET enfin, tu as oublié un "/" après le nom de ton répertoire.

Je ne vais pas être très dispo ces 3 prochains jours mais n'hésite pas à poser des questions, je ferai au mieux.

Bon courage

smotty
 

smotty

XLDnaute Occasionnel
Re : Sortir fihicer excel de mes emails stockes ds dossier special

Bonjour,

Juste pour compléter le message précédent:

1) supprime le "exit for" (c'était pour éviter de faire toute la boucle dans mon test

2) Tu ne peux pas modifier le nom "MAPI" c'est propre au serveur. Mais tu peux comme précisé, remplacer "myolApp.GetNamespace("MAPI") " par myolApp.session.

3) Pour le "\" qui manquait, voici le chemin complet:
Chemin = "C:\Documents and Settings\Hmarmotte\Hmarmotte\TEST MACRO\" & NomFichier

4) pour la référence à Outlook dont je parle dans le mail précédent, il faut aller, devuis l'éditeur vba, dans: Outil/références, puis sélectionner la bonne référence à microsoft outlook.

Enfin, personnellement je mettrais le code dans outlook directement. Et c'est pour ça que tu as peu de réponses, c'est un code spécial Outlook et non Excel.

sinon, tu peux placer ton fichier Excel où tu veux, ce fonctionnera.

Cordialement
 

smotty

XLDnaute Occasionnel
Re : Sortir fihicer excel de mes emails stockes ds dossier special

Je continue sur ma lancée.

Petite modif, supprimer (dim oFld as folder). Apparemment, sur 2003 je n'ai pas le "as folder" (j'avais travaillé sur office 2007). Donc pas la peine de déclarer le oFld. ça fonctionnera.

Voilà, avec ces conseils, je pense que tu devrais t'en sortir mais n'hésite pas à poser des questions.
 

happymarmotte

XLDnaute Occasionnel
Re : Sortir fihicer excel de mes emails stockes ds dossier special

salu Smotty,

merci pour toute ton aide.
Ca marche!

Je mets le code après les corrections car il y avait des petits soucis
Maintenant ca marche tres bien…du moins sur mon PC

mais j`ai rencontre un petit souci de + :mad:

Des rapports sont re-produits parfois car la personne qui produit le report realise qu`il y a eu un souci (donc je recois un email le 30/12/2008 a 9 AM avec le file excel attache puis un nouvel email avec le même rapport modifie quelques heures apres la date d`email est 30/12/2008 a 11 :45)
AM (AM = matin)

La macro tourne super mais ecrase les files au fur et a mesure donc je ne sais plus a la fin quel est le rapport le + recent. Si je un file TTT date du 30/12/2008 11 :45AM, il va peut etre etre ecrase par celui produit le 30/12/2008 a 9 AM
Or je dois absolument prendre le fichier le + récent.

Alors j`ai pense a 2 solutions mais j`ai besoin de conseils et d`aide
- 1 j`ajoute la date et heure de l`email lorsque je colle les files ds le fichier « TEST MACRO »
- Ds ce cas je dois mettre NomFichier = Attach.FileName & « DATE email au format DATE + HEURE »

- J`ajoute un controle qui colle le file excel en doublon ds un autre folder comme ca je sais quel fichier est en doublon.
Sachant que le nom du file excel inclus une date de production, je pourrai regarder mes emails et voir le + recent.


Les doublons sont des exceptions mais comme je dois filtrer plus de 600-1500 emails selon les mois, ca va me faire gagner un temps monstre cela.

Ds les 2 cas, je fais comment cela ?



Sub ChercheFichiers()
Dim myolApp As Outlook.Application
Dim myNamespace As Outlook.NameSpace
Dim File As Object



Dim MyItems As Items
Dim MyI As Outlook.MailItem
Dim Attach As Attachment
Dim NomFichier, Chemin As String


Set myolApp = CreateObject("Outlook.Application")
'Set myNamespace = myolApp.Session
Set myNamespace = myolApp.GetNamespace("MAPI")
'****************************************************
'upour indiquer où se trouve Le répertoire dans Outlook
Set myFolder = myNamespace.GetDefaultFolder(olFolderInbox)

Set oFld = myFolder.Folders("GDT")
' nom du dossier cree ds ma boite email = GDT - c`est la que je mets tous mes emails que je veux scanner

Set MyItems = oFld.Items


'********************************************************************
'test possible sur l'email avec la propriété "MyI.SenderEmailAddress"
'********************************************************************
For Each MyI In MyItems



If MyI.Attachments.Count > 0 Then


For Each Attach In MyI.Attachments




NomFichier = Attach.FileName



Chemin = "C:\Documents and Settings\xxx\yyy\TEST MACRO\" & NomFichier
Attach.SaveAsFile (Chemin)

Exit For

Next Attach


End If
Next MyI

End Sub
 

smotty

XLDnaute Occasionnel
Re : Sortir fihicer excel de mes emails stockes ds dossier special

bonjour happymarmotte,

Très heureux que ça fonctionne. La solution d'utiliser la date et l'heure me paraissent très bien.

La date utilisant des "/", ce qui peut être gênant dans un nom de fichier et afin de maîtriser le format du nom de fichier, pour chaque email j'utiliserais ce bout de code:

D = MyI.CreationTime
j = Day(D)
Mois = MonthName(Month(D))
y = Year(D)

h = Hour(D)
m = Minute(D)

Extension = j & Mois & y & "_" & h & "H" & m

l'Extension est à ajouter au nom du fichier.

C'est la solution qui me paraît la plus simple.

Cordialement
 

smotty

XLDnaute Occasionnel
Re : Sortir fihicer excel de mes emails stockes ds dossier special

Encore moi,

Juste pour être plus clair, voici ton code complété.



Sub ChercheFichiers()
Dim myolApp As Outlook.Application
Dim myNamespace As Outlook.NameSpace
Dim File As Object



Dim MyItems As Items
Dim MyI As Outlook.MailItem
Dim Attach As Attachment
Dim NomFichier, Chemin As String


Set myolApp = CreateObject("Outlook.Application")
'Set myNamespace = myolApp.Session
Set myNamespace = myolApp.GetNamespace("MAPI")
'************************************************* ***
'upour indiquer où se trouve Le répertoire dans Outlook
Set myFolder = myNamespace.GetDefaultFolder(olFolderInbox)

Set oFld = myFolder.Folders("GDT")
' nom du dossier cree ds ma boite email = GDT - c`est la que je mets tous mes emails que je veux scanner

Set MyItems = oFld.Items


'************************************************* *******************
'test possible sur l'email avec la propriété "MyI.SenderEmailAddress"
'************************************************* *******************
For Each MyI In MyItems



If MyI.Attachments.Count > 0 Then

D = MyI.CreationTime
j = Day(D)
Mois = MonthName(Month(D))
y = Year(D)

h = Hour(D)
m = Minute(D)

Extension = j & Mois & y & "_" & h & "H" & m


For Each Attach In MyI.Attachments




NomFichier = Attach.FileName & "_" & Extension



Chemin = "C:\Documents and Settings\xxx\yyy\TEST MACRO\" & NomFichier
Attach.SaveAsFile (Chemin)


Next Attach


End If
Next MyI

End Sub

Je n'ai pas testé mais à priori c'est ok.

Cordialement
 

smotty

XLDnaute Occasionnel
Re : Sortir fihicer excel de mes emails stockes ds dossier special

Bonjour le happymarmotte, le forum,

La nuit portant conseil, je viens de penser à une solution beaucoup plus simple, il suffit de trier les email par date du plus ancien au plus récent, ainsi le fichier écrasant est forcément le plus récent manuellement ou avec le code suivant (il n'affecte pas l'affichage à l'écran mais les emails sont bien triés dans l'ordre croissant des dates).

il suffit d'ajouter cette ligne:

MyItems.Sort "[CreationTime]", False

Juste après:

Set MyItems = oFld.Items

tu n'as donc pas besoin d'ajouter d'extension au nom du fichier. Cette solution n'est utile que si tu souhaite garder un seul fichier et supprimer les doublons.

Voilà pour le conseil du jour...

Cordialement
 

happymarmotte

XLDnaute Occasionnel
Re : Sortir fihicer excel de mes emails stockes ds dossier special

bonsoir Smotty, le forum,
j`espere que tu vas bien.

encore merci pour le temps passe. c`est tres sympa.

en effet ton conseil est tres bon.
je vais l`appliquer des ce lundi.
je pense que ca devrait tres bien marcher

merci bcp
je te tiens au courant mardi au + tard

bon dimanche

happymarmotte
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia