[Catégorie modifiée .Net -> VBA] fermer la fenetre message outlook

cs_Blorf78 Messages postés 6 Date d'inscription vendredi 16 janvier 2009 Statut Membre Dernière intervention 28 avril 2011 - 28 avril 2011 à 14:11
cs_Blorf78 Messages postés 6 Date d'inscription vendredi 16 janvier 2009 Statut Membre Dernière intervention 28 avril 2011 - 28 avril 2011 à 17:23
Blorf  


Je suis actuellement en train de réaliser une petite macro VBA qui vérifie que la taille de la piece jointe est inferieur à celle autorisé par notre messagerie. Si la piece jointe est trop grande un message averti l'utilisateur que la piece jointe est trop importante et le mail est sauvegarder dans les brouillons.

Jusque la pas de problème, sauf que je voudrai que la fenetre de redaction du mail en question soit fermer automatiquement après la sauvegarde. Car pour le moment elle reste ouverte et repropose naturellement de sauvegarder le mail dans les brouillon lorsque l'on veut la fermer.


voici le code de la macro


Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

If TypeOf Item Is Outlook.MailItem Then

Cancel = Not (ConfirmBigAttachments(Item))

End If

End Sub



Private Function ConfirmBigAttachments(oMail As Outlook.MailItem) As Boolean

Dim lSize As Long

Const MAX_ITEM_SIZE As Long = 527566 ' Byte

Dim bSend As Boolean



bSend = True

If oMail.Attachments.Count Then

oMail.Save

lSize = oMail.Size

If lSize > MAX_ITEM_SIZE Then

bSend (MsgBox("Bonjour, votre pièce jointe dépasse les 5Mo autorisé par la messagerie." & vbCrLf & "Votre message sera concervé dans les brouillons", vbSystemModal, vbinfo) vbNo)

End If

End If

ConfirmBigAttachments = bSend

End Function


Cordialement Merci d'avance

8 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 avril 2011 à 14:33
Blorf

As-tu essayé un traditionnel
oMail.Close
et les paramètres genre olDiscard associé ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
[img]http://allproj
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 avril 2011 à 14:36
"concervé" --> "conservé"
"autorisé" --> "autorisés"
5 Mo = 5.242.880 byte/octet, pas 527.566 ko qui équivaudrait à 0.5 Mo (ou 515 ko)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 avril 2011 à 14:45
Ta MsgBox suppose que tu poses une question avec réponse Oui/Non.
Le texte ne propose aucun choix.
Si tu dois poser une question :
MsgBox "Le texte de la question", vbQuestion Or vbYesNo, _
       "Le titre du message"

Si tu ne dois qu'afficher un message avec un simple Ok :
MsgBox("Bonjour, votre pièce jointe dépasse les 5Mo autorisé par la messagerie." & _
      & vbCrLf & "Votre message sera concervé dans les brouillons", _
      vbSystemModal Or vbInformation Or vbOKOnly, "Le titre du message"
Voir l'aide pour + d'info

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
[img]http://allproj
0
cs_Blorf78 Messages postés 6 Date d'inscription vendredi 16 janvier 2009 Statut Membre Dernière intervention 28 avril 2011
28 avril 2011 à 15:15
Bonjour et merci,


merci pour les petites rectifications d'erreur d'inattention comme la mauvaise convertion en byte.

j'ai bien essayer la commande
oMail.Close(olDiscard)
sa ma l'air d'etre la bonne commande effectivement mais cela génère un message d'erreur d'exécution '-1594753015(a0f20009)':

La commande Item.close ne peut pas etre éxecutée pendant un évènement Item.send

Une idée ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 avril 2011 à 16:30
Je pense qu'il suffit donc de ressortir cette commande de l'évènement et d'attendre que le Send soit terminé.

Que vaut Cancel dans la Sub Application_ItemSend ?

Méthode de bogage :
- F9 sur une ligne de code
Le programme s'y arrêtera au prochain passage
Survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
? maVariable
pour qu'elle s'inscrive dans la fenêtre.
- F8 (VB6) ou F10 (.Net) pour avancer d'une ligne de code
- F5 pour continuer normalement
0
cs_Blorf78 Messages postés 6 Date d'inscription vendredi 16 janvier 2009 Statut Membre Dernière intervention 28 avril 2011
28 avril 2011 à 16:49
bonjour,


Cancel = False

lorsque j'execute le code en mode debogage (F9)
0
cs_Blorf78 Messages postés 6 Date d'inscription vendredi 16 janvier 2009 Statut Membre Dernière intervention 28 avril 2011
28 avril 2011 à 17:08
Blorf  

je comprend bien le concept derriere votre réponse : "Je pense qu'il suffit donc de ressortir cette commande de l'évènement et d'attendre que le Send soit terminé. "

Cependant je n'arrive pas a saisir ou je doit mettre la ligne de fermeture de la fenetre message puisque je n'ai que la Sub Application_ItemSend qui appel la fonction ConfirmBigAttachments

et pour rectifié la reponse précédente je pense qu'a la toute fin du script (après l'execution de la fonction ConfirmBigAttachments) Cancel = not False donc true
0
cs_Blorf78 Messages postés 6 Date d'inscription vendredi 16 janvier 2009 Statut Membre Dernière intervention 28 avril 2011
28 avril 2011 à 17:23
j'ai bien essayer de le mettre le item close aprés la boucle if qui contient le cancel mais sa me met toujours la meme erreur....


Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

If TypeOf Item Is Outlook.MailItem Then

Cancel = Not (ConfirmBigAttachments(Item))

End If

If Cancel = True Then
Item.Close (olDiscard)
End If

End Sub


Pourtant en sortant du premier if l'instruction cancel devrai s'etre executé dsl mais la je suis dubitatif et perplexe je ne vois pas comment fermer la fenetre....
0
Rejoignez-nous