send email :feuilles uniquement visibles

Neptune

XLDnaute Junior
Bonjour,

J'ai récupéré un prog pour envoyer un email d'excel vers outlook. Le problème c'est ma macro envoie tout le classeur qui fait 10MB! je souhaiterais envoyer uniquement les feuilles visibles dans ce classeur!


Vous trouverez un exmple en attaché

Comment faire?

Merci d'avance
 

Pièces jointes

  • EMAIL.xlsm
    30.2 KB · Affichages: 70
  • EMAIL.xlsm
    30.2 KB · Affichages: 76
  • EMAIL.xlsm
    30.2 KB · Affichages: 84

juju_69

XLDnaute Occasionnel
Re : send email :feuilles uniquement visibles

Hello,

Ce code devrait répondre à ta question. Je lui demande de supprimer toutes les feuilles cachées puis d'enregistrer une copie sous c:\temp.xls et d'envoyer ce classeur allégé :

Sub Mail_visible()
Dim Mesfeuilles As Object
Application.DisplayAlerts = False
For Each Mesfeuilles In Sheets
If Mesfeuilles.Visible = False Then
Mesfeuilles.Delete
End If
Next Mesfeuilles
ActiveWorkbook.SaveAs Filename:="C:\temp.xls"

Application.DisplayAlerts = True

Dim ol As Object
Dim olmail As Object
Dim CurrFile As Object
Set ol = CreateObject("Outlook.Application")
Set olmail = ol.CreateItem(0)
With olmail
.To = "test@free.fr"
.Subject = "objet"
.Body = "Sujet"
.Attachments.Add "C:\temp.xls"
'Remplacez .Display par .send pour envoyer directement l
.Display
End With
End Sub

@ +

Juju
 

Neptune

XLDnaute Junior
Re : send email :feuilles uniquement visibles

Merci pour ton aide mais je ne peux pas supprimer mes autres feuilles.

Il faut que je rentre les feuilles visibles dans une Array...J'y suis presque.

wb.Sheets(Array("Sheet1", "Sheet3")).Copy

Il faut que je trouve une manière pour que les sheets visibles apparaissent à la place de "Sheet1, Sheet3...
 

Neptune

XLDnaute Junior
Re : send email :feuilles uniquement visibles

Bonjour,

Quelqu'un peut il me résoudre ce problème....

x = ""
For Each sh In ThisWorkbook.Worksheets
If sh.Visible = True Then
x = sh.Name & "," & x
End If

Next sh

'retire la virgule à la fin
x = Left(x, Len(x) - 1)

Set wb = ActiveWorkbook
wb.Sheets(Array(x)).Copy


Le problème c'est que x="Feuil1,Feuil2..." or je voudrais avoir "Feuil1","Feuil2",...

Je ne peux pas rajouter de " avant et après la virgule !

Cela ne fonctionne pas

x = sh.Name & "","" & x

Merci d'avance pour votre aide
 

juju_69

XLDnaute Occasionnel
Re : send email :feuilles uniquement visibles

Bonjour Neptune,

Attention, je ne supprime pas les feuilles dans ton classeur mais bien seulement dans celui envoyé qui s'enregistre en temp. C equi correspond à ce que tu as fait. Tu peux à la limite enregistrer avant la procédure si tu à fait des modifs.

Sinon pour ton code tu peux faire :
Dim wb As Workbook
Set wb = ThisWorkbook

For Each sh In ThisWorkbook.Worksheets
If sh.Visible = True Then
If wb.Name <> ThisWorkbook.Name Then ThisWorkbook.Sheets(sh.Name).Copy After:=wb.Sheets(wb.Sheets.Count)
If wb.Name = ThisWorkbook.Name Then
ThisWorkbook.Sheets(sh.Name).Copy
Set wb = ActiveWorkbook
End If
End If
Next sh

@ +

Juju
 

Neptune

XLDnaute Junior
Re : send email :feuilles uniquement visibles

Hello,

Je veux qu'il fasse qu'une copie, 1 seule fois.. Dans le cas de juju il me copie les feuilles visibles chacune dans un nouveau classeur...

Je souhaiterais qu'il me copie mes feuilles visibles dans un seul nouveau classeur que j'envoie par email.Je veux recevoir un seul fichier excel.

Codé en dur ça fonctionne...mais vu que je ne sais quelles feuilles seront visibles!!là ça bloque!!! Dans mon cas ici, j'ai mis les feuilles result et customerpool pour essayer...

Voici mon programme :

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
Dim sh As Worksheet
Dim Mesfeuilles As Object

With Application
.ScreenUpdating = False
.EnableEvents = False
End With

Set Sourcewb = ActiveWorkbook


' Copy the worksheets to a new workbook.
Sourcewb.Sheets(Array("Result", "CustomerPool")).Copy

Set Destwb = ActiveWorkbook

' Determine the Excel version, file extension, and format.
With Destwb
If Val(Application.Version) < 12 Then
' You are using Excel 97 through Excel 2003.
FileExtStr = ".xls": FileFormatNum = -4143
Else
' You are using Excel 2007.
' When you use ActiveSheet.Copy to create a new 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
Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
Case 52:
If .HasVBProject Then
FileExtStr = ".xlsm": FileFormatNum = 52
Else
FileExtStr = ".xlsx": FileFormatNum = 51
End If
Case 56: FileExtStr = ".xls": FileFormatNum = 56
Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
End Select
End If
End If
End With


' Save the new workbook and then mail it.
TempFilePath = Environ$("temp") & "\"
'"Part of " & Sourcewb.Name & " " & Format(Now, "dd-mmm-yy h-mm-ss")
'Sourcewb.Sheets("YourSheet").Range("A1").Value & " " & Format(Now, "dd-mmm-yy h-mm-ss")

TempFileName = "Etude " & Sourcewb.Sheets("Result").Customer.Value & " " & Format(Now, "dd-mmm-yy")

With Destwb
.SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
On Error Resume Next
.SendMail MailAdresse, _
MailSubject
On Error GoTo 0
.Close SaveChanges:=False
End With

' Delete the file you just sent.
Kill TempFilePath & TempFileName & FileExtStr

With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
 

Neptune

XLDnaute Junior
Re : send email :feuilles uniquement visibles

Même problème si je veux envoyer mon fichier excel à plusieurs personne...

SendMail Array(MailAdresse), ..


Mon MailAdresse peut contenir plusieurs adresse mais comme ci-dessus ce sera au format:

"toto@hotmail.com,tata@hotmail.com"

pour que cela fonctionne avec Array, il faut:

"toto@hotmail.com","tata@hotmail.com"

je suis donc bloqué à deux endroits avec ce Array!

Comment faire?
Merci
 

juju_69

XLDnaute Occasionnel
Re : send email :feuilles uniquement visibles

Désolé d'insister mais ma macro fonctionne très bien et crée un seul classeur. Joins nous le fichier qui ne marche pas.

Sinon pour les mails j'utilise 2 solutions : soit je fais en sorte d'avoir dans une cellule tous les mails (xxx@toto.fr;yyy@toto.fr...)
soit je fais çà :
Dim mail as string
mail = range("A1").value & ";"
mail = mail + range("A2").value & ";"
 

Neptune

XLDnaute Junior
Re : send email :feuilles uniquement visibles

Au contraire ça m'aide à comprendre et merci juju pour tes conseils....

J'avais copié mon programme au desous.

J'avais aussi essayé de mettre dans une cellule mes @mails mais ça marche pas.

Il faut .SendMail avec des " ".

Il faut non pas (xxx@toto.fr;yyy@toto.fr...) mais ("xxx@toto.fr";"yyy@toto.fr"...)

Dans le cas d'une cellule pour le stockage je récupère ceci:

"xxx@toto.fr;yyy@toto.fr..."

J'ai trouvé une solution pour avoir "xxx@toto.fr";"yyy@toto.fr" mais c'est assez biscornu!lol..ça reste lourd...

Sinon j'ai essayé d'utiliser ton prog ci_dessous:

Dim wb As Workbook
Set wb = ThisWorkbook

For Each sh In ThisWorkbook.Worksheets
If sh.Visible = True Then
If wb.Name <> ThisWorkbook.Name Then ThisWorkbook.Sheets(sh.Name).Copy After:=wb.Sheets(wb.Sheets.Count)
If wb.Name = ThisWorkbook.Name Then
ThisWorkbook.Sheets(sh.Name).Copy
Set wb = ActiveWorkbook
End If
End If
Next sh

Moi j'ai Sourcewb et je copie dans Destwb...tu les placerais comment dans ton prog ci dessus parceque j'ai du me tromper car il me copiait plein de nouveau classeurs!!!!
 

juju_69

XLDnaute Occasionnel
Re : send email :feuilles uniquement visibles

Hello,

Pour les mails j'utilise çà et la variable mail ou les valeurs fonctionnent :

Dim ol As Object
Dim olmail As Object
Dim CurrFile As Object
Set ol = CreateObject("Outlook.Application")
Set olmail = ol.CreateItem(0)
With olmail
.To = Range("Feuil3!B4").Value & ";" & Range("B3").Value
'Affiche le nom comme objet du message
.Subject = ActiveWorkbook.FullName
.Body = "sujet" .Attachments.Add "C:\PGI\Résultats.xls"
'Remplacez .Display par .send pour envoyer directement l'e-mail
.Display
End With
End Sub

Sinon dans mon code, wb représente au début le classeur d'origine et à la fin celui de destination donc pas sûr qu'il faille le remplacer ;)
 

Neptune

XLDnaute Junior
Re : send email :feuilles uniquement visibles

Bonjour,

C'est beaucoup mieux avec cette méthode d'envoi de mail!

Par contre, comment peut-on faire pour que le nouveau classeur envoyé par mail ne contienne pas les codes dans les feuilles? Il ya des boutons sur la feuille.
En cas de réponse , macro active, si on clique sur ces boutons, ça plante ...normal car les modules ne sont pas rapatriés.

Je ne veux pas que les personnes puissent voir les codes.
Ils doivent juste avoir un visuel du fichier, ce dernier ne doit pas être actif.

Merci
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz