Envoie multiple de mails via excel avec feuille en PJ
Résolu/Fermé
gabytaine
Messages postés
8
Date d'inscription
mardi 3 février 2015
Statut
Membre
Dernière intervention
4 mars 2015
-
3 mars 2015 à 14:45
gabytaine Messages postés 8 Date d'inscription mardi 3 février 2015 Statut Membre Dernière intervention 4 mars 2015 - 4 mars 2015 à 16:20
gabytaine Messages postés 8 Date d'inscription mardi 3 février 2015 Statut Membre Dernière intervention 4 mars 2015 - 4 mars 2015 à 16:20
A voir également:
- Envoie multiple de mails via excel avec feuille en PJ
- Feuille de pointage excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Mise en forme conditionnelle excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
1 réponse
gabytaine
Messages postés
8
Date d'inscription
mardi 3 février 2015
Statut
Membre
Dernière intervention
4 mars 2015
5
Modifié par gabytaine le 4/03/2015 à 11:59
Modifié par gabytaine le 4/03/2015 à 11:59
Bonjour à tous,
Alors voila ou j'en suis ^^
J'ai reussi à mettre mon bouton et à réaliser le programme afin d'envoyer la feuil1 à la personne 1.
Tout content je me suis alors dit de "doubler" le programme en réalisant un petit copier/coller à la suite en prenant soin de ne pas redéclarer ce qui a déjà été déclarés et de retirer le "end sub" en trop et la: ca marche !!
A ce moment précis j'ai cru, à tord, avoir trouvé la solution puisque le code marchant pour deux personnes durant les essais je l'ai copier/coller en prettant la même attention qu'au dessus pour l'adapter à l'envoie de 4 mails mais ce fut le drame ^^
Lorsque je lance la maccro via mon bouton l'envoie du mail n°1 ce fait comme prévus, le deuxième également puis "patatrak" une jolie fenêtre s'ouvre et me dit: Erreur d'execution '9' L'indice n'appartient pas à la séléction
J'ai utiliser la maccro style pas à pas (F8) et l'erreur se trouve entre ces deux ligne (la première surligné en jaune, puis F8 -->crash):
Sourcewb.Sheets(Array("feuil3")).Copy
Set Destwb = ActiveWorkbook
Je me suis renseigné sur cette erreur et il s'avère que j'utilise 4 fois la même fonction/maccro avec le même nom (car copier/coller) et cela semble créer un conflit. Mais pourquoi le programme plante sur le 3eme mail et pas le 2eme??? Car, je me repète, j'ai copier/coller le même programme 3fois pour atteindre 4 mail.
J'ai un réel besoin d'aide, je le copie/colle en entier ci dessous:
Alors voila ou j'en suis ^^
J'ai reussi à mettre mon bouton et à réaliser le programme afin d'envoyer la feuil1 à la personne 1.
Tout content je me suis alors dit de "doubler" le programme en réalisant un petit copier/coller à la suite en prenant soin de ne pas redéclarer ce qui a déjà été déclarés et de retirer le "end sub" en trop et la: ca marche !!
A ce moment précis j'ai cru, à tord, avoir trouvé la solution puisque le code marchant pour deux personnes durant les essais je l'ai copier/coller en prettant la même attention qu'au dessus pour l'adapter à l'envoie de 4 mails mais ce fut le drame ^^
Lorsque je lance la maccro via mon bouton l'envoie du mail n°1 ce fait comme prévus, le deuxième également puis "patatrak" une jolie fenêtre s'ouvre et me dit: Erreur d'execution '9' L'indice n'appartient pas à la séléction
J'ai utiliser la maccro style pas à pas (F8) et l'erreur se trouve entre ces deux ligne (la première surligné en jaune, puis F8 -->crash):
Sourcewb.Sheets(Array("feuil3")).Copy
Set Destwb = ActiveWorkbook
Je me suis renseigné sur cette erreur et il s'avère que j'utilise 4 fois la même fonction/maccro avec le même nom (car copier/coller) et cela semble créer un conflit. Mais pourquoi le programme plante sur le 3eme mail et pas le 2eme??? Car, je me repète, j'ai copier/coller le même programme 3fois pour atteindre 4 mail.
J'ai un réel besoin d'aide, je le copie/colle en entier ci dessous:
Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Feuil7.Mail_Sheets_Array
End Sub
Sub Mail_Sheets_Array()
' Works in Excel 97 through Excel 2007.
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim Sourcewb As Workbook
Dim Destwb As Workbook
Dim TempFilePath As String
Dim TempFileName As String
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set Sourcewb = ActiveWorkbook
' Utiliser Sourcewb.Sheets(Array("feuil1")).Copy pour créer
' un nouveau classeur avec
' les mêmes feuilles que selectionné aux format du
' classeur d'origine.
' Copier le classeur dans un nouveau classeur.
Sourcewb.Sheets(Array("feuil1")).Copy
Set Destwb = ActiveWorkbook
' Determine la version Excel et l'extension/format des fichiers.
With Destwb
If Val(Application.Version) < 12 Then
' You are using Excel 97-2003.
FileExtStr = ".xls": FileFormatNum = -4143
Else
' You are using Excel 2007.
' When you use ActiveSheet.Copy to create a workbook,
' you are prompted with a security dialog. If you click No
' in the dialog, then the name of Sourcewb is the same
' as Destwb and you exit the subroutine. You only see this
' dialog when you attempt to copy a worksheet from an .xlsm file with macros disabled.
If Sourcewb.Name = .Name Then
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
MsgBox "Your answer is No in the security dialog."
Exit Sub
Else
Select Case Sourcewb.FileFormat
' Code 51 represents the enumeration for a macro-free
' Excel 2007 Workbook (.xlsx).
Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
' Code 52 represents the enumeration for a
' macro-enabled Excel 2007 Workbook (.xlsm).
Case 52:
If .HasVBProject Then
FileExtStr = ".xlsm": FileFormatNum = 52
Else
FileExtStr = ".xlsx": FileFormatNum = 51
End If
' Code 56 represents the enumeration for a
' a legacy Excel 97-2003 Workbook (.xls).
Case 56: FileExtStr = ".xls": FileFormatNum = 56
' Code 50 represents the enumeration for a
' binary Excel 2007 Workbook (.xlsb).
Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
End Select
End If
End If
End With
' Change all cells in the worksheet to values, if desired.
'' With Destwb.Sheets(1).UsedRange
'' .Cells.Copy
'' .Cells.PasteSpecial xlPasteValues
'' .Cells(1).Select
'' End With
''Application.CutCopyMode = False
'Sauvegarder le nouveau fichier et le mettre dans le mail.
TempFilePath = Environ$("temp") & "\"
TempFileName = "Part of " & Sourcewb.Name & " " & Format(Now, "dd-mmm-yy h-mm-ss")
With Destwb
.SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
On Error Resume Next
For i = 1 To 3
.SendMail "personne.1@mail.fr", _
"fichier 1"
If Err.Number = 0 Then Exit For
Next i
On Error GoTo 0
.Close SaveChanges:=False
End With
' suppresion de l'element envoyé.
Kill TempFilePath & TempFileName & FileExtStr
With Application
.ScreenUpdating = Truend
.EnableEvents = True
End With
' 1ere boucle
' on remet le mm code sans les déclarations
' et on change juste le fichier a envoyer
' et l'adresse mail du destinataire
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set Sourcewb = ActiveWorkbook
' Utiliser Sourcewb.Sheets(Array("feuil1")).Copy pour créer
' un nouveau classeur avec
' les mêmes feuilles que selectionné aux format du
' classeur d'origine.
' Copier le classeur dans un nouveau classeur.
Sourcewb.Sheets(Array("feuil2")).Copy
Set Destwb = ActiveWorkbook
' Determine la version Excel et l'extension/format des fichiers.
With Destwb
If Val(Application.Version) < 12 Then
' You are using Excel 97-2003.
FileExtStr = ".xls": FileFormatNum = -4143
Else
' You are using Excel 2007.
' When you use ActiveSheet.Copy to create a workbook,
' you are prompted with a security dialog. If you click No
' in the dialog, then the name of Sourcewb is the same
' as Destwb and you exit the subroutine. You only see this
' dialog when you attempt to copy a worksheet from an .xlsm file with macros disabled.
If Sourcewb.Name = .Name Then
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
MsgBox "Your answer is No in the security dialog."
Exit Sub
Else
Select Case Sourcewb.FileFormat
' Code 51 represents the enumeration for a macro-free
' Excel 2007 Workbook (.xlsx).
Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
' Code 52 represents the enumeration for a
' macro-enabled Excel 2007 Workbook (.xlsm).
Case 52:
If .HasVBProject Then
FileExtStr = ".xlsm": FileFormatNum = 52
Else
FileExtStr = ".xlsx": FileFormatNum = 51
End If
' Code 56 represents the enumeration for a
' a legacy Excel 97-2003 Workbook (.xls).
Case 56: FileExtStr = ".xls": FileFormatNum = 56
' Code 50 represents the enumeration for a
' binary Excel 2007 Workbook (.xlsb).
Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
End Select
End If
End If
End With
' Change all cells in the worksheet to values, if desired.
'' With Destwb.Sheets(1).UsedRange
'' .Cells.Copy
'' .Cells.PasteSpecial xlPasteValues
'' .Cells(1).Select
'' End With
''Application.CutCopyMode = False
'Sauvegarder le nouveau fichier et le mettre dans le mail.
TempFilePath = Environ$("temp") & "\"
TempFileName = "Part of " & Sourcewb.Name & " " & Format(Now, "dd-mmm-yy h-mm-ss")
With Destwb
.SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
On Error Resume Next
For i = 1 To 3
.SendMail "personne.2@mail.fr", _
"fichier2"
If Err.Number = 0 Then Exit For
Next i
On Error GoTo 0
.Close SaveChanges:=False
End With
' suppresion de lelement envoyé.
Kill TempFilePath & TempFileName & FileExtStr
With Application
.ScreenUpdating = Truend
.EnableEvents = True
End With
' 2eme boucle
' on remet le mm code sans les déclarations
' et on change juste le fichier a envoyer
' et l'adresse mail du destinataire
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set Sourcewb = ActiveWorkbook
' Utiliser Sourcewb.Sheets(Array("feuil1")).Copy pour créer
' un nouveau classeur avec
' les mêmes feuilles que selectionné aux format du
' classeur d'origine.
' Copier le classeur dans un nouveau classeur.
Sourcewb.Sheets(Array("feuil3")).Copy
Set Destwb = ActiveWorkbook
' Determine la version Excel et l'extension/format des fichiers.
With Destwb
If Val(Application.Version) < 12 Then
' You are using Excel 97-2003.
FileExtStr = ".xls": FileFormatNum = -4143
Else
' You are using Excel 2007.
' When you use ActiveSheet.Copy to create a workbook,
' you are prompted with a security dialog. If you click No
' in the dialog, then the name of Sourcewb is the same
' as Destwb and you exit the subroutine. You only see this
' dialog when you attempt to copy a worksheet from an .xlsm file with macros disabled.
If Sourcewb.Name = .Name Then
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
MsgBox "Your answer is No in the security dialog."
Exit Sub
Else
Select Case Sourcewb.FileFormat
' Code 51 represents the enumeration for a macro-free
' Excel 2007 Workbook (.xlsx).
Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
' Code 52 represents the enumeration for a
' macro-enabled Excel 2007 Workbook (.xlsm).
Case 52:
If .HasVBProject Then
FileExtStr = ".xlsm": FileFormatNum = 52
Else
FileExtStr = ".xlsx": FileFormatNum = 51
End If
' Code 56 represents the enumeration for a
' a legacy Excel 97-2003 Workbook (.xls).
Case 56: FileExtStr = ".xls": FileFormatNum = 56
' Code 50 represents the enumeration for a
' binary Excel 2007 Workbook (.xlsb).
Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
End Select
End If
End If
End With
' Change all cells in the worksheet to values, if desired.
'' With Destwb.Sheets(1).UsedRange
'' .Cells.Copy
'' .Cells.PasteSpecial xlPasteValues
'' .Cells(1).Select
'' End With
''Application.CutCopyMode = False
'Sauvegarder le nouveau fichier et le mettre dans le mail.
TempFilePath = Environ$("temp") & "\"
TempFileName = "Part of " & Sourcewb.Name & " " & Format(Now, "dd-mmm-yy h-mm-ss")
With Destwb
.SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
On Error Resume Next
For i = 1 To 3
.SendMail "personne.3@mail.fr", _
"fichier3"
If Err.Number = 0 Then Exit For
Next i
On Error GoTo 0
.Close SaveChanges:=False
End With
' suppresion de lelement envoyé.
Kill TempFilePath & TempFileName & FileExtStr
With Application
.ScreenUpdating = Truend
.EnableEvents = True
End With
' 3eme boucle
' on remet le mm code sans les déclarations
' et on change juste le fichier a envoyer
' et l'adresse mail du destinataire
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set Sourcewb = ActiveWorkbook
' Utiliser Sourcewb.Sheets(Array("feuil1")).Copy pour créer
' un nouveau classeur avec
' les mêmes feuilles que selectionné aux format du
' classeur d'origine.
' Copier le classeur dans un nouveau classeur.
Sourcewb.Sheets(Array("feuil4")).Copy
Set Destwb = ActiveWorkbook
' Determine la version Excel et l'extension/format des fichiers.
With Destwb
If Val(Application.Version) < 12 Then
' You are using Excel 97-2003.
FileExtStr = ".xls": FileFormatNum = -4143
Else
' You are using Excel 2007.
' When you use ActiveSheet.Copy to create a workbook,
' you are prompted with a security dialog. If you click No
' in the dialog, then the name of Sourcewb is the same
' as Destwb and you exit the subroutine. You only see this
' dialog when you attempt to copy a worksheet from an .xlsm file with macros disabled.
If Sourcewb.Name = .Name Then
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
MsgBox "Your answer is No in the security dialog."
Exit Sub
Else
Select Case Sourcewb.FileFormat
' Code 51 represents the enumeration for a macro-free
' Excel 2007 Workbook (.xlsx).
Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
' Code 52 represents the enumeration for a
' macro-enabled Excel 2007 Workbook (.xlsm).
Case 52:
If .HasVBProject Then
FileExtStr = ".xlsm": FileFormatNum = 52
Else
FileExtStr = ".xlsx": FileFormatNum = 51
End If
' Code 56 represents the enumeration for a
' a legacy Excel 97-2003 Workbook (.xls).
Case 56: FileExtStr = ".xls": FileFormatNum = 56
' Code 50 represents the enumeration for a
' binary Excel 2007 Workbook (.xlsb).
Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
End Select
End If
End If
End With
' Change all cells in the worksheet to values, if desired.
'' With Destwb.Sheets(1).UsedRange
'' .Cells.Copy
'' .Cells.PasteSpecial xlPasteValues
'' .Cells(1).Select
'' End With
''Application.CutCopyMode = False
'Sauvegarder le nouveau fichier et le mettre dans le mail.
TempFilePath = Environ$("temp") & "\"
TempFileName = "Part of " & Sourcewb.Name & " " & Format(Now, "dd-mmm-yy h-mm-ss")
With Destwb
.SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
On Error Resume Next
For i = 1 To 3
.SendMail "personne.4@mail.fr", _
"fichier4"
If Err.Number = 0 Then Exit For
Next i
On Error GoTo 0
.Close SaveChanges:=False
End With
' suppresion de lelement envoyé.
Kill TempFilePath & TempFileName & FileExtStr
With Application
.ScreenUpdating = Truend
.EnableEvents = True
End With
End Sub
4 mars 2015 à 16:20
Cette fois sa fonctionne,
Donc pour la solution j'ai supprimé la partie "2eme boucle" qui crashée et j'ai testé la maccro avec 3 mails, ca a fonctionné donc j'ai copier/coller la dernière boucle, modifier l'adresse mail et la PJ (pièce jointe) et cette fois les 4 mails partent ^^
Me demandez pas pourquoi cette fois ca marche alors que c'est le même code, je n'en sais rien peut être ai je mal réalisé mon premier copier/coller toujours est-il que ca marche (je l'ai testé 5fois de suite, ma boite mail va imploser XD)
En espérant que mon monologue serve à quelqu'un un de ces jours,
Gabriel,
PS: mon problème étant résolu je suis sencé fermer ce topic mais j'aimerais maintenant "optimiser" mon code car il est très (trop?) grand et je sais que certaines ligne me sont inutil. Je ne cloture pas cette question tout de suite en espèrant qu'une âme charitable m'aide à simplifier tous ca. Si personne ne viens par ici d'ici vendredi 6 mars je clotuerai ;)