Compatibilité VB 2003 et 2010 sur envoi feuille par Outlook

Bonjour,

On m'a installé hier au boulot Office 2010 à la place de mon vieux 2003 ; ce pourrait être cool

Cependant, lorsque je lance cette macro (je précise de ce cool Lermite!) , j'ai ce message :

Les fonctionnalités ne peuvent pas être enregistrées dans des classeurs sans macro :

. Projet VB

Pour enregistrer un fichier avec ces fonctionnalités, cliquez sur non puis sélectionnez un type de fichier prenant en charge les macros dans la liste type de fichier.

Pour continuer à enregistrer en tant que classeur sans macro, cliquez sur Oui

Sur le oui, ça tourne mais c'est assez contraignant d'avoir à exécuter cette manip à chaque fois, puisque le principe est de se facilité la vie

Si je modifie l'extension xls par xlms :

Nom_Fichier = "C:\Tempo.xlsm"

Je beug depuis sur cette ligne :

ActiveWorkbook.SaveAs Nom_Fichier

Est ce qu'une personne bienveillante et sympathique aurait une solution s'il vous plait ?

Ci-joint mon fichier.

Merci par avance.

@ toute......

J'aurai une deuxième question, pour une autre alternative à ces incompatibilités récurentes, mais chaque chose en son temps

25envoi-feuille.zip (8.96 Ko)

Bonjour dasaquit,

Il faut que tu précises l'extension du fichier dans la méthode SaveAs.

Pour enregistrer en xlsm, essaie comme ça :

Nom_Fichier = "C:\Tempo"
ActiveWorkbook.SaveAs Nom_Fichier, xlOpenXMLWorkbookMacroEnabled

ou comme ça :

Nom_Fichier = "C:\Tempo"
ActiveWorkbook.SaveAs Nom_Fichier, 52

Hello !

C'est dur de constater qu'il y a plusieurs solutions lorsque l'on pédale

C'est très gentil de ta part, j'essaie ça demain, car à la maison je suis en version 2000 (on ne rigole pas !)

..... Même les gamins ont 2007 pfou.....

Mais bon, j'avoue que c'est un métier....... grrrrrrrr

Dans tous les cas je te remercie, et te souhaite une bonne soirée.

Bien à toi.

David

Bonjour VBA-new,

C'est cool ça fonctionne en changeant l'extension par "xlsm" et cette ligne :

ActiveWorkbook.SaveAs Nom_Fichier, xlOpenXMLWorkbookMacroEnabled

Je te remercie donc pour ce précieux coup de main et de m'accorder un peu de ton temps

Si je peux me permettre d'abuser une nouvelle fois, sans que cela me presse, je me dis que tout le monde n'a pas le pack Office, et que peut être un jour, j'aurai besoin d'envoyer la feuille active en Pdf ; double avantage puisque non modifiable !

Je me doute que c'est possible, mais pourrais-tu s'il te plait me dire comment ?

Je te remercie par avance, et te souhaite une bonne journée.

@ toute.

Re !

J'ai trouvé pour l'envoi de la feuille active en Pdf, donc si cela peut aider quelqu'un par la suite, voici le code :

Sub Envoyer_Mail_Outlook_Pdf()

Dim ObjOutlook As New Outlook.Application
Dim oBjMail
Dim Nom_Fichier As String
Dim Destinataires As String
Dim Copie As String
Dim Sujet As String
Dim Text As String

'---------------------------------------------------------
    Set ObjOutlook = New Outlook.Application
    Set oBjMail = ObjOutlook.CreateItem(olMailItem)

Destinataires = "coucou@orange.fr"
Copie = "re-coucou@orange.fr"
Sujet = "Pointage hebdo Jean-Pierre"
Text = "Bonjour," & vbCrLf & vbCrLf & _
"Voici mon pointage de cette semaine." & vbCrLf & vbCrLf & _
"Bon week-end." & vbCrLf & vbCrLf & _
"Jean-Pierre"

'---------------------------------------------------------
    ActiveSheet.ExportAsFixedFormat Type:=xlTypexslm, Filename:= _
    ActiveWorkbook.Path & "\" & "Pointage hebdo Jean-Pierre.PDF"
'---------------------------------------------------------
    With oBjMail
      .To = Destinataires
      .CC = Copie
      .Subject = Sujet
      .Body = Text
      .Attachments.Add ActiveWorkbook.Path & "\" & "Pointage hebdo Jean-Pierre.PDF"
      '.Display
      .Send
    End With
'---------------------------------------------------------
    Kill ActiveWorkbook.Path & "\" & "Pointage hebdo Jean-Pierre.PDF"
'---------------------------------------------------------
    'ObjOutlook.Quit
    Set oBjMail = Nothing
    Set ObjOutlook = Nothing
'---------------------------------------------------------
    Range("B1").Select
    ActiveWorkbook.Save
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    MsgBox "A bientôt", , "Envoyé"
    ActiveWorkbook.Close
    Application.Quit

End Sub

Voilà !

Bon week-end, merci, et surtout à bientôt pour de nouvelles aventures sur Excel-Pratique.

David

Je sais, je sais......... mais je ne m'en lasse pas

Mais serait-il possible d'ajouter un onglet, par exemple "Données" qui contiendrait les infos nécessaires à la macro ( destinataire, CC, sujet, texte, ....)

Ce qui me serait utile car je suis obligé avec ce code, de tout paramétrer sur mesure directement sur le code suivant la personne concernée !

Ci-joint mon fichier pour envoi en xlsm et Pdf pour Office 2010.

Merci par avance.

@ toute...

Re !

Est ce que cette solution marcherait à votre avis ?

Je ne peut tester car à la maison --------- Office 2000 et Windows live mail

Si oui, vu que le texte est dans une seule cellule, comment signer avec le prénom de l'utilisateur qui ne sera pas le même à chaque fois ?

Set ObjOutlook = New Outlook.Application
    Set oBjMail = ObjOutlook.CreateItem(olMailItem)

Destinataires = Range("Données!B1").Value
Copie = Range("Données!B2").Value
Sujet = Range("Données!B3").Value
Text = Range("Données!B4").Value

'---------------------------------------------------------
    ActiveSheet.ExportAsFixedFormat Type:=xlTypexslm, Filename:= _
    ActiveWorkbook.Path & "\" & "Pointage hebdo Jean-Pierre.PDF"
'---------------------------------------------------------
    With oBjMail
      .To = Destinataires
      .CC = Copie
      .Subject = Sujet
      .Body = Text
      .Attachments.Add ActiveWorkbook.Path & "\" & "Pointage hebdo Jean-Pierre.PDF"
      '.Display
      .Send
    End With

Sur demande je peut remettre mon fichier en ligne avec cette dernière mise à jour.

A plus............ j'espère !

David alias le roi du monologue

Bonjour David,

C'est bien de se répondre à soi-même, ça prouve que tu cherches !!

En ce qui concerne l'utilisateur, tu peux récupérer le nom d'utilisateur de la session windows.

Tu peux essayer de l'ajouter au corps du texte comme ceci :

Text = Range("Données!B4").Value & vbCrLf & Environ("username")

N'ayant pas outlook à la maison je ne sais pas si ça marche.

NB : Le "vbCrLf" permet de sauter une ligne.

Bonjour,

Je cherche, je cherche, le code est devenu une drogue puis je n'aime pas ce qui tombe tout cuit

Je te remercie de ton attention, c'est très sympa de ta part. Si je comprends bien, tu penses que mon code ci-dessus devrait fonctionner en allant chercher les coordonnées dans l'onglet de référence ?

Par contre pour l'utilisateur ce n'est pas possible car au taf nous ouvrons des cessions du style "FRRMDQU" ; je préfèrerai pouvoir mettre le prénom dans une autre cellule et la coupler à ta ligne :

Text = Range("Données!B4").Value & vbCrLf & Environ("username")

Est ce possible s'il te plait ?

Peut être comme ça :

Text = Range("Données!B4").Value & vbCrLf & Range("Données!B5").Value 

Je n'ai pas non plus Outlook à la maison,.................. c'est frustrant, on aurait presqu'envie de retourner au bureau avec ce temps ... lol

Ci-joint mon fichier retravaillé avec l'onglet données !

@ toute, j'espère et encore merci.

David

Bon eh bien il ne reste plus qu'à tester !!

Notre logique semble bonne !

Attendre lundi.. grrrrrrrr

Je te dis ce que ça donne dans la journée de lundi promis, mais ne vais pas être tranquille d'ici là

Bien à toi ........ et bon week-end

David

Bonjour à vous deux,

Excusez l'incruste mais j'ai aussi une tite idée.. EDIT : en fait..deux

Plutôt que de devoir écrire les données heuu.. dans la feuille Données , pourquoi ne pas mettre toutes les possibilités d'envoi (au fur et à mesure) dans cette feuille et "Forcer" l'utilisateur à cliquer sur la ligne de la bonne adresse.

Faudrait alors mettre les données en colonnes et non en ligne.

Ca reviendrait à faire un simple clic pour envoyer un mail.

A+

EDIT Relisant les postes... et si ton client à Excel 2000 ou 2003 ? y sait plus l'ouvrir !!

Je pense qu'il vaudrait mieux employer... (pas tester)

    ActiveWorkbook.SaveAs Nom_Fichier, FileFormat:=xlExcel8

Et je ne pense pas que tu auras un message, sinon tu dis.

Salut Lermite,

T'inquiètes tu ne t'incrustes pas, bien au contraire tu es toujours le bien venu. C'est beaucoup grâce à toi si j'avance

Alors, je commence par le début ; Je préfèrerai en fait ma solution "Données" car l'idée est de faire gagner du temps sur l'envoi hebdo de pointage. J'ai donc résolu le problème de compatibilité avec l'envoi en Pdf (ta macro détournée en fait )

Concernant le message récurent, VBA-New à résolu le problème avec cette ligne de code en changeant l'extension xls par xlsm ; donc plus de soucis de ce côté ; surtout que maintenant ils envoient du Pdf

En fait l'idée, comme il y aurait pas mal de monde concerné, est d'envoyer un fichier Excel qui, à l'ouverture, à l'aide d'un petit code dans "ThisWorkbook" ouvrira une seule fois par an une Msgbox de plusieurs lignes expliquant quoi faire, et ira sur l'onglet "Données" pour le faire ; ensuite l'utilisateur click sur un bouton qui lui crée les 52 onglets avec les dates des semaines, etc....

(macro déjà développée si ça intéresse quelqu'un!)

Voilà le pourquoi du comment de ce choix ; je t'avais dit que j'étais chiant

A ton avis, ce qui s'est dit avant fonctionne sous 2010 ?

Ah oui, pour info, c'est moi qui ai 2000 à la maison, et qui pleure !

Au taf, j'avais 2003 jusqu'à la semaine dernière ; maintenant ils m'ont installé 2010 ; j'suis perdu

Même mes enfants ont 2007

Bref je ne vais pas tarder à évoluer car je crise !

Si je n'ai pas été assez clair dans mes explications, n'hésites pas.

Je te remercie une nouvelle fois et te dis j'espère à plus tard.

A toute.

David

Re Monsieur Lermite

En te relisant, lundi en arrivant au bureau je teste ta solution et te tiens au courant dans la foulée.

Celle-ci :

ActiveWorkbook.SaveAs Nom_Fichier, FileFormat:=xlExcel8

............ très intéressante

Merci.

@ toute............. louloute

Bonjour vous deux

Voici la mise en forme du code qui fonctionne avec l'onglet "données", y compris la mise en forme du texte, du sujet, de la signature, et du nom fichier ; donc bien pratique si cela concerne plusieurs personne !

Sub Envoyer_Mail_Outlook_Pdf()

Dim ObjOutlook As New Outlook.Application
Dim oBjMail
Dim Nom_Fichier As String
Dim Destinataires As String
Dim Copie As String
Dim Sujet As String
Dim Text As String

'---------------------------------------------------------
    Set ObjOutlook = New Outlook.Application
    Set oBjMail = ObjOutlook.CreateItem(olMailItem)

Destinataires = Range("Données!B1").Value
Copie = Range("Données!B2").Value
Sujet = Range("Données!B3").Value & " " & Range("Données!B7").Value
Text1 = Range("Données!B4").Value
Text2 = Range("Données!B5").Value
Text3 = Range("Données!B6").Value
Text4 = Range("Données!B7").Value 'Signature

'---------------------------------------------------------
    ActiveSheet.ExportAsFixedFormat Type:=xlTypexslm, Filename:= _
    ActiveWorkbook.Path & "\" & "Pointage hebdo " & Range("Données!B7") & "." & "PDF"
'---------------------------------------------------------
    With oBjMail
      .To = Destinataires
      .CC = Copie
      .Subject = Sujet
      .Body = Text1 & vbCrLf & vbCrLf & Text2 & vbCrLf & Text3 & vbCrLf & vbCrLf & Text4
      .Attachments.Add ActiveWorkbook.Path & "\" & "Pointage hebdo " & Range("Données!B7") & "." & "PDF"
      '.Display
      .Send
    End With
'---------------------------------------------------------
    Kill ActiveWorkbook.Path & "\" & "Pointage hebdo " & Range("Données!B7") & "." & "PDF"
'---------------------------------------------------------
    'ObjOutlook.Quit
    Set oBjMail = Nothing
    Set ObjOutlook = Nothing
'---------------------------------------------------------
    ActiveWorkbook.Save
    MsgBox "A bientôt", , "Envoyé"
    ActiveWorkbook.Close
    'Application.Quit

End Sub

En rajoutant une petite macro à l'ouverture dans "ThisWorkbook" dirigeant sur l'onglet données et une MsgBox sur plusieurs lignes expliquant quoi faire c'est le top non ???!!!

Je metterai mon fichier en ligne dans un miment car là il faut que je Taf.......... avant de me faire virer

Lermite, j'ai fait des essais avec ton code car à la maison je tourne sur "2000", je te dirai donc plus tard.

Bonne journée à vous deux, et un grand merci.

@ toute.

David

Re !

Bon alors là je coince de nouveau

Afin de rentrer plusieurs adresses mail séparées par des points virgule, je souhaiterai plutôt renseigner plusieurs cellules dans l'onglet données ; par exemple "destinataires en B1 & B2.

Si je pratique comme cela, ça ne fonctionne pas et bloque sur la ligne "Send :

Destinataires = Range("Données!B1").Value & Range("Données!B2").Value

Est ce que vous auriez une solution à ce problème s'il vous plait ?

Merci.

@ toute......


Pour l'instant voilà où j'en suis avec qqs petites modifs pour parfaire le nom fichier, sujet, etc.... avec nom et prénom utilisateur.

Sub Envoyer_Mail_Outlook_Pdf_Données()

Dim ObjOutlook As New Outlook.Application
Dim oBjMail
Dim Destinataires As String
Dim Copie As String
Dim Sujet As String
Dim Text As String

'---------------------------------------------------------
    Set ObjOutlook = New Outlook.Application
    Set oBjMail = ObjOutlook.CreateItem(olMailItem)

Destinataires = Range("Données!B1").Value
Copie = Range("Données!B2").Value
Sujet = Range("Données!B3").Value & " " & Range("Données!B7").Value & " " & Range("Données!B8").Value
Text1 = Range("Données!B4").Value
Text2 = Range("Données!B5").Value
Text3 = Range("Données!B6").Value
Text4 = Range("Données!B7").Value 'Signature

'---------------------------------------------------------
    ActiveSheet.ExportAsFixedFormat Type:=xlTypexslm, Filename:= _
    ActiveWorkbook.Path & "\" & "Pointage hebdo " & Range("Données!B7") & " " & Range("Données!B8") & "." & "Pdf"
'---------------------------------------------------------
    With oBjMail
      .To = Destinataires
      .CC = Copie
      .Subject = Sujet
      .Body = Text1 & vbCrLf & vbCrLf & Text2 & vbCrLf & Text3 & vbCrLf & vbCrLf & Text4
      .Attachments.Add ActiveWorkbook.Path & "\" & "Pointage hebdo " & Range("Données!B7") & " " & Range("Données!B8") & "." & "Pdf"
      '.Display
      .Send
    End With
'---------------------------------------------------------
    Kill ActiveWorkbook.Path & "\" & "Pointage hebdo " & Range("Données!B7") & " " & Range("Données!B8") & "." & "Pdf"
'---------------------------------------------------------
    'ObjOutlook.Quit
    Set oBjMail = Nothing
    Set ObjOutlook = Nothing
'---------------------------------------------------------
    ActiveWorkbook.Save
    MsgBox "A bientôt", , "Envoyé"
    ActiveWorkbook.Close
    'Application.Quit

End Sub
Destinataires = Range("Données!B1").Value & "," &  Range("Données!B2").Value

Ou si plusieurs..

    With Sheets("Données")
        Destinataires = .[B1] & "," & .[B2]
    End With

Merci Lermite, c'est maintenant réglé, plus que de la mise en forme

Par contre j'ai rectifié la virgule par le point-virgule pour séparer les adresses mail

Destinataires = Range("Données!B1").Value & ";" &  Range("Données!B2").Value

Merci encore à vous deux et au plaisir de vous lire prochainement.

Bonne journée.

David

Ouppsss, et dire que c'est moi qui fait ce tuto !!

LOL

Merci

Rechercher des sujets similaires à "compatibilite 2003 2010 envoi feuille outlook"