Mail auto VB (avec liste excel) ??

Résolu/Fermé
manautop Messages postés 138 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 24 janvier 2013 - Modifié par manautop le 3/07/2012 à 12:22
manautop Messages postés 138 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 24 janvier 2013 - 6 juil. 2012 à 16:22
Bonjour,

Je me permet de me touner vers vous car j'ai un petit problème,

en effet, dans le cadre de mon boulot (je sais pas si venir pour une aide à ce sujet est autorisé) je dois envoyer un rapport unique/pays à chacun de mes correspondants, ce qui signigfie qu'il y à autant de rapports diffeérents que de pays.

j'ai dejà reussi à automatiser l'extraction de ces rapports je coince cependant sur l'automatisation de ces envois


voilà ce que j'ai sous mon excel name => envois mail auto


colonne A : le nom du pays
colonne B : le nom du contact
Colonne C : le pénom du contact
colonne D : Le mail du contact
Colonne E : l'adresse du fichier à joindre

80 lignes


mon code

' appel(d) 'excel
Dim appExcel As Microsoft.Office.Interop.Excel.Application 'Application Excel
Dim wbExcel As Microsoft.Office.Interop.Excel.Workbook 'Classeur Excel
Dim wsExcel As Microsoft.Office.Interop.Excel.Worksheet 'Feuille Excel
Dim ligne
Dim dernière

'Ouverture de l'application
appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
wbExcel = appExcel.Workbooks.Open("\adresse du fichier.xlsx")
'2012 BELUX MkgFund.xlsx")
'wsExcel correspond à la première feuille du fichier
wsExcel = wbExcel.Worksheets(1)
appExcel.Visible = False

wbExcel.Sheets(1).Range("a5").Select()
'Pour chaque colonne de 1 à 6
For i = 1 To 6
' on détermine à partir du bas, le rang de la dernière cellule non vide
ligne = wbExcel.Sheets(1).Cells(65530, i).end(Microsoft.Office.Interop.Excel.XlDirection.xlUp).Row
'si le rang trouvé est supérieur au plus grand précédent, "dernière" prend cette valeur:
If ligne > dernière Then dernière = ligne
Next i
'Et dernière = 34 , ce qui était demandé. La preuve:
wbExcel.Sheets(2).Range("a" & dernière).Offset(1, 0).Select()


For a = 1 To 6
Dim name = wbExcel.Sheets(1).Cells(65530, a).end(Microsoft.Office.Interop.Excel.XlDirection.xlUp).Row

Next a
Dim surname =
Dim mail =
Dim Piejointe =


NewMail = OutlookApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem)
NewMail.Recipients.Add("mail")
NewMail.Subject = "Title""surname"
NewMail.Body = "Hello" & "balablablabal"
NewMail.Attachments.Add("Piejointe")
NewMail.Send()
End Sub
End Class



En fait en écrivant le mm code en remplaçant les variables je n'ai pas de problèmes, mais si je rajoutes des lignes sur mon excel elles ne seront pas pris en compte alors que le but est de modifier facilement mon excel et que l'appli s'en serve pour envoyer les mails


en vous remerciant par avance pour votre aide

john

A voir également:

11 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
3 juil. 2012 à 13:21
Bonjour,
appExcel.Visible = False , en principe pas nécessaire, non visible par défaut.
Ta boucle a tourne mais ne fait aucune action ?
Les variables ne sont pas initialisées ?
Si tu veux mettre des variables dans les données elles ne doivenet pas êtres entourées de guillemets.
Je verrais plutôt ça dans le genre..

    Dim Texte= "Hello" & "balablablabal"
    dim Titre = "Le titre "
    With wbExcel.Sheets(1)
        Dim Ligne = .Cells(65530, i).End(Microsoft.Office.Interop.Excel.XlDirection.xlUp).Row
        For a = Ligne To 1 Step -1
            dim NewMail = OutlookApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem)
            NewMail.Recipients.Add (.Cells(Ligne, "D"))
            NewMail.Subject = Titre & .Cells(Ligne, "C")
            NewMail.Body = Texte
            NewMail.Attachments.Add (.Cells(Ligne, "E"))
            NewMail.Send()
        Next a
        NewMail = Nothing 'je ne sais pas si en .Net c'est encore obligatoire
    End With

Attention, ce n'est qu'une piste, fait à main levée et sans test.
A+
0
manautop Messages postés 138 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 24 janvier 2013 3
3 juil. 2012 à 16:57
Bonjour,

merci de ta réponse (mm si je bloque toujours ^^)

voici mon code qui ne amrche pas mais presque ^^

'app outlook
Dim OutlookApp As New Microsoft.Office.Interop.Outlook.Application
Dim NewMail As Microsoft.Office.Interop.Outlook.MailItem

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click



' appel(d) 'excel
Dim appExcel As Microsoft.Office.Interop.Excel.Application 'Application Excel
Dim wbExcel As Microsoft.Office.Interop.Excel.Workbook 'Classeur Excel
Dim wsExcel As Microsoft.Office.Interop.Excel.Worksheet 'Feuille Excel


'Ouverture de l'application
appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
wbExcel = appExcel.Workbooks.Open("adresse du doc excel")
'2012 BELUX MkgFund.xlsx")
'wsExcel correspond à la première feuille du fichier
wsExcel = wbExcel.Worksheets(1)
appExcel.Visible = False


For i = 1 To 6
Dim ligne = wbExcel.Sheets(1).Cells(65530, i).End(Microsoft.Office.Interop.Excel.XlDirection.xlUp).Row
With wbExcel.Sheets(1)
Dim NewMail = OutlookApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem)
NewMail.Recipients.Add("jonathan.sebban@accor.com") ' pour test
NewMail.Subject = "document demandé"
NewMail.Body = "veuiller trouver ci joint le document...."
NewMail.Attachments.Add(.Cells(ligne, "E"))
NewMail.Send()
End With
Next i

End Sub
End Class


pour info le sujet du mail et le corps du mail est toujours le mm, mais ç abloque sur les variable des colonnes
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
4 juil. 2012 à 17:31
Re,Possible qu'a partir de VB la syntaxe tel quel n'est pas reconnue.
Essayer (pour la colonne E) .Cells(ligne, 5)
Sinon met un point d'arrèet sur cette ligne et regarde ce qu'il y a dans cette cellule.
Note elle doit comporter le chemin complet du fichier à joindre.
A+
0
manautop Messages postés 138 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 24 janvier 2013 3
5 juil. 2012 à 14:53
bonjour

et merci du temps que vous m'accordez

malheureusement ça ne marche toujours pas ça me donne une erreur du type Exception de HRESULT : 0x800A03EC


mon code

Imports System.IO
Imports System
Imports System.Windows
Imports System.Reflection

Class MainWindow

'app outlook
Dim OutlookApp As New Microsoft.Office.Interop.Outlook.Application
Dim NewMail As Microsoft.Office.Interop.Outlook.MailItem

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click

' appel(d) 'excel
Dim appExcel As Microsoft.Office.Interop.Excel.Application 'Application Excel
Dim wbExcel As Microsoft.Office.Interop.Excel.Workbook 'Classeur Excel
Dim wsExcel As Microsoft.Office.Interop.Excel.Worksheet 'Feuille Excel


'Ouverture de l'application
appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
wbExcel = appExcel.Workbooks.Open("c:\test.xlsx")

'wsExcel correspond à la première feuille du fichier
wsExcel = wbExcel.Worksheets(1)
appExcel.Visible = False

For i = 1 To 6
Dim ligne = wbExcel.Sheets(1).Cells(65530, i).End(Microsoft.Office.Interop.Excel.XlDirection.xlUp).Row
With wbExcel.Sheets(1)
Dim NewMail = OutlookApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem)
NewMail.Recipients.Add("jonathan.sebban@live.com") ' pour test
NewMail.Subject = "document demandé"
NewMail.Body = "veuiller trouver ci joint le document...."
NewMail.Attachments.Add(.Cells(ligne, "5"))
NewMail.Send()
End With
Next i

End Sub


End Class


j'vais pleurer ^^

je ne vois pas pourquoi ça ne marche pas l'erreur est toujours ici => NewMail.Attachments.Add(.Cells(ligne, "5"))
0

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

Posez votre question
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 5/07/2012 à 15:52
Quand tu met le N° de la colonne IL NE FAUT PAS DE GUILLEMET c'est un nombre et pas une valeur alphanumérique
PS : encore un peu et je t'envoi une boite de mouchoirs !! :D
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
0
manautop Messages postés 138 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 24 janvier 2013 3
5 juil. 2012 à 16:10
rebonjour et encore merci,

J ai bien besoin d'une boite je crois.

Sans guillement, avec à l'envers etc ça ne veut pas marcher , je ne comprend pas pourquoi je ne vois pas mon erreur

j'ai l'impression que mon visual basic déconne

en effet pour le test j'ai mis l'adresse d'un fichier lamda NewMail.Attachments.Add("Y:\DPT-FID\test.txt") et là ça marche sauf qu'il ne m'envoit que 6 fois le fichier...

j'imagine que le problème viens d'ci For i = 1 To 6 je pensais que le 1 to 6 voulait dire de la colonne A à F mais ça ne m'envois que 6 mails (si je change la valeur du 6 il m'anvois autant de mails que la nouvelle valeur)

je descend chercher une boite de mouchoir ^^
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
5 juil. 2012 à 17:05
Bon, je vois que tu te mélange aussi les pinceaux avec les Next et With..
J'ai tester la validation de cellules Excel, c'est OK dans l'exemple ci-dessous.
Par contre je ne sais pas tester le mail j'ai pas Outlook
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        'app outlook 
'Supprimer les déclarations en haut du module
        Dim OutlookApp As New Microsoft.Office.Interop.Outlook.Application
'Pas le bon endroit pour déclarer
        'Dim NewMail As Microsoft.Office.Interop.Outlook.MailItem

        Dim appExcel As Microsoft.Office.Interop.Excel.Application 'Application Excel 
        Dim wbExcel As Microsoft.Office.Interop.Excel.Workbook 'Classeur Excel 
        Dim wsExcel As Microsoft.Office.Interop.Excel.Worksheet 'Feuille Excel 
        Dim i As Integer
        Dim Chemin As String = "D:\Repertoire\Fichier.xlsx"
        If Dir(Chemin) = "" Then
            Stop
        End If
        'Ouverture de l'application 
        appExcel = CreateObject("Excel.Application")
        'Ouverture d'un fichier Excel 
        wbExcel = appExcel.Workbooks.Open(Chemin)

        'wsExcel correspond à la première feuille du fichier 
        wsExcel = wbExcel.Worksheets(1)
        appExcel.Visible = True
        With wsExcel
            Dim ligne = .Cells(65530, 1).End(Microsoft.Office.Interop.Excel.XlDirection.xlUp).Row
            Debug.Print(ligne)
            For i = 1 To ligne
                Debug.Print(.Cells(i, "E").text)
                Stop
                Dim NewMail = OutlookApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem)
                NewMail.Recipients.Add("jonathan.sebban@live.com") ' pour test 
                NewMail.Subject = "document demandé"
                NewMail.Body = "veuiller trouver ci joint le document...."
                NewMail.Attachments.Add(.Cells(i, "E").text)
                NewMail.Send()

                NewMail = Nothing
            Next i
        End With
        wbExcel.Close()
        appExcel.Quit()
        'OutlookApp.quit()

    End Sub

Après le stop tu regarde dans la fenêtre exécution si c'est bien le nom et chemin complet de la pièce jointe.
Si c'est bon tu tape F5
Après un ou deux essais stop le programme et enlève le stop et les débug.print
Note, pour la cellule fallait juste ajouter le contenu en l'occurrence.. texte.
Si c'était des nombres y faudrait mettre value.
La syntaxe avec la lettre fonctionne, c'est plus facile que de chaque fois rechercher le N° de la colonne.
La syntaxe d'Excel avec VB.Net est plus stricte que dans Excel.
A+
0
manautop Messages postés 138 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 24 janvier 2013 3
5 juil. 2012 à 19:05
Merci à vous

ça à marché une fois (mais il à fallu que je sépare l'adresse du fichier joint sur 2 variable car cela depassait les 255 chararcteres)

et pouf erreur sur NewMail.Recipients.Add("jonathan.sebban@live.com") => Opération abandonnée (Exception de HRESULT : 0x80004004 (E_ABORT))

j'abandonne pour today

j'ai bien compris mes erreur mais là haaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

je reprend demain matin ^^

Bonne soirée à vous et merci beaucoup
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
6 juil. 2012 à 07:13
Re,
Si tu a un compte Gmail voir cette discussion qui semble fonctionner.
A+
0
manautop Messages postés 138 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 24 janvier 2013 3
6 juil. 2012 à 15:09
Bonjour,

Non non pas de compte gmail mais allez savoir ce qui se passe

je vais chercher un peu et lire votre lien qd mm

je reviendrais surement (en tt cas quoi qu'il arrive pour mettre la solution finale)

merci de votre aide je vais essayer de le finir pour lundi


Bon week end à vous
0
manautop Messages postés 138 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 24 janvier 2013 3
6 juil. 2012 à 16:22
Re,

en trifouillantn un peu j'ai trouvé une solution qui marche

c'est pas très éléguant certe :

cela consiste mettre en dur l'addresse su dossier dans lequel le excel se trouve puis de récupérer sur une variable le nom du fichier et ensuite de mettre les variables...

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

'app outlook
'Supprimer les déclarations en haut du module
Dim OutlookApp As New Microsoft.Office.Interop.Outlook.Application
'Pas le bon endroit pour déclarer
'Dim NewMail As Microsoft.Office.Interop.Outlook.MailItem

Dim appExcel As Microsoft.Office.Interop.Excel.Application 'Application Excel
Dim wbExcel As Microsoft.Office.Interop.Excel.Workbook 'Classeur Excel
Dim wsExcel As Microsoft.Office.Interop.Excel.Worksheet 'Feuille Excel
Dim i As Integer
Dim Chemin As String = "C:\Envois mkg fund.xlsx"
If Dir(Chemin) = "" Then

End If
'Ouverture de l'application
appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
wbExcel = appExcel.Workbooks.Open(Chemin)

'wsExcel correspond à la première feuille du fichier
wsExcel = wbExcel.Worksheets("settings")
appExcel.Visible = False
Dim r
Dim u = "\\test\dossierdetes\"

With wsExcel
Dim ligne = .Cells(65530, 1).End(Microsoft.Office.Interop.Excel.XlDirection.xlUp).Row

For i = 1 To ligne

Dim NewMail = OutlookApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem)

r = (.Cells(i, "F").text)
NewMail.Recipients.Add("j.pub@live.com") ' pour test
NewMail.Subject = "document demandé"
NewMail.Body = "veuiller trouver ci joint le document...."
TextBox1.Text = u & r
NewMail.Attachments.Add(u & r)
NewMail.Send()
NewMail = Nothing
Next i
End With
wbExcel.Close()
appExcel.Quit()
'OutlookApp.quit()

End Sub

End Class


voila merci beaucoup pour toute l'aide apportée
0