OVH Cloud OVH Cloud

Renommer une PJ dans un mail reçu

22 réponses
Avatar
Fabrice N.
Bonjour à tous,

Le principal est dans l'objet.

J'explique le contexte :
Sous O2003, on reçoit des mails venant de pays asiatique.
Les PJ, souvent des PDF, ont donc des caractères japonnais ou autre
dans le nom du fichier.
Mon soucis est que lorsqu'on essaye d'ouvrir le fichier depuis le mail,
Acrobat reader dit ne pas reconnaître le format.
Par contre, si on enregistre le fichier sur disque, les caractères un
peu spéciaux disparaissent et le fichier est lisible sans problème.

Jusque là, vous me direz, il n'y a pas trop de problème.
Le soucis, est que mes collègue confondent la messagerie avec le
serveur de stockage. Du coup, pour garder ces fichiers dans leur BAL,
il se le renvoie par mail et garde bien sûr le mail d'origine pour le
texte qu'il contient.
Du coup, des fichiers qui se retrouvetn 2 fois dans les BAL...

Je cherche donc à savoir si il y a moyen de modifier le nom d'une ou
plusieurs PJ dans un mail pour éviter ça...
Par VBA j'imagine, mais un conseil sur les instructions à utiliser
serait le bienvenue...

Merci d'avance pour le coup de main...

10 réponses

1 2 3
Avatar
Fabrice N.
Bonjour Geo,

Pouvez-vous me confirmer que vous n'avez aucun message d'alerte de Outlook
? Il semble qu'en version 2007 la plupart ont disparu.


Je confirme, je n'ai eu aucun message d'alerte...

Par contre, je suis sous O2003, pas sous 2007...


Gasp, si j'avais mieux lu, je ne me serai pas lancé ;-)

Et en version 2003 :
Dim Dossier As Folder
passe aussi ?


Non, ça ne marche pas...

Petit remarque, sur ton code :
Le teste pour savoir si l'élement ouvert est un mail ou pas ne sert à
rien.
En fait, comme ta variable est de type MailItem, à la ligne

-> Set Courrier = Inspecteur.CurrentItem

il y a une erreur si on est sur autre chose...



Avatar
Geo

Et en version 2003 :
Dim Dossier As Folder
passe aussi ?


Non, ça ne marche pas...


Ok, normal

Petit remarque, sur ton code :
Le teste pour savoir si l'élement ouvert est un mail ou pas ne sert à rien.
En fait, comme ta variable est de type MailItem, à la ligne

-> Set Courrier = Inspecteur.CurrentItem

il y a une erreur si on est sur autre chose...


Effectivement :-(
Deux solutions :
déclarer Courrier en Object ou inverser les instructions :
'Cet affichage concerne-t-il un courrier ?
If TypeName(Inspecteur.CurrentItem) <> "MailItem" Then
MsgBox "Choisir un courrier"
Exit Sub
End If
Set Courrier = Inspecteur.CurrentItem
C'est sympa de faire un retour, ça me permet de m'améliorer :-)

--
A+


Avatar
Fabrice N.
Bonjour Geo,
Deux solutions :
déclarer Courrier en Object ou inverser les instructions :
'Cet affichage concerne-t-il un courrier ?
If TypeName(Inspecteur.CurrentItem) <> "MailItem" Then
MsgBox "Choisir un courrier"
Exit Sub
End If
Set Courrier = Inspecteur.CurrentItem


Je suis un peu plus bourrin que toi. Je suis passé par la gestion
d'erreur :
On Error Resume Next
Set Courrier = Inspecteur.CurrentItem
If Err <> 0 Then
MsgBox "L'élément en cours n'est pas un e-mail"
Exit Sub
End If
On Error GoTo 0


C'est sympa de faire un retour, ça me permet de m'améliorer :-)


C'est fais pour ça les NG non ? ... ;-)
C'est comme ça qu'on échange des astuces et qu'on progresse... ;-)

Et pis si quelqu'un veut faire la même chose, il aura toute les
infos... ça évitera un autre post pour dire "y marche pas tron truc..."
... ;o)

Avatar
Oliv'
C'est fais pour ça les NG non ? ... ;-)
C'est comme ça qu'on échange des astuces et qu'on progresse... ;-)

Et pis si quelqu'un veut faire la même chose, il aura toute les
infos... ça évitera un autre post pour dire "y marche pas tron
truc..." ... ;o)


J'attire votre Attention sur le fait qu'un mail peux contenir 2 pj avec le
même nom !!! si si.
et que le PJ.SaveAsFile supprime le fichier s'il existe dans le dossier en
question.

Par contre si le FileName est en lecture seule le DisplayName ne l'est pas
!!!
et là moins de boulot pour votre cpu et votre disque dur !!!!


Si vous voulez je peux ajouter votre macro à la faq de Jièl quand elle sera
au point.


--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Outlook : http://faq.outlook.free.fr/
les archives : http://groups.google.com/group/microsoft.public.fr.outlook
Dernière chance http://www.outlookcode.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Avatar
Fabrice N.
Bonjour Oliv',

J'attire votre Attention sur le fait qu'un mail peux contenir 2 pj avec le
même nom !!! si si.
et que le PJ.SaveAsFile supprime le fichier s'il existe dans le dossier en
question.


J'ai vu, mais si on part du principe que c'est un dossier à considérer
comme temporaire, ce n'est pas encore trop grave...

Par contre si le FileName est en lecture seule le DisplayName ne l'est pas
!!!
et là moins de boulot pour votre cpu et votre disque dur !!!!


C'est vrai, mais on a testé en premier de modifier le DisplayName et ça
ne marche pas.
Je n'ai pas d'erreur, mais rien ne change dans le mail...
j'aurais oublié quelque chose ?

Si vous voulez je peux ajouter votre macro à la faq de Jièl quand elle sera
au point.


Pas de problème, avec grand plaisir...
J'ai déjà fait quelques modif car dans mon idée, lorsque l'utilisateur
va lancer la macro, pour chaque pièce jointe il aura la question du nom
qu'il veut mettre à la place. Il pourra ainsi zapper les PJ qu'il veut
laisser comme ça. Car je me suis aperçu que dans le cas un mail avec
une image en signature, ça me met la signature en pièce jointe et elle
disparaît du corps du message...

Reste plus qu'à prévoir la suppression des fichiers temporaires, sauf
si tu sais comment renommer les pièces jointes directement, et ensuite,
je posterais tout ça...

A+

Avatar
Oliv'
*Fabrice N." <"f.nebbia" avec l'@ "technicn.com <"f.nebbia" avec l'@
"technicn.com"> que je salue a écrit *:
Bonjour Oliv',

J'attire votre Attention sur le fait qu'un mail peux contenir 2 pj
avec le même nom !!! si si.
et que le PJ.SaveAsFile supprime le fichier s'il existe dans le
dossier en question.


J'ai vu, mais si on part du principe que c'est un dossier à considérer
comme temporaire, ce n'est pas encore trop grave...

Par contre si le FileName est en lecture seule le DisplayName ne
l'est pas !!!
et là moins de boulot pour votre cpu et votre disque dur !!!!


C'est vrai, mais on a testé en premier de modifier le DisplayName et
ça ne marche pas.
Je n'ai pas d'erreur, mais rien ne change dans le mail...
j'aurais oublié quelque chose ?


chose étrange j'ai fait le test avec un mail au hazard comportant en pj une
carte de visite et bien en changeant le displayname le
FileName changeait aussi (après avoir fermé puis réouvert le mail) par
contre avec un autre mail comportant un pdf ou .txt ca ne marche pas !!

étrange non ? je cherche!

Si vous voulez je peux ajouter votre macro à la faq de Jièl quand
elle sera au point.


Pas de problème, avec grand plaisir...
J'ai déjà fait quelques modif car dans mon idée, lorsque l'utilisateur
va lancer la macro, pour chaque pièce jointe il aura la question du
nom qu'il veut mettre à la place. Il pourra ainsi zapper les PJ qu'il
veut laisser comme ça. Car je me suis aperçu que dans le cas un mail
avec une image en signature, ça me met la signature en pièce jointe
et elle disparaît du corps du message...


J'ai une fonction pour vérifier si c'est une pj ou un élemùent inséré :

Function Attachtype(ByVal strEntryID As String, attindex As Integer) As
Variant

Dim oSession As MAPI.Session
' CDO objects
Dim oMsg As MAPI.Message
Dim oAttachs As MAPI.Attachments
Dim oAttach As MAPI.Attachment

' initialize CDO session
On Error Resume Next
Set oSession = CreateObject("MAPI.Session")
oSession.Logon "", "", False, False

' get the message created earlier
Set oMsg = oSession.GetMessage(strEntryID)
' set properties of the attached graphic that make
' it embedded and give it an ID for use in an <IMG> tag
Set oAttachs = oMsg.Attachments
Set oAttach = oAttachs.Item(attindex)
Dim strCID As String
strCID = oAttach.Fields(&H3712001E)

Attachtype = strCID
Set oMsg = Nothing
oSession.Logoff
Set oSession = Nothing

End Function


Pour l'utiliser :

strEntryID = ObjCurrentMessage.EntryID
For Each objAtt In objAtts
typeatt = Attachtype(strEntryID, objAtt.index)
If typeatt <> "" ' si pas vide = élément du mail
Or UCase(Right(objAtt.FileName, 3)) = "ZIP" Then
MsgBox " [" & objAtt.FileName & "] est une image insérée ou est déjà
un ZIP" & vbCr & " cette pièce ne sera pas zippée"
nb_embedded = nb_embedded + 1
End If
Next
Reste plus qu'à prévoir la suppression des fichiers temporaires, sauf
si tu sais comment renommer les pièces jointes directement, et
ensuite, je posterais tout ça...


pour la suppression

on error resume next
kill repertoire & "*.*"
on error goto 0



--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Outlook : http://faq.outlook.free.fr/
les archives : http://groups.google.com/group/microsoft.public.fr.outlook
Dernière chance http://www.outlookcode.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Avatar
Fabrice N.
Bonjour Oliv',

avec un autre mail comportant un pdf ou .txt ca ne marche pas !!
étrange non ? je cherche!


Je ne te le fais pas dire... bienvenu dans notre 4ème dimension... ;-)

J'ai une fonction pour vérifier si c'est une pj ou un élemùent inséré :


Trop bien... avec tout ce que j'apprends, j'ai la tête qui risque
d'exploser... ;-)

J'ai bien fait de me lever ce matin... lol

on error resume next
kill repertoire & "*.*"
on error goto 0


Nickel... à force de me macher le boulot comme ça, je vais finir par
devenir fainéant... euh non... en fait je crois que je suis déjà devenu
fainéant... ;-)

Avatar
Oliv'
*Fabrice N." <"f.nebbia" avec l'@ "technicn.com <"f.nebbia" avec l'@
"technicn.com"> que je salue a écrit *:
Bonjour Oliv',

avec un autre mail comportant un pdf ou .txt ca ne marche pas !!
étrange non ? je cherche!


Je ne te le fais pas dire... bienvenu dans notre 4ème dimension... ;-)

J'ai une fonction pour vérifier si c'est une pj ou un élemùent
inséré :


Trop bien... avec tout ce que j'apprends, j'ai la tête qui risque
d'exploser... ;-)

J'ai bien fait de me lever ce matin... lol

on error resume next
kill repertoire & "*.*"
on error goto 0


Nickel... à force de me macher le boulot comme ça, je vais finir par
devenir fainéant... euh non... en fait je crois que je suis déjà
devenu fainéant... ;-)



encore un peu plus alors avec cela ;-))
en utilisant REDEMPTION Filename devrait être lecture et écriture
http://www.dimastr.com/redemption/rdo/RDOAttachment.htm


--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Outlook : http://faq.outlook.free.fr/
les archives : http://groups.google.com/group/microsoft.public.fr.outlook
Dernière chance http://www.outlookcode.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Avatar
Fabrice N.
Bonjour Oliv',

encore un peu plus alors avec cela ;-))
en utilisant REDEMPTION Filename devrait être lecture et écriture
http://www.dimastr.com/redemption/rdo/RDOAttachment.htm


Je t'ai vu en parler plusieurs fois sans trop y prêter attention...
C'est quoi rédemption au juste ?
Si j'ai bien compris, ça ajoute des instructions supplémentaires sur
outlook pour le vba c'est ça ? Il y a autre chose ?
C'est à installer sur chaque poste après je suppose ?

En tout cas, merci à toi et à Géo pour le coup de main que vous m'avez
donner...
Je vais tester tout ça et vous tiens au courant...

A+ et bon week-end à tous...

Avatar
Geo

chose étrange j'ai fait le test avec un mail au hazard comportant en pj une carte de
visite et bien en changeant le displayname le
FileName changeait aussi (après avoir fermé puis réouvert le mail) par contre avec un
autre mail comportant un pdf ou .txt ca ne marche pas !!

étrange non ? je cherche!


Le plus beau c'est que le DisplayName a changé, mais pas le nom affiché
dans le courriel. Alors qu'on aurait pu penser que c'était la même
chose.
Merci pour la précision sur les doublons possibles, ça ne m'était pas
venu à l'idée.

--
A+

1 2 3