Envoyer un fichier excel

Bonsoir
J’avais dit à FFO que je lui enverrai mon usine à gaz. J’en profite pour solliciter encore de l aide.
Je veux envoyer le classeur XX 000.xlsm à un destinataire. Dans les forum j’ai trouvé de nombreuses macros qui traitent du sujet … j ai tenté…et retenté mais j’ai échoué. Quand je clique sur le bouton 115 de l onglet, le PC mouline un long moment puis bloque excel. je pense que c’est dans la ligne "Set MaMessagerie = CreateObject(« Outlook.Application ») que le problème se crée et je suis obligé de passer par le gestionaire de taches pour fermer excel et reprendre la main.
. Dans le PC il y a la messagerie Outlook et aussi celle installée avec WIN10 « COURRIER ». La macro s’appelle ESSAI_MAIL01.
Si quelqu’un peut m’aider XX 000.xlsm (488,7 Ko)
Merci

Bonjour à toi

J’ai mis dans ton fichier en dessous de ton code une autre macro « Sub ESSAI_MAIL02() »

Il faut que tu la testes

Je n’ai pas Outlook donc ne peux l’essayer avec ton fichier

Il faut avant tout Activer la référence Microsoft Outlook Library comme ceci :

Dans l’éditeur de macro barre de menu en haut choisir Outils/Références

Puis côcher dans la liste « Microsoft Outlook Library »

Puis exécutes la procédure

Fais moi un retour
XX 000.xlsm (465,7 Ko)

Bonjour
La macro plante à la ligne
.Attachments.Add Fichier
Par contre si j’enlève cette ligne le mail part bien mais sans la pièce jointe.
J’ai cherché tte la journée mais je ne trouve pas.
Merci

Bonjour le fil,

@FFO je me permets d’intervenir, car dans ce type de codage « Late binding » il n’y a absolument pas besoin de cocher la référence « Microsoft Outlook Library » :wink:
C’est fait pour pouvoir fonctionner sur n’importe quel poste quand on a des versions différentes

@Morgan, si je ne me trompe pas, j’ai l’impression que vous voulez envoyer le fichier actif via mail, ce n’est pas possible
On envoie en général uniquement une feuille :thinking:

@+

Bonjour à toi
Tu m’apprends quelque chose concernant cette procédure
Il est vrai qu’elle n’est pas toute jeune et qu’à l’époque quand je l’ai récupéré cette référence devait être obligatoirement côchée
N’ayant plus Outlook depuis fort longtemps je n’ai pas eu le loisir de l’éprouver
j’ai au grés des besoins toujours proposé cette procédure avec cette contrainte à des interlocuteurs toujours très satisfait de son comportement et sans la moindre remonté de la sorte

Je n’ai pas donc la possibilité de vérifier tes dires et suis donc obligé de te croire sur parole
Maintenant comme le dit ce veille adage : qui peut le plus peut le moins

Merci pour cette information et ainsi à l’avenir de proposer cette disposition comme une éventualité et non un impératif

Au plaisir

Bonjour

Si le mail sans pièce jointe s’effectue avec ces lignes de code c’est que la procédure fonctionne
Voir donc la partie de commande de la pièce jointe et si tu n’as rien modifié la concernant dans celle que je t’ai fourni voir côté soit du chemin du répertoire et du nom du fichier (existe t’il bien tel que décrit dans la ligne de code de la variable Fichier)
Puis peut être dans les noms des différents répertoires du chemin remplacer les espace par des underscore comme ceci :

au lieu de « M:\ESSAIS\PILE POILS 2104\XX 000.xlsm »
mettre « M:\ESSAIS\PILE_POILS_2104\XX_000.xlsm »

à la fois dans la ligne de la variable Fichier mais aussi dans le nom des différents répertoires construits du chemin

Il m’est arrivé d’avoir à modifier ce type de nom pour faire fonctionner un traitement

C’est à essayer

Sinon voir au niveau de ton fichier à envoyer proprement dit il doit être présent dans le répertoire enregistré avec le nom exacte cité dans la ligne de code avec la même extension (.xlsm)

Fais un enregistrement de celui-ci dans le répertoire ciblé avec le même nom avant l’envoi du mail

J’ai proposé récemment à plusieurs interlocuteurs ce même code avec toujours leur entière satisfaction à la clé
Il doit en être de même pour toi

Je n’ai pas la possibilité de mon côté de l’éprouver n’ayant pas cette application installée sur mon environnement

Je croise les doigts tout de même

Donnes nous des nouvelles

@FFO
Rien de plus simple quant à la preuve de ce que j’avance il suffit d’avoir les bonnes sources :wink:
https://docs.microsoft.com/fr-fr/office/vba/outlook/concepts/getting-started/automating-outlook-from-a-visual-basic-application

Au plaisir d’enrichir tes connaissances :+1:

Merci. J’aurai tout essayé mais sans succès. Quand je lance la macro le sablier apparait et mouline xminutes puis un message apparait MICROSOFT ATTEND LA FIN DE L EXECUTION D UNE ACTION OLE D UNE AUTRE APPLICATION;. Je vais sur le gestionnaire des taches et il n’ y a qu’excel et Explorateur windows.; Je suis sûr du chemin du fichier copié en tant que chemin d’accès. Je suis oblige de passer par le gestionnaire pour fermer excel. Peut être qu’un jour la solution sera trouvée mais merci quand même.XX 000.xlsm (468,5 Ko)

Bonjour
Il ne faut pas baisser les bras !!!
Si tu realises cette opération à la main aucune difficulté ?
Mets un fichier vierges dans le répertoire de cet outil avec ce nom d enregistrement par exemple : test.xlsx
Pour la variable Fichier mets en remplacement de la ligne de code en place celle-ci :

Fichier = Thisworkbook.Path & « \test.xlsx »
Si besoin retapes les guillemets au clavier sans espace accolés à la donnée

Puis reteste

Donnes moi le résultat

Dans l attente de te lire

Puisqu’il ne faut pas baisser les bras je persiste… et je cherche. Avec ta dernière solution la macro plante toujours.
N’étant pas doué je fais des fichier pour faire des essais. Cà n’a peut être rien à voir mais après avoir exécuté la macro si je vais dans Outils je constate que dans les références en ligne 4 Microsoft Office 16.0 Object Library est toujours coché par contre Microsoft Outlook 16.0 Object Library qui était coché a disparu.
excel 1 excel 2

excel 4

Et je n’arrive pas à le faire réapparaitre. Heureusement j’avais une sauvegarde de XX 000

Attention je vois dans ta copie d écran qui montre le bug avec la ligne jaune la ligne de ta variable Fichier n est pas correcte !!!

Avant FONCTIONNEMENT DE SARL.docx il manque un caractère indispensable l antislash

Comme ceci :

" \FONCTIONNEMENT DE SARL.docx "

Il faut le mettre

Corriges et reessaies

Merci FFO, mais ca ne marche pas et Excel reste bloqué. J’ai donc essayé de réfléchir après avoir relu Nonode45. Envoyer un classeur par excel est possible. Quand j’utilise le bouton ENVOYER PAR COURRIER da la barre excel cela fonctionne parfaitement et sans bloquer excel. Je vais donc me résoudre à utiliser ce moyen qui 'n’a qu’un inconvénient: c’est de devoir rentrer l’adresse du destinataire. Ne voulant pas baisser les bras, je vais éplucher le Web pour voir si quelqu"un a trouvé le code de ce bouton.
Si c’est possible c’est fait… si c’est impossible c’est en train de se faire!!!

Bonjour
Tu devrais tester la procédure sur un autre environnement informatique doter de l’application Outlook
Celle-ci doit être ouverte au moment de son exécution
Et ainsi d’être certain de son bon fonctionnement
Si c’est le cas reste à incriminer celui-ci dont l’un des éléments est défectueux et non donc la procédure qui est opérationnelle dans un autre
Cela permettra de cibler ta recherche
Voir donc réinstaller Excel Outlook en espérant plus de succès

Il faut y aller de proche en proche

De tout façon quelque chose ne fonctionne pas correctement et peut engendrer d’autres désordres il serait salutaire de normaliser la situation

Je peux à mon niveau difficilement t’apporter une aide mais de proposer ces pistes

A ta disposition au gré du besoin

Bonjour. Tu as raison Il ne faut pas baisser les bras! J’ai désinstallé Office Pro 2016… je l’ai réinstallé. J’ai reconfiguré OUTLOOK sur une adresse gmail. J’ai mis la macro suivante en fermant outlook et excel
Sub ENVOI_JOURNAL()
Dim ol As New Outlook.Application
Dim olmail As MailItem
Dim CurrFile As String
Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
Destinataire = « min1@canl.nc »
Fichier = « M:\PILE POILS\XX 000.xlsm »
With olmail
.To = « min1@canl.nc »
.Subject = « Envoi Journal » 'le sujet
.Body = « Journee » 'le contenu
.Attachments.Add Fichier
.Send
'On peut switcher entre .send et .display selon que l’on veut envoyer le mail (send) ou seulement le préparer et le vérifier(display)
End With
ol.Quit 'si l’on veut fermer l’application Outlook
ok = True
If ThisWorkbook.Parent.Workbooks.Count > 1 Then ok = False
Application.DisplayAlerts = False
ThisWorkbook.Save
If ok = True Then Application.Quit Else ThisWorkbook.Close

End Sub
Et… ca a marché pour tout le classeur!!! et je ne sais pas pourquoi!! Reste a voir si dans 2 jours elle fonctionnera toujours.
Merci encore

Bonjour
Merci pour ton retour

Ravi que tu es pu résoudre ton blocage

C’est souvent la meilleur des solutions lorsqu’ une procédure censée fonctionner rechigne à te donner satisfaction mais avant peut être vérifier son bon déroulement dans un autre environnement informatique pleinement indépendant du premier
Et si le succès est au rendez vous entreprendre ce que tu viens de réaliser pour finir par sortir de ton impasse

Essaies la solution de NonoDu45 de ne pas côcher la liste de référence
Toujours intéressant de savoir ce qu’il en est
Fais moi un retour sur le sujet

Au plaisir de te lire et donc ta devise maintenant :

NE JAMAIS BAISSER LES BRAS !!!

Bonjour, La solution de NONOdu45 ne fonctionne pas; Il faut que la case soit cochée pour que cela fonctionne.(tout au moins sur mon PC et avec Office Pro 2016)
Je laisse les spécialistes expliquer pourquoi.
Merci pour tout en espérant que tout continue à fonctionner

Bonjour
Merci pour ce retour qui m éclaire sur cette disposition et confirme donc sa nécessité
Donc la liste de référence doit être coché pour le fonctionnement de cette procédure c est la conclusion de ton test
Je capitalise grâce à toi
Merci

Bonjour le fil,

@Morgan,

  1. Je n’ai jamais dis qu’envoyer un classeur entier était impossible, je parlais du classeur actif celui qui contient la macro qui tente d’envoyer…
    Quand on le fait directement d’Excel, que ce passe t’il en réalité, c’est simple une copie est créée et mise en pièce jointe :wink:

  2. Le codage indiqué est du « Early binding » = accès anticipé, il faut donc dans ces conditions cochées la référence Microsoft effectivement

@FFO, il n’y a aucune nécessité à faire ça de la sorte. J’ai développé bon nombre d’outil en « Late binding » et jamais eu de souci. C’est vrai il faut savoir développer ainsi.

Sinon, tant mieux si Morgan n’a pas dans sa boite des version différente d’Office, sinon il aura des erreurs :crazy_face:

Je n’étais que de passage :wink:

Bonjour
Je ne voudrais pas passer pour un emm…La macro ENVOI COURRIER (macrox ci dessous) fonctionne maintenant. Jusqu’à maintenant les courriers restaient dans la boite envoi de outlook. J ai réfléchi et pensé que cela venait peut être du fait que le temps de connexion avec le serveur était long et de ce fait la macro se terminait et « ol.Quit » bloquait Outlook. Je ne sais pas si c’est cela. J’ai rajouté « un timer de 10 secondes ».Maintenant le message part. Mais OUTLOOK ne se ferme toujours pas malgré le « ol.Quit ». Je m’en suis rendu compte en voulant éteindre le PC 2 heures plus tard: « OUTLOOK est en train de se fermer ». . FFO ou NonoDu45 ou querlqu’un d’autre qui a outlook a t il une idée pour fermer Outlook? MerciMacro ENVOI COURRIER.pdf (61,4 Ko)