Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Screenupdating = false pour toutes les applications, solution ?

12 réponses
Avatar
Franck P
Bonjour à tous,

Je cherche à réaliser une application en VB Excel. Cette dernière envoie
automatiquement un email par le biais d'Outlook mais je voudrais que toute
la partie sous Outlook (réalisation du mail + envoi à l'aide de SendKeys)
soit invisible pour l'utilisateur.
Le problème est que Application.ScreenUpdation = False ne fonctionne que
pour Excel mais pas pour la partie sous Outlook... Comment faire ?

Merci d'avance à tous pour votre aide !

Franck

10 réponses

1 2
Avatar
isabelle
bonjoour Franck,

si tu utilise une méthode comme celle-ci :

Sub envoieMailOutlook()
Application.DisplayAlerts = False
Dim ol As New Outlook.Application
Dim olmail As MailItem

Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.To = Range("a1").Value
.Subject = Range("b1").Value
For Each c In Selection
x = x & vbNewLine & c
Next
.Body = x
.Display '.ou Send
End With
Application.DisplayAlerts = True
End Sub

tu mettre .visible = false

isabelle

Franck P a écrit :
Bonjour à tous,

Je cherche à réaliser une application en VB Excel. Cette dernière envoie
automatiquement un email par le biais d'Outlook mais je voudrais que toute
la partie sous Outlook (réalisation du mail + envoi à l'aide de SendKeys)
soit invisible pour l'utilisateur.
Le problème est que Application.ScreenUpdation = False ne fonctionne que
pour Excel mais pas pour la partie sous Outlook... Comment faire ?

Merci d'avance à tous pour votre aide !

Franck





Avatar
Franck P
Bonjour Isabelle,

Merci beaucoup pour ta réponse.
Malheureusement, elle ne marche pas... A moins que je n'ai pas compris ta
phrase :
"tu mettre .visible = false" => faut-il insérer cela quelque part ?

J'ai recopié ton code mais cela entraîne la présence d'une alerte Outlook
concernant "Un programme tente d'envoyer automatiquement des courriers en
votre nom [...]" ; ce qui ne me satisfait pas.

Aujourd'hui j'utilise le code suivant pour ne pas avoir cette alerte mais
Outlook apparaît à l'écran, chose que je cherche à éviter...
****************************************
' ------------------------------------------------------------------
Option Explicit
' ------------------------------------------------------------------
'Déclaration des tableaux qui recevront les touches à utiliser suivant
' le logiciel de messagerie par défaut du système.
Dim TouchesPJ(5) As String, TouchesEnvoi(5) As String

' ------------------------------------------------------------------
' Procédure principale qui compose les éléments du message
' et effectue la demande d'envoi
' c'est cette procédure qui sera appelée par le programme principal
' (ici Excel)
'
Sub Test()
' DECLARATION DES VARIABLES
Dim Adresse As String
Dim Objet As String
Dim Corps As String
Dim PJ As String
Dim HyperLien As String ' Reçoit les éléments de l'hyperlien
Dim i As Integer ' un compteur
Dim Client As Integer

Adresse = ""
Objet = "Coucou"
Corps = "Test"

' Remarque : l'argument PJ (pièce jointe) est optionnel. S'il est fourni,
' c'est le chemin complet du fichier à joindre qui doit être fourni
' pour joindre plusieurs pièces, il faudrait que PJ soit
' un tableau et qu'il soit traité + bas par une boucle...
' composés avec les arguments fournis
' la syntaxe de base du mailto est la suivante :
' mailto:?Subject=sujet du message&Body=corps du message
' je ne prends pas en compte les copies, copies cachées
' ou autres confirmation de lecture, je suppose
' qu'il faudrait utiliser d'autre arguments de mailto...

' Le ? introduit les arguments
HyperLien = "mailto:" & Adresse & "?"
HyperLien = HyperLien & "Subject=" & Objet
HyperLien = HyperLien & "&Body=" & Corps
' le & sépare les arguments

Application.DisplayAlerts = False
' Activation du lien
ActiveWorkbook.FollowHyperlink HyperLien

Attendre 5 ' Appel d'une procédure qui temporise
' c'est à dire que la procédure courante
' (ici EnvoiEmail) est suspendue pendant 5s
' cela permet d'Attendre que le client
' de messagerie soit lancé et prêt
' avant d'envoyer les touches
' sinon ce serait le programme appelant
' (ici Excel) qui recevrait les touches

Office2003OutLook

' Le traitement de la pièce jointe ne s'exécute
' que si la procédure à reçu qqchose
' dans l'argument PJ (Optional<=>Facultatif)

If PJ <> "" Then
' dans TouchesPJ(0) on a stocké le nombre de touches
' à envoyer au programme pour joindre une pièce
For i = 1 To TouchesPJ(0) ' pour chaque touche à envoyer
SendKeys TouchesPJ(i), True ' Envoi de la touches
Attendre 1 ' temporise (à règler éventuellement)
Next i
SendKeys PJ, True 'A ce stade le programme attend un nom de fichier
' on lui envoie
Attendre 1 ' on temporise
SendKeys "{ENTER}", True ' et on valide ce nom de fichier
Attendre 1
End If
For i = 1 To TouchesEnvoi(0) ' idem pour les touches d'envoi
' du message
SendKeys TouchesEnvoi(i), True
Next i
' Fin de la procédure principale

Application.DisplayAlerts = True
MsgBox ("C'est fini !! Merci beaucoup.")

End Sub

' -----------------------------------------------------------------
Private Sub Attendre(Secondes As Integer)
' Cette procédure temporise pendant le nombre
' de secondes qu'on lui transmet en argument
Dim Début As Long, Fin As Long, Chrono As Long
Début = Timer
Fin = Début + Secondes
Do Until Timer >= Fin
DoEvents
Loop
End Sub

Private Sub Office2003OutLook()
'Initialisation des tableaux de touches pour Office Outlook
' Pour une pièce jointe
TouchesPJ(0) = 2 ' Nombre de touches nécessaires
TouchesPJ(1) = "%i" ' Appel du menu Insertion par la touche Alt-i
TouchesPJ(2) = "f" ' appel du sous-menu fichier par la touche f
' Pour l'envoi du mail
TouchesEnvoi(0) = 2 ' Nombre de touches nécessaires
TouchesEnvoi(1) = "+{TAB}" 'Revenir sur l'en-tête de l'email
TouchesEnvoi(2) = "%v" ' Envoi du message avec Alt-v
End Sub
****************************************
Merci encore pour ton aide,

Franck
======================================================== "isabelle" a écrit dans le message de news:

bonjoour Franck,

si tu utilise une méthode comme celle-ci :

Sub envoieMailOutlook()
Application.DisplayAlerts = False
Dim ol As New Outlook.Application
Dim olmail As MailItem

Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.To = Range("a1").Value
.Subject = Range("b1").Value
For Each c In Selection
x = x & vbNewLine & c
Next
.Body = x
.Display '.ou Send
End With
Application.DisplayAlerts = True
End Sub

tu mettre .visible = false

isabelle

Franck P a écrit :
Bonjour à tous,

Je cherche à réaliser une application en VB Excel. Cette dernière envoie
automatiquement un email par le biais d'Outlook mais je voudrais que
toute la partie sous Outlook (réalisation du mail + envoi à l'aide de
SendKeys) soit invisible pour l'utilisateur.
Le problème est que Application.ScreenUpdation = False ne fonctionne que
pour Excel mais pas pour la partie sous Outlook... Comment faire ?

Merci d'avance à tous pour votre aide !

Franck






Avatar
Laurent
Bonjour,
C'est un problèle lié à Office 2003, avec Office 2007, je n'ai plus ce
message, les mails partent de façon invisible... sauf si Outlook est fermé,
il ouvre Outlook et le referme.
J'ai une autre solution, il faut installé IIs sur le poste et utilisé CDO :
Un morceau de mon code ...
...
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
iConf.Fields.Update
With iMsg
'Création du message et ajout dans la queue
On Error GoTo Suivant
Set .Configuration = iConf
.To = Sheets("EnvoiMail").Cells(NoLigne, 2)
.BCC = ""
.From = Expediteur
.Subject = Objet
.TextBody = Corps
.AddAttachment PJ
.Send
On Error GoTo 0
End With
...

Laurent

"Franck P" a écrit :

Bonjour Isabelle,

Merci beaucoup pour ta réponse.
Malheureusement, elle ne marche pas... A moins que je n'ai pas compris ta
phrase :
"tu mettre .visible = false" => faut-il insérer cela quelque part ?

J'ai recopié ton code mais cela entraîne la présence d'une alerte Outlook
concernant "Un programme tente d'envoyer automatiquement des courriers en
votre nom [...]" ; ce qui ne me satisfait pas.

Aujourd'hui j'utilise le code suivant pour ne pas avoir cette alerte mais
Outlook apparaît à l'écran, chose que je cherche à éviter...
****************************************
' ------------------------------------------------------------------
Option Explicit
' ------------------------------------------------------------------
'Déclaration des tableaux qui recevront les touches à utiliser suivant
' le logiciel de messagerie par défaut du système.
Dim TouchesPJ(5) As String, TouchesEnvoi(5) As String

' ------------------------------------------------------------------
' Procédure principale qui compose les éléments du message
' et effectue la demande d'envoi
' c'est cette procédure qui sera appelée par le programme principal
' (ici Excel)
'
Sub Test()
' DECLARATION DES VARIABLES
Dim Adresse As String
Dim Objet As String
Dim Corps As String
Dim PJ As String
Dim HyperLien As String ' Reçoit les éléments de l'hyperlien
Dim i As Integer ' un compteur
Dim Client As Integer

Adresse = ""
Objet = "Coucou"
Corps = "Test"

' Remarque : l'argument PJ (pièce jointe) est optionnel. S'il est fourni,
' c'est le chemin complet du fichier à joindre qui doit être fourni
' pour joindre plusieurs pièces, il faudrait que PJ soit
' un tableau et qu'il soit traité + bas par une boucle...
' composés avec les arguments fournis
' la syntaxe de base du mailto est la suivante :
' mailto:?Subject=sujet du message&Body=corps du message
' je ne prends pas en compte les copies, copies cachées
' ou autres confirmation de lecture, je suppose
' qu'il faudrait utiliser d'autre arguments de mailto...

' Le ? introduit les arguments
HyperLien = "mailto:" & Adresse & "?"
HyperLien = HyperLien & "Subject=" & Objet
HyperLien = HyperLien & "&Body=" & Corps
' le & sépare les arguments

Application.DisplayAlerts = False
' Activation du lien
ActiveWorkbook.FollowHyperlink HyperLien

Attendre 5 ' Appel d'une procédure qui temporise
' c'est à dire que la procédure courante
' (ici EnvoiEmail) est suspendue pendant 5s
' cela permet d'Attendre que le client
' de messagerie soit lancé et prêt
' avant d'envoyer les touches
' sinon ce serait le programme appelant
' (ici Excel) qui recevrait les touches

Office2003OutLook

' Le traitement de la pièce jointe ne s'exécute
' que si la procédure à reçu qqchose
' dans l'argument PJ (Optional<=>Facultatif)

If PJ <> "" Then
' dans TouchesPJ(0) on a stocké le nombre de touches
' à envoyer au programme pour joindre une pièce
For i = 1 To TouchesPJ(0) ' pour chaque touche à envoyer
SendKeys TouchesPJ(i), True ' Envoi de la touches
Attendre 1 ' temporise (à règler éventuellement)
Next i
SendKeys PJ, True 'A ce stade le programme attend un nom de fichier
' on lui envoie
Attendre 1 ' on temporise
SendKeys "{ENTER}", True ' et on valide ce nom de fichier
Attendre 1
End If
For i = 1 To TouchesEnvoi(0) ' idem pour les touches d'envoi
' du message
SendKeys TouchesEnvoi(i), True
Next i
' Fin de la procédure principale

Application.DisplayAlerts = True
MsgBox ("C'est fini !! Merci beaucoup.")

End Sub

' -----------------------------------------------------------------
Private Sub Attendre(Secondes As Integer)
' Cette procédure temporise pendant le nombre
' de secondes qu'on lui transmet en argument
Dim Début As Long, Fin As Long, Chrono As Long
Début = Timer
Fin = Début + Secondes
Do Until Timer >= Fin
DoEvents
Loop
End Sub

Private Sub Office2003OutLook()
'Initialisation des tableaux de touches pour Office Outlook
' Pour une pièce jointe
TouchesPJ(0) = 2 ' Nombre de touches nécessaires
TouchesPJ(1) = "%i" ' Appel du menu Insertion par la touche Alt-i
TouchesPJ(2) = "f" ' appel du sous-menu fichier par la touche f
' Pour l'envoi du mail
TouchesEnvoi(0) = 2 ' Nombre de touches nécessaires
TouchesEnvoi(1) = "+{TAB}" 'Revenir sur l'en-tête de l'email
TouchesEnvoi(2) = "%v" ' Envoi du message avec Alt-v
End Sub
****************************************
Merci encore pour ton aide,

Franck
======================================================== > "isabelle" a écrit dans le message de news:

> bonjoour Franck,
>
> si tu utilise une méthode comme celle-ci :
>
> Sub envoieMailOutlook()
> Application.DisplayAlerts = False
> Dim ol As New Outlook.Application
> Dim olmail As MailItem
>
> Set ol = New Outlook.Application
> Set olmail = ol.CreateItem(olMailItem)
> With olmail
> .To = Range("a1").Value
> .Subject = Range("b1").Value
> For Each c In Selection
> x = x & vbNewLine & c
> Next
> .Body = x
> .Display '.ou Send
> End With
> Application.DisplayAlerts = True
> End Sub
>
> tu mettre .visible = false
>
> isabelle
>
> Franck P a écrit :
>> Bonjour à tous,
>>
>> Je cherche à réaliser une application en VB Excel. Cette dernière envoie
>> automatiquement un email par le biais d'Outlook mais je voudrais que
>> toute la partie sous Outlook (réalisation du mail + envoi à l'aide de
>> SendKeys) soit invisible pour l'utilisateur.
>> Le problème est que Application.ScreenUpdation = False ne fonctionne que
>> pour Excel mais pas pour la partie sous Outlook... Comment faire ?
>>
>> Merci d'avance à tous pour votre aide !
>>
>> Franck
>>
>>





Avatar
isabelle
bonjoour Franck,

oui, et il faudrais que tu configure outlook pour accepter les envois à
partir d'excel

Sub envoieMailOutlook()
Application.DisplayAlerts = False
Dim ol As New Outlook.Application
Dim olmail As MailItem

Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.Visible = False
.To = Range("a1").Value
.Subject = Range("b1").Value
For Each c In Selection
x = x & vbNewLine & c
Next
.Body = x
. Send
End With
Application.DisplayAlerts = True
End Sub

isabelle

Franck P a écrit :
Bonjour Isabelle,

Merci beaucoup pour ta réponse.
Malheureusement, elle ne marche pas... A moins que je n'ai pas compris ta
phrase :
"tu mettre .visible = false" => faut-il insérer cela quelque part ?

J'ai recopié ton code mais cela entraîne la présence d'une alerte Outlook
concernant "Un programme tente d'envoyer automatiquement des courriers en
votre nom [...]" ; ce qui ne me satisfait pas.

Aujourd'hui j'utilise le code suivant pour ne pas avoir cette alerte mais
Outlook apparaît à l'écran, chose que je cherche à éviter...
****************************************
' ------------------------------------------------------------------
Option Explicit
' ------------------------------------------------------------------
'Déclaration des tableaux qui recevront les touches à utiliser suivant
' le logiciel de messagerie par défaut du système.
Dim TouchesPJ(5) As String, TouchesEnvoi(5) As String

' ------------------------------------------------------------------
' Procédure principale qui compose les éléments du message
' et effectue la demande d'envoi
' c'est cette procédure qui sera appelée par le programme principal
' (ici Excel)
'
Sub Test()
' DECLARATION DES VARIABLES
Dim Adresse As String
Dim Objet As String
Dim Corps As String
Dim PJ As String
Dim HyperLien As String ' Reçoit les éléments de l'hyperlien
Dim i As Integer ' un compteur
Dim Client As Integer

Adresse = ""
Objet = "Coucou"
Corps = "Test"

' Remarque : l'argument PJ (pièce jointe) est optionnel. S'il est fourni,
' c'est le chemin complet du fichier à joindre qui doit être fourni
' pour joindre plusieurs pièces, il faudrait que PJ soit
' un tableau et qu'il soit traité + bas par une boucle...
' composés avec les arguments fournis
' la syntaxe de base du mailto est la suivante :
' mailto:?Subject=sujet du message&Body=corps du message
' je ne prends pas en compte les copies, copies cachées
' ou autres confirmation de lecture, je suppose
' qu'il faudrait utiliser d'autre arguments de mailto...

' Le ? introduit les arguments
HyperLien = "mailto:" & Adresse & "?"
HyperLien = HyperLien & "Subject=" & Objet
HyperLien = HyperLien & "&Body=" & Corps
' le & sépare les arguments

Application.DisplayAlerts = False
' Activation du lien
ActiveWorkbook.FollowHyperlink HyperLien

Attendre 5 ' Appel d'une procédure qui temporise
' c'est à dire que la procédure courante
' (ici EnvoiEmail) est suspendue pendant 5s
' cela permet d'Attendre que le client
' de messagerie soit lancé et prêt
' avant d'envoyer les touches
' sinon ce serait le programme appelant
' (ici Excel) qui recevrait les touches

Office2003OutLook

' Le traitement de la pièce jointe ne s'exécute
' que si la procédure à reçu qqchose
' dans l'argument PJ (Optional<=>Facultatif)

If PJ <> "" Then
' dans TouchesPJ(0) on a stocké le nombre de touches
' à envoyer au programme pour joindre une pièce
For i = 1 To TouchesPJ(0) ' pour chaque touche à envoyer
SendKeys TouchesPJ(i), True ' Envoi de la touches
Attendre 1 ' temporise (à règler éventuellement)
Next i
SendKeys PJ, True 'A ce stade le programme attend un nom de fichier
' on lui envoie
Attendre 1 ' on temporise
SendKeys "{ENTER}", True ' et on valide ce nom de fichier
Attendre 1
End If
For i = 1 To TouchesEnvoi(0) ' idem pour les touches d'envoi
' du message
SendKeys TouchesEnvoi(i), True
Next i
' Fin de la procédure principale

Application.DisplayAlerts = True
MsgBox ("C'est fini !! Merci beaucoup.")

End Sub

' -----------------------------------------------------------------
Private Sub Attendre(Secondes As Integer)
' Cette procédure temporise pendant le nombre
' de secondes qu'on lui transmet en argument
Dim Début As Long, Fin As Long, Chrono As Long
Début = Timer
Fin = Début + Secondes
Do Until Timer >= Fin
DoEvents
Loop
End Sub

Private Sub Office2003OutLook()
'Initialisation des tableaux de touches pour Office Outlook
' Pour une pièce jointe
TouchesPJ(0) = 2 ' Nombre de touches nécessaires
TouchesPJ(1) = "%i" ' Appel du menu Insertion par la touche Alt-i
TouchesPJ(2) = "f" ' appel du sous-menu fichier par la touche f
' Pour l'envoi du mail
TouchesEnvoi(0) = 2 ' Nombre de touches nécessaires
TouchesEnvoi(1) = "+{TAB}" 'Revenir sur l'en-tête de l'email
TouchesEnvoi(2) = "%v" ' Envoi du message avec Alt-v
End Sub
****************************************
Merci encore pour ton aide,

Franck
======================================================== > "isabelle" a écrit dans le message de news:


bonjoour Franck,

si tu utilise une méthode comme celle-ci :

Sub envoieMailOutlook()
Application.DisplayAlerts = False
Dim ol As New Outlook.Application
Dim olmail As MailItem

Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.To = Range("a1").Value
.Subject = Range("b1").Value
For Each c In Selection
x = x & vbNewLine & c
Next
.Body = x
.Display '.ou Send
End With
Application.DisplayAlerts = True
End Sub

tu mettre .visible = false

isabelle

Franck P a écrit :

Bonjour à tous,

Je cherche à réaliser une application en VB Excel. Cette dernière envoie
automatiquement un email par le biais d'Outlook mais je voudrais que
toute la partie sous Outlook (réalisation du mail + envoi à l'aide de
SendKeys) soit invisible pour l'utilisateur.
Le problème est que Application.ScreenUpdation = False ne fonctionne que
pour Excel mais pas pour la partie sous Outlook... Comment faire ?

Merci d'avance à tous pour votre aide !

Franck












Avatar
Franck P
Rebonjour Isabelle,

Merci beaucoup pour ton nouveau message.
J'ai malheureusement une nouvelle erreur au niveau du ".Visible = False" :
"Erreur d'exécution '438' : Propriété ou méthode non gérée par cet objet"...

As-tu une idée ?

Merci encore et bon appétit,

Franck

"isabelle" a écrit dans le message de news:

bonjoour Franck,

oui, et il faudrais que tu configure outlook pour accepter les envois à
partir d'excel

Sub envoieMailOutlook()
Application.DisplayAlerts = False
Dim ol As New Outlook.Application
Dim olmail As MailItem

Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.Visible = False
.To = Range("a1").Value
.Subject = Range("b1").Value
For Each c In Selection
x = x & vbNewLine & c
Next
.Body = x
. Send End With
Application.DisplayAlerts = True
End Sub

isabelle

Franck P a écrit :
Bonjour Isabelle,

Merci beaucoup pour ta réponse.
Malheureusement, elle ne marche pas... A moins que je n'ai pas compris ta
phrase :
"tu mettre .visible = false" => faut-il insérer cela quelque part ?

J'ai recopié ton code mais cela entraîne la présence d'une alerte Outlook
concernant "Un programme tente d'envoyer automatiquement des courriers en
votre nom [...]" ; ce qui ne me satisfait pas.

Aujourd'hui j'utilise le code suivant pour ne pas avoir cette alerte mais
Outlook apparaît à l'écran, chose que je cherche à éviter...
****************************************
' ------------------------------------------------------------------
Option Explicit
' ------------------------------------------------------------------
'Déclaration des tableaux qui recevront les touches à utiliser suivant
' le logiciel de messagerie par défaut du système.
Dim TouchesPJ(5) As String, TouchesEnvoi(5) As String

' ------------------------------------------------------------------
' Procédure principale qui compose les éléments du message
' et effectue la demande d'envoi
' c'est cette procédure qui sera appelée par le programme principal
' (ici Excel)
'
Sub Test()
' DECLARATION DES VARIABLES
Dim Adresse As String
Dim Objet As String
Dim Corps As String
Dim PJ As String
Dim HyperLien As String ' Reçoit les éléments de l'hyperlien
Dim i As Integer ' un compteur
Dim Client As Integer

Adresse = ""
Objet = "Coucou"
Corps = "Test"

' Remarque : l'argument PJ (pièce jointe) est optionnel. S'il est fourni,
' c'est le chemin complet du fichier à joindre qui doit être fourni
' pour joindre plusieurs pièces, il faudrait que PJ soit
' un tableau et qu'il soit traité + bas par une boucle...
' composés avec les arguments fournis
' la syntaxe de base du mailto est la suivante :
' mailto:?Subject=sujet du message&Body=corps du message
' je ne prends pas en compte les copies, copies cachées
' ou autres confirmation de lecture, je suppose
' qu'il faudrait utiliser d'autre arguments de mailto...

' Le ? introduit les arguments
HyperLien = "mailto:" & Adresse & "?"
HyperLien = HyperLien & "Subject=" & Objet
HyperLien = HyperLien & "&Body=" & Corps
' le & sépare les arguments

Application.DisplayAlerts = False
' Activation du lien
ActiveWorkbook.FollowHyperlink HyperLien

Attendre 5 ' Appel d'une procédure qui temporise
' c'est à dire que la procédure courante
' (ici EnvoiEmail) est suspendue pendant 5s
' cela permet d'Attendre que le client
' de messagerie soit lancé et prêt
' avant d'envoyer les touches
' sinon ce serait le programme appelant
' (ici Excel) qui recevrait les touches

Office2003OutLook

' Le traitement de la pièce jointe ne s'exécute
' que si la procédure à reçu qqchose
' dans l'argument PJ (Optional<=>Facultatif)

If PJ <> "" Then
' dans TouchesPJ(0) on a stocké le nombre de touches
' à envoyer au programme pour joindre une pièce
For i = 1 To TouchesPJ(0) ' pour chaque touche à envoyer
SendKeys TouchesPJ(i), True ' Envoi de la touches
Attendre 1 ' temporise (à règler éventuellement)
Next i
SendKeys PJ, True 'A ce stade le programme attend un nom de fichier
' on lui envoie
Attendre 1 ' on temporise
SendKeys "{ENTER}", True ' et on valide ce nom de fichier
Attendre 1
End If
For i = 1 To TouchesEnvoi(0) ' idem pour les touches d'envoi
' du message
SendKeys TouchesEnvoi(i), True
Next i
' Fin de la procédure principale

Application.DisplayAlerts = True
MsgBox ("C'est fini !! Merci beaucoup.")

End Sub

' -----------------------------------------------------------------
Private Sub Attendre(Secondes As Integer)
' Cette procédure temporise pendant le nombre
' de secondes qu'on lui transmet en argument
Dim Début As Long, Fin As Long, Chrono As Long
Début = Timer
Fin = Début + Secondes
Do Until Timer >= Fin
DoEvents
Loop
End Sub

Private Sub Office2003OutLook()
'Initialisation des tableaux de touches pour Office Outlook
' Pour une pièce jointe
TouchesPJ(0) = 2 ' Nombre de touches nécessaires
TouchesPJ(1) = "%i" ' Appel du menu Insertion par la touche Alt-i
TouchesPJ(2) = "f" ' appel du sous-menu fichier par la touche f
' Pour l'envoi du mail
TouchesEnvoi(0) = 2 ' Nombre de touches nécessaires
TouchesEnvoi(1) = "+{TAB}" 'Revenir sur l'en-tête de l'email
TouchesEnvoi(2) = "%v" ' Envoi du message avec Alt-v
End Sub
****************************************
Merci encore pour ton aide,

Franck
======================================================== >> "isabelle" a écrit dans le message de news:


bonjoour Franck,

si tu utilise une méthode comme celle-ci :

Sub envoieMailOutlook()
Application.DisplayAlerts = False
Dim ol As New Outlook.Application
Dim olmail As MailItem

Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.To = Range("a1").Value
.Subject = Range("b1").Value
For Each c In Selection
x = x & vbNewLine & c
Next
.Body = x
.Display '.ou Send
End With
Application.DisplayAlerts = True
End Sub

tu mettre .visible = false

isabelle

Franck P a écrit :

Bonjour à tous,

Je cherche à réaliser une application en VB Excel. Cette dernière
envoie automatiquement un email par le biais d'Outlook mais je voudrais
que toute la partie sous Outlook (réalisation du mail + envoi à l'aide
de SendKeys) soit invisible pour l'utilisateur.
Le problème est que Application.ScreenUpdation = False ne fonctionne
que pour Excel mais pas pour la partie sous Outlook... Comment faire ?

Merci d'avance à tous pour votre aide !

Franck














Avatar
Franck P
Bonjour Laurent,

Merci pour ton aide.
Avec le code que tu m'as envoyé, j'ai cette erreur : "Erreur d'exécution
'-2147220960 (80040220)': La valeur de configuration SendUsing est non
valide".

As-tu une idée ?
Que veux-tu dire par "il faut installer IIs" ? Est-ce lié au problème
ci-dessus ?

Merci encore et bonne journée,

Franck

"Laurent" a écrit dans le message de
news:
Bonjour,
C'est un problèle lié à Office 2003, avec Office 2007, je n'ai plus ce
message, les mails partent de façon invisible... sauf si Outlook est
fermé,
il ouvre Outlook et le referme.
J'ai une autre solution, il faut installé IIs sur le poste et utilisé CDO
:
Un morceau de mon code ...
...
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
iConf.Fields.Update
With iMsg
'Création du message et ajout dans la queue
On Error GoTo Suivant
Set .Configuration = iConf
.To = Sheets("EnvoiMail").Cells(NoLigne, 2)
.BCC = ""
.From = Expediteur
.Subject = Objet
.TextBody = Corps
.AddAttachment PJ
.Send
On Error GoTo 0
End With
...

Laurent

"Franck P" a écrit :

Bonjour Isabelle,

Merci beaucoup pour ta réponse.
Malheureusement, elle ne marche pas... A moins que je n'ai pas compris ta
phrase :
"tu mettre .visible = false" => faut-il insérer cela quelque part ?

J'ai recopié ton code mais cela entraîne la présence d'une alerte Outlook
concernant "Un programme tente d'envoyer automatiquement des courriers en
votre nom [...]" ; ce qui ne me satisfait pas.

Aujourd'hui j'utilise le code suivant pour ne pas avoir cette alerte mais
Outlook apparaît à l'écran, chose que je cherche à éviter...
****************************************
' ------------------------------------------------------------------
Option Explicit
' ------------------------------------------------------------------
'Déclaration des tableaux qui recevront les touches à utiliser suivant
' le logiciel de messagerie par défaut du système.
Dim TouchesPJ(5) As String, TouchesEnvoi(5) As String

' ------------------------------------------------------------------
' Procédure principale qui compose les éléments du message
' et effectue la demande d'envoi
' c'est cette procédure qui sera appelée par le programme principal
' (ici Excel)
'
Sub Test()
' DECLARATION DES VARIABLES
Dim Adresse As String
Dim Objet As String
Dim Corps As String
Dim PJ As String
Dim HyperLien As String ' Reçoit les éléments de l'hyperlien
Dim i As Integer ' un compteur
Dim Client As Integer

Adresse = ""
Objet = "Coucou"
Corps = "Test"

' Remarque : l'argument PJ (pièce jointe) est optionnel. S'il est fourni,
' c'est le chemin complet du fichier à joindre qui doit être fourni
' pour joindre plusieurs pièces, il faudrait que PJ soit
' un tableau et qu'il soit traité + bas par une boucle...
' composés avec les arguments fournis
' la syntaxe de base du mailto est la suivante :
' mailto:?Subject=sujet du message&Body=corps du message
' je ne prends pas en compte les copies, copies cachées
' ou autres confirmation de lecture, je suppose
' qu'il faudrait utiliser d'autre arguments de mailto...

' Le ? introduit les arguments
HyperLien = "mailto:" & Adresse & "?"
HyperLien = HyperLien & "Subject=" & Objet
HyperLien = HyperLien & "&Body=" & Corps
' le & sépare les arguments

Application.DisplayAlerts = False
' Activation du lien
ActiveWorkbook.FollowHyperlink HyperLien

Attendre 5 ' Appel d'une procédure qui temporise
' c'est à dire que la procédure courante
' (ici EnvoiEmail) est suspendue pendant 5s
' cela permet d'Attendre que le client
' de messagerie soit lancé et prêt
' avant d'envoyer les touches
' sinon ce serait le programme appelant
' (ici Excel) qui recevrait les touches

Office2003OutLook

' Le traitement de la pièce jointe ne s'exécute
' que si la procédure à reçu qqchose
' dans l'argument PJ (Optional<=>Facultatif)

If PJ <> "" Then
' dans TouchesPJ(0) on a stocké le nombre de touches
' à envoyer au programme pour joindre une pièce
For i = 1 To TouchesPJ(0) ' pour chaque touche à envoyer
SendKeys TouchesPJ(i), True ' Envoi de la touches
Attendre 1 ' temporise (à règler éventuellement)
Next i
SendKeys PJ, True 'A ce stade le programme attend un nom de fichier
' on lui envoie
Attendre 1 ' on temporise
SendKeys "{ENTER}", True ' et on valide ce nom de fichier
Attendre 1
End If
For i = 1 To TouchesEnvoi(0) ' idem pour les touches d'envoi
' du message
SendKeys TouchesEnvoi(i), True
Next i
' Fin de la procédure principale

Application.DisplayAlerts = True
MsgBox ("C'est fini !! Merci beaucoup.")

End Sub

' -----------------------------------------------------------------
Private Sub Attendre(Secondes As Integer)
' Cette procédure temporise pendant le nombre
' de secondes qu'on lui transmet en argument
Dim Début As Long, Fin As Long, Chrono As Long
Début = Timer
Fin = Début + Secondes
Do Until Timer >= Fin
DoEvents
Loop
End Sub

Private Sub Office2003OutLook()
'Initialisation des tableaux de touches pour Office Outlook
' Pour une pièce jointe
TouchesPJ(0) = 2 ' Nombre de touches nécessaires
TouchesPJ(1) = "%i" ' Appel du menu Insertion par la touche Alt-i
TouchesPJ(2) = "f" ' appel du sous-menu fichier par la touche f
' Pour l'envoi du mail
TouchesEnvoi(0) = 2 ' Nombre de touches nécessaires
TouchesEnvoi(1) = "+{TAB}" 'Revenir sur l'en-tête de l'email
TouchesEnvoi(2) = "%v" ' Envoi du message avec Alt-v
End Sub
****************************************
Merci encore pour ton aide,

Franck
======================================================== >> "isabelle" a écrit dans le message de news:

> bonjoour Franck,
>
> si tu utilise une méthode comme celle-ci :
>
> Sub envoieMailOutlook()
> Application.DisplayAlerts = False
> Dim ol As New Outlook.Application
> Dim olmail As MailItem
>
> Set ol = New Outlook.Application
> Set olmail = ol.CreateItem(olMailItem)
> With olmail
> .To = Range("a1").Value
> .Subject = Range("b1").Value
> For Each c In Selection
> x = x & vbNewLine & c
> Next
> .Body = x
> .Display '.ou Send
> End With
> Application.DisplayAlerts = True
> End Sub
>
> tu mettre .visible = false
>
> isabelle
>
> Franck P a écrit :
>> Bonjour à tous,
>>
>> Je cherche à réaliser une application en VB Excel. Cette dernière
>> envoie
>> automatiquement un email par le biais d'Outlook mais je voudrais que
>> toute la partie sous Outlook (réalisation du mail + envoi à l'aide de
>> SendKeys) soit invisible pour l'utilisateur.
>> Le problème est que Application.ScreenUpdation = False ne fonctionne
>> que
>> pour Excel mais pas pour la partie sous Outlook... Comment faire ?
>>
>> Merci d'avance à tous pour votre aide !
>>
>> Franck
>>
>>







Avatar
isabelle
peut tu réessayer sans le .visible = false
normallement si on met .send au lieu de .display il ne devrait pas y
avoir probleme,

isabelle

Franck P a écrit :
Rebonjour Isabelle,

Merci beaucoup pour ton nouveau message.
J'ai malheureusement une nouvelle erreur au niveau du ".Visible = False" :
"Erreur d'exécution '438' : Propriété ou méthode non gérée par cet objet"...

As-tu une idée ?

Merci encore et bon appétit,

Franck

"isabelle" a écrit dans le message de news:


bonjoour Franck,

oui, et il faudrais que tu configure outlook pour accepter les envois à
partir d'excel

Sub envoieMailOutlook()
Application.DisplayAlerts = False
Dim ol As New Outlook.Application
Dim olmail As MailItem

Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.Visible = False
.To = Range("a1").Value
.Subject = Range("b1").Value
For Each c In Selection
x = x & vbNewLine & c
Next
.Body = x
. Send End With
Application.DisplayAlerts = True
End Sub

isabelle

Franck P a écrit :

Bonjour Isabelle,

Merci beaucoup pour ta réponse.
Malheureusement, elle ne marche pas... A moins que je n'ai pas compris ta
phrase :
"tu mettre .visible = false" => faut-il insérer cela quelque part ?

J'ai recopié ton code mais cela entraîne la présence d'une alerte Outlook
concernant "Un programme tente d'envoyer automatiquement des courriers en
votre nom [...]" ; ce qui ne me satisfait pas.

Aujourd'hui j'utilise le code suivant pour ne pas avoir cette alerte mais
Outlook apparaît à l'écran, chose que je cherche à éviter...
****************************************
' ------------------------------------------------------------------
Option Explicit
' ------------------------------------------------------------------
'Déclaration des tableaux qui recevront les touches à utiliser suivant
' le logiciel de messagerie par défaut du système.
Dim TouchesPJ(5) As String, TouchesEnvoi(5) As String

' ------------------------------------------------------------------
' Procédure principale qui compose les éléments du message
' et effectue la demande d'envoi
' c'est cette procédure qui sera appelée par le programme principal
' (ici Excel)
'
Sub Test()
' DECLARATION DES VARIABLES
Dim Adresse As String
Dim Objet As String
Dim Corps As String
Dim PJ As String
Dim HyperLien As String ' Reçoit les éléments de l'hyperlien
Dim i As Integer ' un compteur
Dim Client As Integer

Adresse = ""
Objet = "Coucou"
Corps = "Test"

' Remarque : l'argument PJ (pièce jointe) est optionnel. S'il est fourni,
' c'est le chemin complet du fichier à joindre qui doit être fourni
' pour joindre plusieurs pièces, il faudrait que PJ soit
' un tableau et qu'il soit traité + bas par une boucle...
' composés avec les arguments fournis
' la syntaxe de base du mailto est la suivante :
' mailto:?Subject=sujet du message&Body=corps du message
' je ne prends pas en compte les copies, copies cachées
' ou autres confirmation de lecture, je suppose
' qu'il faudrait utiliser d'autre arguments de mailto...

' Le ? introduit les arguments
HyperLien = "mailto:" & Adresse & "?"
HyperLien = HyperLien & "Subject=" & Objet
HyperLien = HyperLien & "&Body=" & Corps
' le & sépare les arguments

Application.DisplayAlerts = False
' Activation du lien
ActiveWorkbook.FollowHyperlink HyperLien

Attendre 5 ' Appel d'une procédure qui temporise
' c'est à dire que la procédure courante
' (ici EnvoiEmail) est suspendue pendant 5s
' cela permet d'Attendre que le client
' de messagerie soit lancé et prêt
' avant d'envoyer les touches
' sinon ce serait le programme appelant
' (ici Excel) qui recevrait les touches

Office2003OutLook

' Le traitement de la pièce jointe ne s'exécute
' que si la procédure à reçu qqchose
' dans l'argument PJ (Optional<=>Facultatif)

If PJ <> "" Then
' dans TouchesPJ(0) on a stocké le nombre de touches
' à envoyer au programme pour joindre une pièce
For i = 1 To TouchesPJ(0) ' pour chaque touche à envoyer
SendKeys TouchesPJ(i), True ' Envoi de la touches
Attendre 1 ' temporise (à règler éventuellement)
Next i
SendKeys PJ, True 'A ce stade le programme attend un nom de fichier
' on lui envoie
Attendre 1 ' on temporise
SendKeys "{ENTER}", True ' et on valide ce nom de fichier
Attendre 1
End If
For i = 1 To TouchesEnvoi(0) ' idem pour les touches d'envoi
' du message
SendKeys TouchesEnvoi(i), True
Next i
' Fin de la procédure principale

Application.DisplayAlerts = True
MsgBox ("C'est fini !! Merci beaucoup.")

End Sub

' -----------------------------------------------------------------
Private Sub Attendre(Secondes As Integer)
' Cette procédure temporise pendant le nombre
' de secondes qu'on lui transmet en argument
Dim Début As Long, Fin As Long, Chrono As Long
Début = Timer
Fin = Début + Secondes
Do Until Timer >= Fin
DoEvents
Loop
End Sub

Private Sub Office2003OutLook()
'Initialisation des tableaux de touches pour Office Outlook
' Pour une pièce jointe
TouchesPJ(0) = 2 ' Nombre de touches nécessaires
TouchesPJ(1) = "%i" ' Appel du menu Insertion par la touche Alt-i
TouchesPJ(2) = "f" ' appel du sous-menu fichier par la touche f
' Pour l'envoi du mail
TouchesEnvoi(0) = 2 ' Nombre de touches nécessaires
TouchesEnvoi(1) = "+{TAB}" 'Revenir sur l'en-tête de l'email
TouchesEnvoi(2) = "%v" ' Envoi du message avec Alt-v
End Sub
****************************************
Merci encore pour ton aide,

Franck
======================================================== >>> "isabelle" a écrit dans le message de news:



bonjoour Franck,

si tu utilise une méthode comme celle-ci :

Sub envoieMailOutlook()
Application.DisplayAlerts = False
Dim ol As New Outlook.Application
Dim olmail As MailItem

Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.To = Range("a1").Value
.Subject = Range("b1").Value
For Each c In Selection
x = x & vbNewLine & c
Next
.Body = x
.Display '.ou Send
End With
Application.DisplayAlerts = True
End Sub

tu mettre .visible = false

isabelle

Franck P a écrit :


Bonjour à tous,

Je cherche à réaliser une application en VB Excel. Cette dernière
envoie automatiquement un email par le biais d'Outlook mais je voudrais
que toute la partie sous Outlook (réalisation du mail + envoi à l'aide
de SendKeys) soit invisible pour l'utilisateur.
Le problème est que Application.ScreenUpdation = False ne fonctionne
que pour Excel mais pas pour la partie sous Outlook... Comment faire ?

Merci d'avance à tous pour votre aide !

Franck



















Avatar
Franck P
Il était déjà en ".send"... J'ai donc retiré la ligne ".visible = False"
Et le problème est que maintenant, j'ai une alerte qui apparaît : "Un
programme tente d'envoyer automatiquement des courriers en votre nom.
L'autorisez-vous à poursuivre ?"
:'(
Comment éliminer cette alerte ?

Encore merci,

Franck

"isabelle" a écrit dans le message de news:

peut tu réessayer sans le .visible = false
normallement si on met .send au lieu de .display il ne devrait pas y avoir
probleme,

isabelle

Franck P a écrit :
Rebonjour Isabelle,

Merci beaucoup pour ton nouveau message.
J'ai malheureusement une nouvelle erreur au niveau du ".Visible = False"
: "Erreur d'exécution '438' : Propriété ou méthode non gérée par cet
objet"...

As-tu une idée ?

Merci encore et bon appétit,

Franck

"isabelle" a écrit dans le message de news:


bonjoour Franck,

oui, et il faudrais que tu configure outlook pour accepter les envois à
partir d'excel

Sub envoieMailOutlook()
Application.DisplayAlerts = False
Dim ol As New Outlook.Application
Dim olmail As MailItem

Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.Visible = False
.To = Range("a1").Value
.Subject = Range("b1").Value
For Each c In Selection
x = x & vbNewLine & c
Next
.Body = x
. Send End With
Application.DisplayAlerts = True
End Sub

isabelle

Franck P a écrit :

Bonjour Isabelle,

Merci beaucoup pour ta réponse.
Malheureusement, elle ne marche pas... A moins que je n'ai pas compris
ta phrase :
"tu mettre .visible = false" => faut-il insérer cela quelque part ?

J'ai recopié ton code mais cela entraîne la présence d'une alerte
Outlook concernant "Un programme tente d'envoyer automatiquement des
courriers en votre nom [...]" ; ce qui ne me satisfait pas.

Aujourd'hui j'utilise le code suivant pour ne pas avoir cette alerte
mais Outlook apparaît à l'écran, chose que je cherche à éviter...
****************************************
' ------------------------------------------------------------------
Option Explicit
' ------------------------------------------------------------------
'Déclaration des tableaux qui recevront les touches à utiliser suivant
' le logiciel de messagerie par défaut du système.
Dim TouchesPJ(5) As String, TouchesEnvoi(5) As String

' ------------------------------------------------------------------
' Procédure principale qui compose les éléments du message
' et effectue la demande d'envoi
' c'est cette procédure qui sera appelée par le programme principal
' (ici Excel)
'
Sub Test()
' DECLARATION DES VARIABLES
Dim Adresse As String
Dim Objet As String
Dim Corps As String
Dim PJ As String
Dim HyperLien As String ' Reçoit les éléments de l'hyperlien
Dim i As Integer ' un compteur
Dim Client As Integer

Adresse = ""
Objet = "Coucou"
Corps = "Test"

' Remarque : l'argument PJ (pièce jointe) est optionnel. S'il est
fourni,
' c'est le chemin complet du fichier à joindre qui doit être fourni
' pour joindre plusieurs pièces, il faudrait que PJ soit
' un tableau et qu'il soit traité + bas par une boucle...
' composés avec les arguments fournis
' la syntaxe de base du mailto est la suivante :
' mailto:?Subject=sujet du message&Body=corps du message
' je ne prends pas en compte les copies, copies cachées
' ou autres confirmation de lecture, je suppose
' qu'il faudrait utiliser d'autre arguments de mailto...

' Le ? introduit les arguments
HyperLien = "mailto:" & Adresse & "?"
HyperLien = HyperLien & "Subject=" & Objet
HyperLien = HyperLien & "&Body=" & Corps
' le & sépare les arguments

Application.DisplayAlerts = False
' Activation du lien
ActiveWorkbook.FollowHyperlink HyperLien

Attendre 5 ' Appel d'une procédure qui temporise
' c'est à dire que la procédure courante
' (ici EnvoiEmail) est suspendue pendant 5s
' cela permet d'Attendre que le client
' de messagerie soit lancé et prêt
' avant d'envoyer les touches
' sinon ce serait le programme appelant
' (ici Excel) qui recevrait les touches

Office2003OutLook

' Le traitement de la pièce jointe ne s'exécute
' que si la procédure à reçu qqchose
' dans l'argument PJ (Optional<=>Facultatif)

If PJ <> "" Then
' dans TouchesPJ(0) on a stocké le nombre de touches
' à envoyer au programme pour joindre une pièce
For i = 1 To TouchesPJ(0) ' pour chaque touche à envoyer
SendKeys TouchesPJ(i), True ' Envoi de la touches
Attendre 1 ' temporise (à règler éventuellement)
Next i
SendKeys PJ, True 'A ce stade le programme attend un nom de fichier
' on lui envoie
Attendre 1 ' on temporise
SendKeys "{ENTER}", True ' et on valide ce nom de fichier
Attendre 1
End If
For i = 1 To TouchesEnvoi(0) ' idem pour les touches d'envoi
' du message
SendKeys TouchesEnvoi(i), True
Next i
' Fin de la procédure principale

Application.DisplayAlerts = True
MsgBox ("C'est fini !! Merci beaucoup.")

End Sub

' -----------------------------------------------------------------
Private Sub Attendre(Secondes As Integer)
' Cette procédure temporise pendant le nombre
' de secondes qu'on lui transmet en argument
Dim Début As Long, Fin As Long, Chrono As Long
Début = Timer
Fin = Début + Secondes
Do Until Timer >= Fin
DoEvents
Loop
End Sub

Private Sub Office2003OutLook()
'Initialisation des tableaux de touches pour Office Outlook
' Pour une pièce jointe
TouchesPJ(0) = 2 ' Nombre de touches nécessaires
TouchesPJ(1) = "%i" ' Appel du menu Insertion par la touche Alt-i
TouchesPJ(2) = "f" ' appel du sous-menu fichier par la touche f
' Pour l'envoi du mail
TouchesEnvoi(0) = 2 ' Nombre de touches nécessaires
TouchesEnvoi(1) = "+{TAB}" 'Revenir sur l'en-tête de l'email
TouchesEnvoi(2) = "%v" ' Envoi du message avec Alt-v
End Sub
****************************************
Merci encore pour ton aide,

Franck
======================================================== >>>> "isabelle" a écrit dans le message de news:



bonjoour Franck,

si tu utilise une méthode comme celle-ci :

Sub envoieMailOutlook()
Application.DisplayAlerts = False
Dim ol As New Outlook.Application
Dim olmail As MailItem

Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.To = Range("a1").Value
.Subject = Range("b1").Value
For Each c In Selection
x = x & vbNewLine & c
Next
.Body = x
.Display '.ou Send
End With
Application.DisplayAlerts = True
End Sub

tu mettre .visible = false

isabelle

Franck P a écrit :


Bonjour à tous,

Je cherche à réaliser une application en VB Excel. Cette dernière
envoie automatiquement un email par le biais d'Outlook mais je
voudrais que toute la partie sous Outlook (réalisation du mail +
envoi à l'aide de SendKeys) soit invisible pour l'utilisateur.
Le problème est que Application.ScreenUpdation = False ne fonctionne
que pour Excel mais pas pour la partie sous Outlook... Comment faire
?

Merci d'avance à tous pour votre aide !

Franck





















Avatar
isabelle
il faut parametrer la securité d'Outlook pour qu'il accepte excel,

isabelle


Franck P a écrit :
Il était déjà en ".send"... J'ai donc retiré la ligne ".visible = False"
Et le problème est que maintenant, j'ai une alerte qui apparaît : "Un
programme tente d'envoyer automatiquement des courriers en votre nom.
L'autorisez-vous à poursuivre ?"
:'(
Comment éliminer cette alerte ?

Encore merci,

Franck

"isabelle" a écrit dans le message de news:


peut tu réessayer sans le .visible = false
normallement si on met .send au lieu de .display il ne devrait pas y avoir
probleme,

isabelle

Franck P a écrit :

Rebonjour Isabelle,

Merci beaucoup pour ton nouveau message.
J'ai malheureusement une nouvelle erreur au niveau du ".Visible = False"
: "Erreur d'exécution '438' : Propriété ou méthode non gérée par cet
objet"...

As-tu une idée ?

Merci encore et bon appétit,

Franck

"isabelle" a écrit dans le message de news:



bonjoour Franck,

oui, et il faudrais que tu configure outlook pour accepter les envois à
partir d'excel

Sub envoieMailOutlook()
Application.DisplayAlerts = False
Dim ol As New Outlook.Application
Dim olmail As MailItem

Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.Visible = False
.To = Range("a1").Value
.Subject = Range("b1").Value
For Each c In Selection
x = x & vbNewLine & c
Next
.Body = x
. Send End With
Application.DisplayAlerts = True
End Sub

isabelle

Franck P a écrit :


Bonjour Isabelle,

Merci beaucoup pour ta réponse.
Malheureusement, elle ne marche pas... A moins que je n'ai pas compris
ta phrase :
"tu mettre .visible = false" => faut-il insérer cela quelque part ?

J'ai recopié ton code mais cela entraîne la présence d'une alerte
Outlook concernant "Un programme tente d'envoyer automatiquement des
courriers en votre nom [...]" ; ce qui ne me satisfait pas.

Aujourd'hui j'utilise le code suivant pour ne pas avoir cette alerte
mais Outlook apparaît à l'écran, chose que je cherche à éviter...
****************************************
' ------------------------------------------------------------------
Option Explicit
' ------------------------------------------------------------------
'Déclaration des tableaux qui recevront les touches à utiliser suivant
' le logiciel de messagerie par défaut du système.
Dim TouchesPJ(5) As String, TouchesEnvoi(5) As String

' ------------------------------------------------------------------
' Procédure principale qui compose les éléments du message
' et effectue la demande d'envoi
' c'est cette procédure qui sera appelée par le programme principal
' (ici Excel)
'
Sub Test()
' DECLARATION DES VARIABLES
Dim Adresse As String
Dim Objet As String
Dim Corps As String
Dim PJ As String
Dim HyperLien As String ' Reçoit les éléments de l'hyperlien
Dim i As Integer ' un compteur
Dim Client As Integer

Adresse = ""
Objet = "Coucou"
Corps = "Test"

' Remarque : l'argument PJ (pièce jointe) est optionnel. S'il est
fourni,
' c'est le chemin complet du fichier à joindre qui doit être fourni
' pour joindre plusieurs pièces, il faudrait que PJ soit
' un tableau et qu'il soit traité + bas par une boucle...
' composés avec les arguments fournis
' la syntaxe de base du mailto est la suivante :
' mailto:?Subject=sujet du message&Body=corps du message
' je ne prends pas en compte les copies, copies cachées
' ou autres confirmation de lecture, je suppose
' qu'il faudrait utiliser d'autre arguments de mailto...

' Le ? introduit les arguments
HyperLien = "mailto:" & Adresse & "?"
HyperLien = HyperLien & "Subject=" & Objet
HyperLien = HyperLien & "&Body=" & Corps
' le & sépare les arguments

Application.DisplayAlerts = False
' Activation du lien
ActiveWorkbook.FollowHyperlink HyperLien

Attendre 5 ' Appel d'une procédure qui temporise
' c'est à dire que la procédure courante
' (ici EnvoiEmail) est suspendue pendant 5s
' cela permet d'Attendre que le client
' de messagerie soit lancé et prêt
' avant d'envoyer les touches
' sinon ce serait le programme appelant
' (ici Excel) qui recevrait les touches

Office2003OutLook

' Le traitement de la pièce jointe ne s'exécute
' que si la procédure à reçu qqchose
' dans l'argument PJ (Optional<=>Facultatif)

If PJ <> "" Then
' dans TouchesPJ(0) on a stocké le nombre de touches
' à envoyer au programme pour joindre une pièce
For i = 1 To TouchesPJ(0) ' pour chaque touche à envoyer
SendKeys TouchesPJ(i), True ' Envoi de la touches
Attendre 1 ' temporise (à règler éventuellement)
Next i
SendKeys PJ, True 'A ce stade le programme attend un nom de fichier
' on lui envoie
Attendre 1 ' on temporise
SendKeys "{ENTER}", True ' et on valide ce nom de fichier
Attendre 1
End If
For i = 1 To TouchesEnvoi(0) ' idem pour les touches d'envoi
' du message
SendKeys TouchesEnvoi(i), True
Next i
' Fin de la procédure principale

Application.DisplayAlerts = True
MsgBox ("C'est fini !! Merci beaucoup.")

End Sub

' -----------------------------------------------------------------
Private Sub Attendre(Secondes As Integer)
' Cette procédure temporise pendant le nombre
' de secondes qu'on lui transmet en argument
Dim Début As Long, Fin As Long, Chrono As Long
Début = Timer
Fin = Début + Secondes
Do Until Timer >= Fin
DoEvents
Loop
End Sub

Private Sub Office2003OutLook()
'Initialisation des tableaux de touches pour Office Outlook
' Pour une pièce jointe
TouchesPJ(0) = 2 ' Nombre de touches nécessaires
TouchesPJ(1) = "%i" ' Appel du menu Insertion par la touche Alt-i
TouchesPJ(2) = "f" ' appel du sous-menu fichier par la touche f
' Pour l'envoi du mail
TouchesEnvoi(0) = 2 ' Nombre de touches nécessaires
TouchesEnvoi(1) = "+{TAB}" 'Revenir sur l'en-tête de l'email
TouchesEnvoi(2) = "%v" ' Envoi du message avec Alt-v
End Sub
****************************************
Merci encore pour ton aide,

Franck
======================================================== >>>>> "isabelle" a écrit dans le message de news:




bonjoour Franck,

si tu utilise une méthode comme celle-ci :

Sub envoieMailOutlook()
Application.DisplayAlerts = False
Dim ol As New Outlook.Application
Dim olmail As MailItem

Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.To = Range("a1").Value
.Subject = Range("b1").Value
For Each c In Selection
x = x & vbNewLine & c
Next
.Body = x
.Display '.ou Send
End With
Application.DisplayAlerts = True
End Sub

tu mettre .visible = false

isabelle

Franck P a écrit :



Bonjour à tous,

Je cherche à réaliser une application en VB Excel. Cette dernière
envoie automatiquement un email par le biais d'Outlook mais je
voudrais que toute la partie sous Outlook (réalisation du mail +
envoi à l'aide de SendKeys) soit invisible pour l'utilisateur.
Le problème est que Application.ScreenUpdation = False ne fonctionne
que pour Excel mais pas pour la partie sous Outlook... Comment faire
?

Merci d'avance à tous pour votre aide !

Franck

























Avatar
Laurent
IIS : Internet Information Server

En gros, il s'agit d'un serveur Web. IIS est installé sur mon poste (lié à
d'autres applis de developpement), je ne saurais dire comment l'installé.

Je pense que l'erreur vient de la, mais je ne peux pas plus vous aider.

Laurent

"Franck P" a écrit :

Bonjour Laurent,

Merci pour ton aide.
Avec le code que tu m'as envoyé, j'ai cette erreur : "Erreur d'exécution
'-2147220960 (80040220)': La valeur de configuration SendUsing est non
valide".

As-tu une idée ?
Que veux-tu dire par "il faut installer IIs" ? Est-ce lié au problème
ci-dessus ?

Merci encore et bonne journée,

Franck

"Laurent" a écrit dans le message de
news:
> Bonjour,
> C'est un problèle lié à Office 2003, avec Office 2007, je n'ai plus ce
> message, les mails partent de façon invisible... sauf si Outlook est
> fermé,
> il ouvre Outlook et le referme.
> J'ai une autre solution, il faut installé IIs sur le poste et utilisé CDO
> :
> Un morceau de mon code ...
> ...
> Set iMsg = CreateObject("CDO.Message")
> Set iConf = CreateObject("CDO.Configuration")
> iConf.Fields.Update
> With iMsg
> 'Création du message et ajout dans la queue
> On Error GoTo Suivant
> Set .Configuration = iConf
> .To = Sheets("EnvoiMail").Cells(NoLigne, 2)
> .BCC = ""
> .From = Expediteur
> .Subject = Objet
> .TextBody = Corps
> .AddAttachment PJ
> .Send
> On Error GoTo 0
> End With
> ...
>
> Laurent
>
> "Franck P" a écrit :
>
>> Bonjour Isabelle,
>>
>> Merci beaucoup pour ta réponse.
>> Malheureusement, elle ne marche pas... A moins que je n'ai pas compris ta
>> phrase :
>> "tu mettre .visible = false" => faut-il insérer cela quelque part ?
>>
>> J'ai recopié ton code mais cela entraîne la présence d'une alerte Outlook
>> concernant "Un programme tente d'envoyer automatiquement des courriers en
>> votre nom [...]" ; ce qui ne me satisfait pas.
>>
>> Aujourd'hui j'utilise le code suivant pour ne pas avoir cette alerte mais
>> Outlook apparaît à l'écran, chose que je cherche à éviter...
>> ****************************************
>> ' ------------------------------------------------------------------
>> Option Explicit
>> ' ------------------------------------------------------------------
>> 'Déclaration des tableaux qui recevront les touches à utiliser suivant
>> ' le logiciel de messagerie par défaut du système.
>> Dim TouchesPJ(5) As String, TouchesEnvoi(5) As String
>>
>> ' ------------------------------------------------------------------
>> ' Procédure principale qui compose les éléments du message
>> ' et effectue la demande d'envoi
>> ' c'est cette procédure qui sera appelée par le programme principal
>> ' (ici Excel)
>> '
>> Sub Test()
>> ' DECLARATION DES VARIABLES
>> Dim Adresse As String
>> Dim Objet As String
>> Dim Corps As String
>> Dim PJ As String
>> Dim HyperLien As String ' Reçoit les éléments de l'hyperlien
>> Dim i As Integer ' un compteur
>> Dim Client As Integer
>>
>> Adresse = ""
>> Objet = "Coucou"
>> Corps = "Test"
>>
>> ' Remarque : l'argument PJ (pièce jointe) est optionnel. S'il est fourni,
>> ' c'est le chemin complet du fichier à joindre qui doit être fourni
>> ' pour joindre plusieurs pièces, il faudrait que PJ soit
>> ' un tableau et qu'il soit traité + bas par une boucle...
>> ' composés avec les arguments fournis
>> ' la syntaxe de base du mailto est la suivante :
>> ' mailto:?Subject=sujet du message&Body=corps du message
>> ' je ne prends pas en compte les copies, copies cachées
>> ' ou autres confirmation de lecture, je suppose
>> ' qu'il faudrait utiliser d'autre arguments de mailto...
>>
>> ' Le ? introduit les arguments
>> HyperLien = "mailto:" & Adresse & "?"
>> HyperLien = HyperLien & "Subject=" & Objet
>> HyperLien = HyperLien & "&Body=" & Corps
>> ' le & sépare les arguments
>>
>> Application.DisplayAlerts = False
>> ' Activation du lien
>> ActiveWorkbook.FollowHyperlink HyperLien
>>
>> Attendre 5 ' Appel d'une procédure qui temporise
>> ' c'est à dire que la procédure courante
>> ' (ici EnvoiEmail) est suspendue pendant 5s
>> ' cela permet d'Attendre que le client
>> ' de messagerie soit lancé et prêt
>> ' avant d'envoyer les touches
>> ' sinon ce serait le programme appelant
>> ' (ici Excel) qui recevrait les touches
>>
>> Office2003OutLook
>>
>> ' Le traitement de la pièce jointe ne s'exécute
>> ' que si la procédure à reçu qqchose
>> ' dans l'argument PJ (Optional<=>Facultatif)
>>
>> If PJ <> "" Then
>> ' dans TouchesPJ(0) on a stocké le nombre de touches
>> ' à envoyer au programme pour joindre une pièce
>> For i = 1 To TouchesPJ(0) ' pour chaque touche à envoyer
>> SendKeys TouchesPJ(i), True ' Envoi de la touches
>> Attendre 1 ' temporise (à règler éventuellement)
>> Next i
>> SendKeys PJ, True 'A ce stade le programme attend un nom de fichier
>> ' on lui envoie
>> Attendre 1 ' on temporise
>> SendKeys "{ENTER}", True ' et on valide ce nom de fichier
>> Attendre 1
>> End If
>> For i = 1 To TouchesEnvoi(0) ' idem pour les touches d'envoi
>> ' du message
>> SendKeys TouchesEnvoi(i), True
>> Next i
>> ' Fin de la procédure principale
>>
>> Application.DisplayAlerts = True
>> MsgBox ("C'est fini !! Merci beaucoup.")
>>
>> End Sub
>>
>> ' -----------------------------------------------------------------
>> Private Sub Attendre(Secondes As Integer)
>> ' Cette procédure temporise pendant le nombre
>> ' de secondes qu'on lui transmet en argument
>> Dim Début As Long, Fin As Long, Chrono As Long
>> Début = Timer
>> Fin = Début + Secondes
>> Do Until Timer >= Fin
>> DoEvents
>> Loop
>> End Sub
>>
>> Private Sub Office2003OutLook()
>> 'Initialisation des tableaux de touches pour Office Outlook
>> ' Pour une pièce jointe
>> TouchesPJ(0) = 2 ' Nombre de touches nécessaires
>> TouchesPJ(1) = "%i" ' Appel du menu Insertion par la touche Alt-i
>> TouchesPJ(2) = "f" ' appel du sous-menu fichier par la touche f
>> ' Pour l'envoi du mail
>> TouchesEnvoi(0) = 2 ' Nombre de touches nécessaires
>> TouchesEnvoi(1) = "+{TAB}" 'Revenir sur l'en-tête de l'email
>> TouchesEnvoi(2) = "%v" ' Envoi du message avec Alt-v
>> End Sub
>> ****************************************
>> Merci encore pour ton aide,
>>
>> Franck
>> ======================================================== > >> "isabelle" a écrit dans le message de news:
>>
>> > bonjoour Franck,
>> >
>> > si tu utilise une méthode comme celle-ci :
>> >
>> > Sub envoieMailOutlook()
>> > Application.DisplayAlerts = False
>> > Dim ol As New Outlook.Application
>> > Dim olmail As MailItem
>> >
>> > Set ol = New Outlook.Application
>> > Set olmail = ol.CreateItem(olMailItem)
>> > With olmail
>> > .To = Range("a1").Value
>> > .Subject = Range("b1").Value
>> > For Each c In Selection
>> > x = x & vbNewLine & c
>> > Next
>> > .Body = x
>> > .Display '.ou Send
>> > End With
>> > Application.DisplayAlerts = True
>> > End Sub
>> >
>> > tu mettre .visible = false
>> >
>> > isabelle
>> >
>> > Franck P a écrit :
>> >> Bonjour à tous,
>> >>
>> >> Je cherche à réaliser une application en VB Excel. Cette dernière
>> >> envoie
>> >> automatiquement un email par le biais d'Outlook mais je voudrais que
>> >> toute la partie sous Outlook (réalisation du mail + envoi à l'aide de
>> >> SendKeys) soit invisible pour l'utilisateur.
>> >> Le problème est que Application.ScreenUpdation = False ne fonctionne
>> >> que
>> >> pour Excel mais pas pour la partie sous Outlook... Comment faire ?
>> >>
>> >> Merci d'avance à tous pour votre aide !
>> >>
>> >> Franck
>> >>
>> >>
>>
>>
>>





1 2