Joindre le fichier actuellement en cours

Bonjour tout le monde,

Je me permets de vous solliciter, car je suis bloqué : chaque mois je dois filtrer mes données selon les entreprises prestataires et leur envoyer un récapitulatif de toutes leurs interventions du mois. Pour se faire, j'essaie juste d'étudier le cas pour un prestataire jusqu'à l'envoi du mail avant de mettre ma boucle en place cependant même le cas sans boucle j'y arrive pas : j'aimerais joindre directement le fichier en question sans passer par la fenêtre qui nous dis de choisir manuellement le fichier.

Est-ce que vous pouvez m'aider s'il vous plaît.

Option Explicit

Dim Chemin As String, nomFichier As String, message As String, sujet As String, adresse As String, pj As String
Dim OutlookApp As Object, OutlookMail As Object

Sub filtre_amirat_pdf()

On Error Resume Next

nomFichier = Chemin & "Décompte STT EDF mai 2020.xls"
Chemin = "C:\Users\ABASKARAN\Documents\Data\"

        ThisWorkbook.Sheets("Conso_Mois2").Select

    Application.ScreenUpdating = False

        ActiveSheet.Range("J:M").EntireColumn.Hidden = True
        ActiveSheet.Range("$A$1:$M$500").AutoFilter Field:=17, Criteria1:="AMIRAT"
        Cells.Select
        Selection.Copy
        ActiveSheet.Range("J:M").EntireColumn.Hidden = False

        Workbooks.Add
        Sheets("Feuil1").Name = "EDF"
        Range("A1").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Columns("A:J").EntireColumn.AutoFit

    'Application.DisplayAlerts = False
         ChDir _
            "C:\Users\ABASKARAN\Documents\Data\"
        ActiveWorkbook.SaveAs Filename:=nomFichier, _
        FileFormat:=xlExcel8, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
    'Application.DisplayAlerts = True
        'ActiveWindow.Close

    Application.ScreenUpdating = True

    'initialisation de la pièce jointe
    pj = Application.GetOpenFilename("Tous les fichiers(*.*),*.*")

    ' Récupération de l'adresse mail associée à l'employé.
    adresse = ThisWorkbook.Sheets("BDD Partenaires").Range("C2").Value

    If adresse <> "" Then
    'Initialisation des variables
        sujet = "[Circet] Décompte de la société " & ThisWorkbook.Worksheets("Conso_Mois").Range("M2").Value
        message = "Bonjour," & Chr(10) & Chr(13) & "Veuillez trouver ci-joint le bilan du mois de mai 2020"

    'Création du mail
        Set OutlookApp = CreateObject("outlook.Application")
        Set OutlookMail = OutlookApp.CreateItem(0)
            With OutlookMail
                .Subject = sujet
                .To = adresse
                .Body = message
                .Attachments.Add ActiveWorkbook.FullName
                .Display 'visualiser le mail avant d'envoyer
                '.Send 'créer et envoyer directement

            End With

    End If

End Sub

Voici la macro actuelle*

Bonjour

Dans votre fichier on ne trouve pas la feuille Conso_mois2 que vous référencez au début du code

j'aimerais joindre directement le fichier en question sans passer par la fenêtre qui nous dis de choisir manuellement le fichier.

Désactivez cette ligne

pj = Application.GetOpenFilename("Tous les fichiers(*.*),*.*")

Ensuite plus bas quel est le fichier que vous voulez envoyer ? celui avec la feuille EDF ?

Cordialement


Edit : Essayez comme ceci

Sub filtre_amirat_pdf()
Dim Chemin As String, nomFichier As String, message As String, sujet As String, adresse As String, pj As String
Dim OutlookApp As Object, OutlookMail As Object

On Error Resume Next

Chemin = "C:\Users\ABASKARAN\Documents\Data\"
nomFichier = "Décompte STT EDF mai 2020.xls"

Application.ScreenUpdating = False

With ThisWorkbook.Sheets("Conso_Mois")
    .Select
    .Range("J:M").EntireColumn.Hidden = True
    .Range("$A$1:$M$500").AutoFilter Field:=17, Criteria1:="AMIRAT"
    .Cells.Copy
    .Range("J:M").EntireColumn.Hidden = False
End With

Workbooks.Add
With Sheets("Feuil1")
    .Name = "EDF"
    .Range("A1").Paste
    .Columns("A:J").EntireColumn.AutoFit
End With

ActiveWorkbook.SaveAs Filename:=Chemin & nomFichier ', _

Application.ScreenUpdating = True

    ' Récupération de l'adresse mail associée à l'employé.
adresse = ThisWorkbook.Sheets("BDD Partenaires").Range("C2").Value

    If adresse <> "" Then
    'Initialisation des variables
        sujet = "[Circet] Décompte de la société " & ThisWorkbook.Worksheets("Conso_Mois").Range("M2").Value
        message = "Bonjour," & Chr(10) & Chr(13) & "Veuillez trouver ci-joint le bilan du mois de mai 2020"

    'Création du mail
        Set OutlookApp = CreateObject("outlook.Application")
        Set OutlookMail = OutlookApp.CreateItem(0)
            With OutlookMail
                .Subject = sujet
                .To = adresse
                .Body = message
                .Attachments.Add ActiveWorkbook.FullName
                .Display 'visualiser le mail avant d'envoyer
                '.Send 'créer et envoyer directement
            End With

    End If

End Sub

Bonjour,

Merci de ta réponse!

C'est la feuille "Conso_Mois" tout court, désolé j'ai confondu avec le nom du classeur en question.

Oui, le fichier que je veux envoyer est bien celui avec la feuille EDF. Le code que vous m'avez proposé est fonctionnel, cependant au niveau du copier/coller y a un problème (d'ailleurs ça m'arrive souvent) : la macro ne colle pas l'élément copier du classeur Conso_Mois2.

J'aimerais savoir au passage à quoi sert l'instruction suivante s'il vous plaît :

Application.DisplayAlerts = False
Application.DisplayAlerts = True

Merci d'avance!

PS : J'aimerais également savoir, la ligne

On Error Resume Next
-c'est une instruction pour que le code continue de se compiler malgré les alertes d'erreurs c'est cela ?

J'aimerais savoir au passage à quoi sert l'instruction suivante s'il vous plaît :

Application.DisplayAlerts = False
Application.DisplayAlerts = True

Placée dans un code, cette instruction évite d'avoir un message qui est par défaut renvoyé par excel. Exemple : lorsque vour fermez un fichier que vous avez modifié. Excel va vous demander si vous voulez enregistrer les modifications. Avec cette instruction mise à FALSE, vous n'aurez pas ce message et excel fera directement l'action sans vous demander votre avis.

la macro ne colle pas l'élément copier du classeur Conso_Mois2.

Je pense que cela vient du fait que vous copier puis vous créer un nouveau fichier. Cette opération enlève peut être les infos de copie dans le presse papier. essayez de modifier cette partie de code comme ceci :

Workbook.Add
With ThisWorkbook.Sheets("Conso_Mois")
    .Select
    .Range("J:M").EntireColumn.Hidden = True
    .Range("$A$1:$M$500").AutoFilter Field:=17, Criteria1:="AMIRAT"
    .Cells.Copy ActiveWorkbook.Range("A1")
    .Range("J:M").EntireColumn.Hidden = False
End With

'Workbooks.Add
With ActiveWorkbook.Sheets("Feuil1")
    .Name = "EDF"
    '.Range("A1").Paste
    .Columns("A:J").EntireColumn.AutoFit
End With

-PS : J'aimerais également savoir, la ligne

On Error Resume Next

-c'est une instruction pour que le code continue de se compiler malgré les alertes d'erreurs c'est cela ?

Exact !

Merci beaucoup pour les explications!

Je viens d'essayer le bout de code en question mais toujours rien, le copier/coller ne fonctionne toujours pas. J'ai essayé avec le code

Application.CutCopyMode = True
Application.CutCopyMode = False

Mais bon, toujours sans succès.

Bonjour

Essayez comme ceci. Chez moi cela a fonctionné

Workbooks.Add
With ThisWorkbook.Sheets("Conso_Mois")
    '.Select
    .Range("J:M").EntireColumn.Hidden = True
    .Range("$A$1:$M$500").AutoFilter Field:=17, Criteria1:="EDF"
    .Range("C1:Q" & .Range("C" & .Rows.Count).End(xlUp).Row).Copy ActiveWorkbook.Sheets(1).Range("A1") '.Cells.Copy
    .Range("J:M").EntireColumn.Hidden = False
End With

With ActiveWorkbook.Sheets("Feuil1")
    .Name = "EDF"
    .Columns("A:J").EntireColumn.AutoFit
End With
End Sub

J'ai changé AMIRAT par EDF car je n'avais pas de AMIRAT en colonne 17.

Crdlt

Salut,

Oui vous avez bien fait, excusez-moi j'essayais de réadapter la macro dans mon cas ^^'

ça marche nickel cette fois-ci, merci beaucoup !

+ d'ailleurs merci, j'essayais d'optimiser la macro en question en utilisant la fonction Rows.Count mais je savais pas trop comme synthétiser ça, merci beaucoup !

Rechercher des sujets similaires à "joindre fichier actuellement cours"