VBA : Envoyer un Email via Outlook 2007



Le dernier article nous a permis d’appréhender la relation entre Excel et un navigateur Web, voici comment gérer la relation entre Excel et votre messagerie Outlook…


- 1 – Dans cet exemple l’utilisateur veut à partir de son classeur actif, envoyer par mail un autre classeur Excel qu’il choisira sur son disque dur. Le programme lui demandera l’adresse Email du destinataire puis effectuera l’envoie en arrière plan.
 
- 2 – Pour un bon fonctionnement du programme vous aurez bien sur au préalable chargé la bibliothèque des objets Outlook. (Si vous n’êtes pas sur de la démarche, lisez l’article du 9 Mai 2009)

- 3 –Voici le code, à vous de l’adapter.
Sub envoiEmail()
Dim appOutlook As Outlook.Application
Dim message As Outlook.mailitem
Dim Adresse As String
Dim ouverture$
On Error GoTo sierreur:
'Lance une session OutLook
Set appOutlook = CreateObject("outlook.Application")
'Demande de l'adresse email du destinataire
Adresse = InputBox("Entrez une adresse Email ?", "Envoyer un Email")
'Crée un nouveau message
Set message = appOutlook.createitem(olMailItem)
With message 'paramétrons le message
.Subject = "ENVOYER UN MAIL A PARTIR D'EXCEL"
'Paramétrage du champ Objet :
.Body = "Ceci est le corps du message" & Chr(13) & "Cordialement" & Chr(13) & "Olivier"
'Paramétrage du corps du texte contenu et signature
.BodyFormat = olFormatHTML
'Choix du format du message ici html
.Recipients.Add (Adresse)
'Ajout de l'adresse dans le champ A...
ouverture = Application.GetOpenFilename( _
filefilter:="Fichiers Excel (*.xls),*.xls", _
Title:="Ouvrir", _
MultiSelect:=False)
Workbooks.Open ouverture
'Ouverture du classeur choisi pour être envoyé en pièce jointe
.Attachments.Add ouverture
'Paramétrage du champ Attaché :
.send
'Envoie du message
ActiveWorkbook.Close
'Fermeture du classeur choisi pour être envoyé en pièce jointe
End With
appOutlook.Quit
'fermeture de Outlook
Set appOutlook = Nothing
'J’ai du gérer l'erreur du au clic sur le bouton annuler du inputbox
sierreur:
MsgBox "Vous devez saisir une adresse Email" & Chr(10) _
& "puis cliquer sur OK", vbOKOnly + vbCritical, "ATTENTION"
End Sub




VBA : Publier sur Intranet



Classeur entier ou sélection de cellule, il est assez simple de convertir automatiquement en HTML des données d’Excel pour les publier dans votre navigateur Web préféré…


- 1 – Dans ce premier exemple une simple conversion d'une plage de cellule en html.
Sub PublierSurIntranet()
Dim MaPageWeb As PublishObject
'creation de l'objet qui contiendra la page web
Set MaPageWeb = ActiveWorkbook.PublishObjects.Add( _
SourceType:=xlSourceRange, _
Filename:="c:\publication\testpublication.html", _
Sheet:="Mabase", _
Source:="A1:G15", _
HtmlType:=xlHtmlStatic, _
Title:="Liste des Stagiaires")
'Sourcetype = Ici le type de données est un ensemble de cellules
'Filename = le classeur est converti en html dans le chemin réseau indiqué
'Sheet = nom de l'onglet de la feuille à convertir
'Source = adresse de la plage à convertir
'HtmlType=Indication s'il s'agit d'un objet statique ou d'un composant office Web
'Title = Titre de la page + balise
With MaPageWeb
.Publish (True)
'publication de la page
.AutoRepublish = True
'repercute l'enregistrement du classeur sur la page web
End With
End Sub

- 2 – Dans ce second exemple c'est l'ensemble du classeur qui est converti en html, puis on ouvre directement le fichier html dans Internet Explorer
Sub PublierSurIntranet2()
Dim appIE
Dim MaPageWeb2 As PublishObject
Dim chemin As String
'la conversion s'effectue dans le chemin réseau du classeur
chemin =ThisWorkbook.Path & "/testpublication2.html"
Set MaPageWeb2 =ActiveWorkbook.PublishObjects.Add _
(xlSourceWorkbook, chemin _
, , , xlHtmlStatic, , "Liste des Stagiaires")
With MaPageWeb2
.Publish (True)
End With
'Pour ouvrir ie une bonne vieille commande Shell, « les anciens me comprendrons… »
appIE = Shell("C:\Program Files\Internet Explorer\iexplore.exe " & chemin, vbNormalFocus)
End Sub



Les limites



Connaître les limites physiques de son logiciel peut permettre d’éviter quelques déconvenues, quoique, avec Excel 2007 il semble bien difficile de dépasser ces limites. Je vous laisse juge…



Limites
Nombres de colonnes dans une feuille
16 384
Nombres de lignes dans une feuille
1 048 576
Largeur des colonnes
255 caractères
Hauteur des lignes
409 points
Nombre maximal de caractères par cellule
32 767 caractères
Nombre maximal de caractères dans un en-tête ou un pied de page
255 caractères
Nombre maximal de feuilles par classeur
255
Nombre d’annulation possible
100
Champs dans un formulaire de données
32
Précision numérique
15 chiffres
Longueur du contenu des formules
8 192 caractères
Nombre maximal d'arguments dans une fonction
255
nombre maximal de fonctions imbriquées
64
Nombre des fonctions de calcul disponibles
341
Date de départ pour les calculs
1er janvier 1900





Votre application VBA est terminée : Tableaux au look soigné, formules de calcul géniales, macros réalisant des merveilles…Peut être vaut’ il mieux protéger tous cela ! Excel va vous permettre de protéger séparément, la feuille, le classeur et le projet VB…


- 1 –
Protection du classeur : Pour protéger un classeur, passez la commande : Révision / Protéger le classeur et activez l’option Protéger la structures et les fenêtres. Excel vous demande de choisir les éléments à protéger :

  • Structure : Empêchera l’ajout, la suppression, le déplacement…des feuilles dans le classeur.
  • Fenêtre : Empêchera le redimensionnement, la fermeture, la mise en icône, le fractionnement…des fenêtres.

de rentrer votre mot de passe, et de valider

-> Pour ôter la protection faites Révision / Protéger le classeur et désactivez l’option Protéger la structures et les fenêtres. (il vous faudra évidement saisir votre mot de passe)

- 2 – Protection de la feuille : Pour protéger la feuille de calcul vous devez au préalable avoir ôté la propriété verrouillée à toutes les cellules auxquelles vous souhaitez donner l’accès à l’aide de la commande Accueil / Police / Protection. Ensuite passez la commande Révision / Protéger la feuille.

  • Entrez un mot de passe
  • Définissez les actions que vous autorisez dans les cellules que vous avez déverrouillées
  • Cliquez sur OK.
  • Confirmez votre mot de passe et cliquez sur OK.

Attention !

  • Une erreur fréquente est la contradiction entre vos choix et les actions que doivent accomplir vos macros. Exemple : Si vous demandez à une macro de trier des cellules déverrouillées vous devez évidement avoir autorisé le tri comme action possible.
  • Vos objets de formulaires étant verrouillés par défaut, ils seront automatiquement protégés lors de l’activation de la protection de la feuille

-> Pour ôter la protection faites Révision / Ôter la protection de la feuille (il vous faudra évidement saisir votre mot de passe)


- 3 –
Protection du projet VB : Pour protéger votre projet VB et interdire l’accès aux codes et autres UserForm, accédez à votre éditeur Visual Basic ALT + F11 ou développeur / Visual Basic.
Dans le panneau VBAProject, faites clic droit sur votre projet et choisissez la commande
Propriétés de VBAProject…

  • Cochez l’option Verrouiller le projet pour affichage
  • Entrez et confirmer un mot de passe
  • Cliquez sur Ok
  • Fermez le classeur et rouvrez-le.

-> Pour ôter la protection faites Propriétés de VBAProject…, décochez l’option Verrouiller le projet pour affichage et effacer les mots de passe (il vous faudra évidement saisir votre mot de passe)






L’un des lecteurs (Jean-Noël) de ce modeste blog (qu’il en soit remercié) me demande une précision au sujet de l’article « Supprimer des lignes en fonction d’une valeur contenue dans un champ ». En effet, il souhaiterai  pouvoir effacer les lignes non pas en fonction d’une correspondance exacte de la valeur du champ mais simplement si la valeur se trouve dans l’expression globale de ce champ. J’ai donc modifié quelque peu mon code…

- 1 –  Considérons ici la liste (A1 :E24), je souhaite supprimer toutes les lignes pour lesquels l’éditeur contient le mot Microsoft.


- 2 – Voici à quoi pourrait ressembler le code, à vous de l’adapter ! J’ai également récupérer le nombre de lignes effacées
Sub DelEditeur3()
Dim i As Integer
Dim lig As Integer
Dim Editeur As String
lig = 0
Editeur = InputBox("Veuillez entrer l'editeur à supprimer ?", "Welcome", "Microsoft")
'La valeur saisie est transmise à la variable Editeur
With ThisWorkbook.Sheets("Feuil1")
  For i = .Range("C" & .Rows.Count).End(xlUp).Row To 2 Step -1
If InStr(.Range("C" & i).Value, Editeur) <> 0 Then
'la fonction InStr(chaîne1, chaîne2) permet de vérifier la présence de chaîne2 dans
‘chaîne1'et retourne l'occurrence de la première position de la comparaison donc pas 0
‘si chaîne2 est présente dans chaîne1
Rows(i).Delete
lig = lig + 1
'Comptons les lignes effacées
End If
Next i
  MsgBox "J'ai effacer " & lig & " ligne(s) contenant l'expression : "  _
& Editeur, vbOKOnly + vbInformation, "INFORMATION"
'Affichons le nombre de lignes effacées
End With
End Sub

- 3 – Et voici le résultat après exécution de la procédure DelEditeur3()…




top