IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Envoyer une feuille Excel sans l'enregistrer [XL-2019]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingenieur
    Inscrit en
    Avril 2019
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingenieur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 30
    Points : 16
    Points
    16
    Par défaut Envoyer une feuille Excel sans l'enregistrer
    Bonjour a tous!

    Je reviens sur ce site encore et toujours car sans vous aucun de mes classeurs ne fonctionnerait.

    J'ai une question a laquelle je n'arrive pas a trouver de reponse sur le forum.

    Est-il possible d'envoyer une feuille d'un classeur excel sans l'enregistrer quelque avant?

    Je m'explique, je souhaite demander a mes equipes de m'envoyer la feuille de maniere hebdomadaire le probleme est le suivant :
    Etant tous sur un reseau entreprise, enregistrer le fichier au meme endroit est impossible car chaque utilisateur aura une racine differente. Je souhaite eviter d'avoir une racine personalisee pour chacun car ca voudrait dire qu'a chaque fois que je souhaite faire une mise a jour sur le fichier il faudra que je cree X fichier pour chacun des membre de mon equipe.
    Je ne sais pas si j'ai ete assez clair

    Merci d'avance pour votre eternel support

    voici mon code pour info :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    Sub Mail_Sami()
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
     
    Dim OutApp, OutMail As Object
    Dim subject1 As String
    Dim Body As String
    Dim DL As Long
    Dim SigString, Signature As String
     
     
    On Error Resume Next
     
        DL = Cells(Application.Rows.count, 1).End(xlUp).Row
        Columns("B:B").Select
        Selection.EntireColumn.Hidden = False
        Columns("F:F").Select
        Selection.EntireColumn.Hidden = True
        Range("B3:B" & DL).Value = Format(Now, "MM/DD/YYYY")
        Range("A2").Select
        ActiveWorkbook.Save
        ThisWorkbook.Sheets("Request Form").Copy
        Set NouveauClasseur = ActiveWorkbook
        Application.DisplayAlerts = False
        NouveauClasseur.SaveAs Filename:="C:\...." 'c'est cette ligne que je souhaite eviter
     
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
     
        subject1 = ActiveSheet.Range("C3").Value
     
     
        Body = "<font style='font-family: Arial;font-size: 10pt ;" & "' color=#1D5799> " & "Hi Paul," & "<br>" & "" & "<br>" & "text ici" & "<br>" & "" & "<br>" & " </span>"
     
        SigString = Environ("appdata") & _
                    "\Microsoft\Signatures\Pierre.htm"
     
        If Dir(SigString) <> "" Then
            Signature = GetBoiler(SigString)
        Else
            Signature = ""
        End If
     
        On Error Resume Next
     
        With OutMail
            .To = "Paul.pierre@essai.com"
            .CC = "Pierre.paul@essai.com"
            .BCC = ""
            .Subject = "RF - SC" & subject1 
            .BodyFormat = olFormatHTML
            .HTMLBody = Body & "<br>" & Signature
            .Attachments.Add NouveauClasseur.FullName
            .Display
     
        End With
        On Error GoTo 0
     
        Set OutMail = Nothing
        Set OutApp = Nothing
     
        NouveauClasseur.Close
        Application.DisplayAlerts = True
     
        Sheets("Request Form").Select
        Columns("B:B").Select
        Selection.EntireColumn.Hidden = True
        Columns("F:F").Select
        Selection.EntireColumn.Hidden = False
        Range("A2").Select
     
        Application.EnableEvents = True
        Application.Calculation = xlCalculationAutomatic
        Application.ScreenUpdating = True
     
    End Sub

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingenieur
    Inscrit en
    Avril 2019
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingenieur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Si mon post precedent n'a pas ete compris, n'hésitez pas a me demander plus d'explications

    A bientot

  3. #3
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 987
    Points
    2 987
    Par défaut
    Bonjour

    Tu veux donc que chaque personne puisse écrire dans le fichier et toi, derrière, de consolider les informations dans un classeur global.

    Pourquoi ne pas simplifier fortement ton problème en utilisant une version online ? Par exemple Google Spreadsheet ou Excel 365 online ? Chacun pourra apporter ses modifications dans un même et unique "fichier" et la consolidation sera automatique; tu n'auras rien à faire.

    Sinon, pour répondre exactement à ta question, il suffirait de sauver le fichier dans le dossier temporaire, sur l'ordinateur de ton utilisateur juste avant l'envoi. Ainsi, le fichier original n'est pas touché.

    (voici le premier lien trouvé sur Google pour t'illustrer la manière de faire https://stackoverflow.com/questions/...to-temp-folder)
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingenieur
    Inscrit en
    Avril 2019
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingenieur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    Salut Cavo789,

    Merci pour ta reponse,
    J'y ai pense au fichier online mais c'est juste ingerable. L'equipe a besoin de quelque chose de simple car ils sont pire que moi sur excel et surtout qu'il y a un 2e onglet qui permet d'envoyer des requetes a d'autres services.

    Au depart c'etait gerable car le fichier n'etait utilisee que par une dizaine de personne et donc ca ne prenait pas beaucoup de temps de le personnaliser. Mais maintenant c'est different on est beaucoup trop. Le fichier fonctionne bien sinon.

    De ce que je comprend je n'ai qu'a remplacer : NouveauClasseur.SaveAs Filename:="C:\...." par NouveauClasseur.SaveAs2 Filename:=tempFolderPath & "\" & Requestform & ".xls

    Ou bien je dit n'importe quoi

    Merci pour votre aide

  5. #5
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 987
    Points
    2 987
    Par défaut
    Il me semble qu'un fichier online serait bien plus simple mais c'est toi qui voit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.SaveAs =  Environ("Temp") & "\UnNomQuelconque.xlsx"
    Cela aura pour résultat de sauver ton fichier dans le dossier temporaire, de cet utilisateur, avec le nom "UnNomQuelconque". Ceci fait; le fichier ayant été sauvé, il pourra être envoyé par email.

    Et toi, derrière, tu auras la tâche ingrate de fusionner tout ça...

    Note: n'aie pas peur de tester; VBA est un langage plutôt simple
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingenieur
    Inscrit en
    Avril 2019
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingenieur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    Salut Cavo789,

    Enorme merci!!! En modifiant un peu pour n'envoyer que l'onglet voulu, ca marche nickel!!

    Derniere question, est il possible de donner un nom au fichier envoyer ?
    En fait, en piece jointe le nom du fichier (juste un onglet dans mon cas) est classeur+num.
    J'aimerais lui donner un nom specifique mais je ne sais pas si c'est possible vu qu'on l'enregistre en tant que fichier temporaire.

    Pour la petite histoire, dans notre cas le fichier online n'est pas possible car les gars n'actualisent pas avant de modifier le fichier et donc ecrasent des donnees que d'autres ont ecrit + le fait qu'ils voyagent souvent en afrique et en asie pour le boulot dans des zones sans reseau du coup pas facile d'y acceder

  7. #7
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 987
    Points
    2 987
    Par défaut Oui bien sûr
    Citation Envoyé par Quiro Voir le message
    Derniere question, est il possible de donner un nom au fichier envoyer ?
    Oui, c'est toi le programmeur, tu fais ce que tu veux

    Ci-dessous pour nommer le fichier en récupérant le nom de ton utilisateur (si "John" est connecté, le fichier se nommera "John.xlsx").

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.SaveAs =  Environ("Temp") & "\" & Environ("Username") & ".xlsx"
    Tu es le patron, tu fais ce que tu veux. C'est pour ça que je disais : n'aie pas peur de tester.

    Environ("Temp") c'est pour récupérer le chemin d'accès vers le dossier temporaire, Environ("Username") c'est pour le nom de l'utilisateur (ainsi chaque fichier que tu reçois aurait un nom différent à chaque fois et tu sais "qui" te l'a envoyé). Tu peux faire ce que tu veux ! Juste coder ce que tu veux comme nom.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ingenieur
    Inscrit en
    Avril 2019
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingenieur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    J'ai essaye et ca ne fonctionne pas. le nom de la PJ est toujours classeur1, classeur 2....

  9. #9
    Membre à l'essai
    Homme Profil pro
    Ingenieur
    Inscrit en
    Avril 2019
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingenieur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    Bonjour a tous,

    J'ai recommencer a bosser sur la question depuis quelques jours mais je n'y arrive toujours pas
    Avez vous d'autres idees svp?

    Merci d'avance

  10. #10
    Membre chevronné Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Points : 1 971
    Points
    1 971
    Par défaut
    Hello,

    La méthode fournie par Cavo, , me semble simple et efficace à mettre en œuvre.
    Pourriez-vous déposer votre code actuel que nous puissions voir ce qui cloche?

    Bav
    Michaël

    Si mon aide/avis vous a été profitable , n'hésitez pas à cliquer sur , ça fait toujours plaisir...
    _________________________________________________________________________________________________________________

    "Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu'il est stupide..."
    Albert Einstein

  11. #11
    Membre à l'essai
    Homme Profil pro
    Ingenieur
    Inscrit en
    Avril 2019
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingenieur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    Merci pour la reponse
    En fait je n'arrive pas a donner le nom que je veux au fichier.
    Je veux que le nom de la feuille a envoyer soit celui de l'onglet.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Sub Mail_essai()
     
    Dim OutApp, OutMail As Object
    Dim subject1, subject2 As String
    Dim Body As String
    Dim DL As Long
    Dim SigString, Signature As String
     
     
    On Error Resume Next
     
        ActiveWorkbook.Save
        ThisWorkbook.Sheets("Request Form").Copy
        Set NouveauClasseur = ActiveWorkbook
        Application.DisplayAlerts = False
        NouveauClasseur.SaveAs = Environ("Temp") & "\" & Environ("username") & ".xlsx"
     
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
     
        subject1 = ActiveSheet.Range("C3").Value 
        subject2 = ActiveSheet.Range("E3").Value 
     
     
        Body = "<font style='font-family: Arial;font-size: 10pt ;" & "' color=#1D5799> " & "Un texte quelconque" & "<br>" & "" & "<br>" & " </span>"
     
        SigString = Environ("appdata") & _
                    "\Microsoft\Signatures\Jean.htm"
     
        If Dir(SigString) <> "" Then
            Signature = GetBoiler(SigString)
        Else
            Signature = ""
        End If
     
        On Error Resume Next
     
        With OutMail
            .To = "Pierre@essai.com"
            .CC = "Jean@essai.com"
            .BCC = ""
            .Subject = subject1 & " - " & subject2
            .BodyFormat = olFormatHTML
            .HTMLBody = Body & "<br>" & Signature
            .Attachments.Add NouveauClasseur.FullName
            .Display
     
        End With
        On Error GoTo 0
     
        Set OutMail = Nothing
        Set OutApp = Nothing
     
        NouveauClasseur.Close
        Application.DisplayAlerts = True
     
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Activer une feuille excel sans l'ouvrir
    Par amiralbhar dans le forum Général VBA
    Réponses: 2
    Dernier message: 22/02/2016, 10h20
  2. Envoyer une feuille excel en corps de message
    Par tophe45300 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/10/2015, 17h33
  3. Réponses: 3
    Dernier message: 04/05/2015, 00h01
  4. [AC-2010] Suppression d'une feuille Excel sans avertissement
    Par _C14_ dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/05/2012, 12h17
  5. Utiliser une feuille Excel sans Excel ?
    Par mosquitout dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 27/05/2007, 19h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo