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

2 réponses

1 2
Avatar
Laurent
Dans mon cas, le paramètre doit se faire au niveau du serveur Exchange, voila
pourquoi je suis passé par une autre solution.
Avec Office 2007, plus de problème.

Laurent

"isabelle" a écrit :

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
Franck P
Bonjour Laurent,

Merci quand même.

Bonne journée et à bientôt peut-être,

Franck

"Laurent" a écrit dans le message de
news:
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