VBA Tableur via Mail

Bonjour,

Je suis débutante concernant l'utilisation VBA. Je dois répondre à des besoins managériaux avec uniquement Excel comme logiciel à disposition. Etant en alternance, je me dois donc de trouver rapidement une solution seule. Si vous pouvez m'aider ça serait très gentil.

J'ai actuellement un besoin de relancer des clients si le délai n'est pas respecter mais pour cela je dois contrôler un tableur. Je voudrais que ce tableur envoi automatiquement des mails (sans avoir à l'ouvrir si possible) à ma collègue pour que tous les produits ayant dans la colonne AH l'inscription "NOK instruire en urgence" aient les informations des colonnes H, I et J collées dans un tableau dans le corps du mail. J'ai déjà trouvé comment envoyer un mail mais je n'arrive pas à ajouter ma condition.

Pour résumer la condition : Si AH="NOK instruire en urgence" alors copier colonnes H,I et J des lignes correspondantes.

Le codage actuel ne correspond pas à mes attentes.

Sub MAIL()
' MAIL Macro
' Mail pour CBR si délai atteint
'
' Touche de raccourci du clavier: Ctrl+m
'
    Application.Goto Reference:="MAIL"

     Set OutApp = CreateObject("Outlook.Application")
     Set OutMail = OutApp.CreateItem(0)

     strbody = "<font size=""3"" face=""Calibri"">" & _
     "Bonjour,<br><br>" & _
     "Les produits selon le référentiel EC337 ci-dessous : <br><br><B> " & Cells(ActiveCell.Row, 10).Value & "<br><br></B>doivent être instruit prochainement." & _
     "<br><br>Cordialement," & _
     "<br><br>L'équipe Ecolabel - LDM"

        With OutMail
         .To = "adresse@email.com"
         .CC = ""
         .BCC = ""
         .Subject = "Dossiers EC337 - instruction à planifier en urgence"
         .HTMLBody = strbody
         .Send

    End With

End Sub

Merci d'avance pour votre aide.

Bonjour ldm616,

A essayer :

Sub test_MailAuto()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim strbody As String
    Dim i As Integer

    For i = 2 To Sheets("[b]NOM DE L'ONGLET[/b]").Range("AH" & Rows.Count).End(xlUp).Row
        If Sheets("[b]NOM DE L'ONGLET[/b]").Range("AH" & i).Value = "NOK instruire en urgence" Then

                Set OutApp = CreateObject("Outlook.Application")
                Set OutMail = OutApp.CreateItem(0)

               strbody = "<font size=""3"" face=""Calibri"">" & _
        "Bonjour,<br><br>" & _
        "Les produits selon le référentiel EC337 ci-dessous : <br><br><B> " & Cells(ActiveCell.Row, 10).Value & "<br><br>    </B>doivent     être     instruit prochainement." & _
"<br><br>Cordialement," & _
"<br><br>L'équipe Ecolabel - LDM"

                On Error Resume Next

                With OutMail
                    .Display
                    .To = "laura.demars@afnor.org"
                    .Subject = "Dossiers EC337 - instruction à planifier en urgence"
                    .HTMLBody = strbody & "<br>" & .HTMLBody
                    .Display [color=#00BF00]'Mettre .Send pour l'envoi automatique[/color]

                End With

        On Error GoTo 0
        End If
    Next i

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

Et mettre dans

ThisWorkbook
Private Sub Workbook_Open()
    Call test_MailAuto
End Sub

Ce code se lancera à l'ouverture du fichier. Si le fichier ne s'ouvre pas rien ne se passera, je ne pense pas qu'il y est une solution pour ça.

Cordialement,

IB

Bonjour,

Tout d'abord merci pour votre réponse rapide, j'ai essayé votre code en corrigeant et indiquant le nom de mon feuillet mais la ligne "For i = 2 To Sheets("Tous Produits").Range("AH" & Rows.Count).End(xlUp).Row" apparaît en erreur (fluo jaune).

Et je ne comprend pas votre 2ème partie de message concernant :

"Et mettre dans

Code : Tout sélectionner

ThisWorkbook

Code : Tout sélectionner

Private Sub Workbook_Open()

Call test_MailAuto

End Sub"

Merci d'avance pour votre retour et votre patience

Re,

Pour le « Private Sub », il faut coller le code dans la partie « ThisWorbook » dans les feuilles du VBA, pour qu’a L’ouverture du fichier le code se lance.

Pour l’erreur, je regarderais cela demain matin sans faute, sauf si quelqu’un a donné une solution d’ici là!

Bonjour,

Après une nuit de sommeil et un peu de réflexion j'ai trouvé la solution à mon problème. Le mail apparaît bien mais j'ai 3 brouillons qui s'ouvrent.

Mais la liste des produits (colonnes H, I, J) ayant dans la colonne AH "NOK instruire en urgence" n'apparaît pas (plusieurs lignes possible, par exemple 4 lignes aujourd'hui, peut être 10 dans une semaine). Comment faire apparaître cette liste de produits variable ?

Le but est de savoir directement dans le mail les dossiers à traiter.

J'espère être claire et en tout cas je vous remercie pour votre patience et votre aide.

Bonjour,

Après une bonne nuit de sommeil, tout va toujours mieux !

Pouvez-vous me donner le fichier, que je puisse voir directement, ce sera plus simple.

Merci,

IB

Bonjour,

Malheureusement il s'agit de données professionnelles confidentielles, je ne peux pas les communiquer même lors de soutenance orale malgré les procédures pour la confidentialité. Mais je vous ai mis un document excel avec les informations confidentielles supprimées. Vous aurez donc les colonnes avec des "références commerciale", "marques commerciales" et "n° de licence" mis au hasard, les autres colonnes vides sont normalement utilisées.

Merci

Voici la correction, a adapter.

Par contre, oui, cela va ouvrir autant de mail qu'il y a de ligne.

Pour que ces mails s'envoient automatiquement, il faut changer le code et remplacer

.Display

par

.Send

S'il faut que ce soit qu'un seul mail pour toutes les lignes "NOK....", cela peut être possible. A voir ce que vous souhaitez!

IB

Merci pour ce retour, ça fonctionne

Alors oui en effet je voudrais que toutes les lignes soient envoyées dans le même mail et sous forme de tableau (si possible le tableau) pour éviter une surcharge (car je vais copier la macro dans 6 autres Excel donc 1 mail par Excel).

De plus si je me trompe pas la macro se lance automatiquement dès ouverture (ce que je voulais) mais j'ai maintenant un petit problème.

Est-il possible de nuancer cet envoi ? C'est-à-dire que je voudrais que cette macro soit réalisée une seule fois par jour automatiquement lors de la première ouverture du document.

Pour résumé : le matin à 8H la première personne qui ouvre envoie une alerte mais la deuxième ou xème ouverture du document dans la journée je génère plus l'envoie. Sinon pour contourner, il faudrait lancer manuellement la macro quand on souhaite alors l'information.

Vraiment merci pour votre aide.

Re,

J'ai essayé de mettre en pratique vos demandes au mieux.

A voir si cela vous convient :

  • J'ai créé un UserForm qui s'ouvre à l'ouverture du fichier afin d'avoir un choix pour l'envoi automatique des mails. Un simple clic sur le oui, le mail se prépare avec les informations, un clic sur le non et rien ne se passe.
  • J'ai aussi créé un onglet "NOK urgent" qui permet de récupérer, au moment du clic sur le oui de l'UserForm, les informations voulues et les mettre sous forme de tableau. Ce qui permet par la suite d'avoir un mail préparé et les informations voulues sous forme de tableau.

A tester voir si cela correspond à vos attentes.

IB

Il semble y avoir plusieurs lignes qui bloquent. Dès que je veux lancer le système j'ai un message concernant un "débogage"...

Lorsque je réponds "non" sur le questionnaire, pas de problème mais lorsque je réponds "oui" il semblerait que la table NOK ait plusieurs lignes qui bloquent

Oups, pardon, erreur de ma part, j'ai oublié d'appeler l'onglet dans un de mes codes, ce qui bloqué...

Voici, la ça devrait fonctionner !

IB

Bonjour,

Je vous remercie vraiment de m'aider. Désolé pour cette absence prolongée sans donner de nouvelles.

Je viens d'essayer votre projet mais j'ai encore plusieurs beugs. Lors de la première ouverture du document j'ai :

  • Application.CutCopyMode = False
  • Set plageF = Sheets("NOK urgent").Range(Cells(1, 1), Cells(ligneF, 3))
Mais bizarrement lors de la seconde ouverture, ça fonctionne . On va dire que c'est le beug informatique donc on va voir si ça fonctionne sans rien toucher.

Mais pour le début du mail avec le tableau contenant la liste des produits concernés apparaissent dans un nouveau feuillet du tableur.

Je pense que vous n'êtes pas très loin, il doit juste y avoir une petite précision qui a du sauter entre deux versions. Si vous n'avez pas le temps de regarder je comprendrais et j'essaierais de finir par moi-même. Si je trouve je posterais la solution pour ceux qui pourraient être susceptibles de regarder cette page.

Merci encore.

Bonjour ldm616,

Pas de problème, pour l'absence ainsi que pour le fichier

Je regarde ça demain matin sans faute.

Bonjour ldm616,

Si j'ai bien compris, le nouvel onglet créé pour avoir les produits NOK urgent devrait disparaître ?

Dans cette version :

En cliquant sur oui à l'ouverture du fichier, l'écran reste figé mais le programme se lance. Il va créer un onglet pour récupérer les informations à mettre dans le mail, créer un mail avec les informations voulues, puis masquer le nouvel onglet. Une fois les actions faites sur ce fichier, à la fermeture, s'il détecte un onglet "NOK urgent", il va de lui même le supprimer.

Cela convient ?

Cordialement,

Bonjour,

Merci c'est génial ça fonctionne

Mais petite question, est-il obligatoire de ne pas avoir de filtre ?

Car j'ai fait un test, si j'ai mon document avec des filtres, la macro ne s'effectue pas correctement. La manipulation serait donc de retirer les filtres, enregistrer, ferme le fichier excel pour relancer correctement la macro à son ouverture.

Bonjour,

J'ai modifié comme suit : Au lancement de la macro, le filtre est retiré puis une fois le programme fini, il est remis.

Cela convient ?

Bonjour,

C'est génial, merci beaucoup

Rechercher des sujets similaires à "vba tableur via mail"