Contourner une application "obligatoire" dans un code VBA d'envoi d'une feuille xls.

SOYA

XLDnaute Occasionnel
Bonjour super-cerveaux,

Bon... Le sujet a été maintes et maintes fois abordé, et tant mieux car c'est ainsi que j'ai trouvé un code VBA d'envoi d'une feuille Excel par Outlook. Les premiers tests ont bien marché MAIS... Ben oui, il y a un mais...

Là où je travaille, lorsque nous voulons enregistrer un document Office, l'application obligatoire de gestion des documents affiche un formulaire d'enregistrement. Notre façon de le contourner est de maintenir la touche MAJ enfoncée pendant que nous cliquons sur Enregistrer sous, puis ensuite (toujours avec la touche MAJ enfoncée), sur Annuler (dans le formulaire de l'appli obligatoire), et enfin nous avons la possibilité d'enregistrer notre fichier là où nous le voulons, sur le C ou ailleurs...

Dans le code d'envoi ci-dessous, j'ai une erreur que le débogage pointe à la ligne que j'ai soulignée. Notre application obligatoire s'affiche et si je fais annuler, ça coince, ça bip, ça fait tout sauf ce que ça doit faire... Comment corriger le code pour contourner cette appli et envoyer directement ma feuille dans Outlook sans passer par "Enregistrer sous" quelque part ?

(J'ajoute pour information que lorsque j'ai adapté le code, tout a bien fonctionné pour mes premiers tests et ensuite patatra ! le problème s'est déclaré).

Sub SendEMail()
Dim NouveauClasseur As Workbook
Dim Destinataire As String
Destinataire = Range("I5").Value
Dim Objetmessage As String
Objetmessage = "Ouverture de dossier"

Application.ScreenUpdating = False

ThisWorkbook.Sheets("Form").Copy
Set NouveauClasseur = ActiveWorkbook
NouveauClasseur.SaveAs Objetmessage
Dim ol As Object, myItem As Object
Set ol = CreateObject("outlook.application")
Set myItem = ol.CreateItem(olMailItem)
myItem.To = Destinataire
myItem.Subject = Objetmessage
myItem.Body = "Bonjour,"
'fichier en cours d'utilisation envoyé en attaché:
myItem.Attachments.Add ActiveWorkbook.FullName
'myItem.Send
myItem.Display
'Set ol = Nothing

Application.DisplayAlerts = False
With NouveauClasseur
.ChangeFileAccess xlReadOnly
Kill .FullName
Application.DisplayAlerts = True
.Close False
End With
End Sub

Un gros merci à tous ceux qui m'accorderont un peu de leur temps.
 
C

Compte Supprimé 979

Guest
Re : Contourner une application "obligatoire" dans un code VBA d'envoi d'une feuille

Bonjour Soya,

Perso, jamais entendu parler d'un application obligatoire de gestion de documents !?

Est-ce que cette appli s'active pour tous les documents ou uniquement pour ceux enregistrés sur le serveur ?

A+
 

SOYA

XLDnaute Occasionnel
Re : Contourner une application "obligatoire" dans un code VBA d'envoi d'une feuille

Bonjour Soya,

Perso, jamais entendu parler d'un application obligatoire de gestion de documents !?

Est-ce que cette appli s'active pour tous les documents ou uniquement pour ceux enregistrés sur le serveur ?

A+


Tous les documents. C'est une application très compartimentée destinée à gérer les documents avec des numéros d'archive. Lorsqu'on fait "Enregistrer" ou "Enregistrer sous" elle est toujours là par défaut, même avec la touche MAJ. Par contre, on peut faire "Annuler", comme je l'ai expliqué, pour accéder à notre disque dur ou une clé USB.
C'est moche...
 
C

Compte Supprimé 979

Guest
Re : Contourner une application "obligatoire" dans un code VBA d'envoi d'une feuille

Re,

Je pense donc que pour pallier à ton problème il faut passer par une impression PDF de ta feuille
Ensuite tu envoies ce fichier PDF via outlook

Est-ce un problème l'envoi d'un fichier non modifiable ?

A moins que tu puisse utiliser l'envoi directe par mail
Code:
Application.Dialogs(xlDialogSendMail).Show

A+
 
Dernière modification par un modérateur:
C

Compte Supprimé 979

Guest
Re : Contourner une application "obligatoire" dans un code VBA d'envoi d'une feuille

Re,

Tu peux essayer ce simple code, attention je suis sous Seven ;)

Il faut remplacer "NomUtilisateur" par ton nom d'utilisateur

Code:
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:="C:\Users\NomUtilisateur\AppData\Local\Temp\Classeur1.pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=False
    Application.Dialogs(xlDialogSendMail).Show

A+
 
Dernière modification par un modérateur:

SOYA

XLDnaute Occasionnel
Re : Contourner une application "obligatoire" dans un code VBA d'envoi d'une feuille

Il faut remplacer "NomUtilisateur" par ton nom d'utilisateur

Code:
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:="C:\Users\NomUtilisateur\AppData\Local\Temp\Classeur1.pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=False
    Application.Dialogs(xlDialogSendMail).Show

A+[/QUOTE]

Heu, justement... C'est là que le bât blesse... Ce fichier sera envoyé à différents utilisateurs qui pratiquent "Ouvrir", "Nouveau document", "Enregistrer", et c'est à peu près tout. Si je dois vraiment utiliser ce chemin, je devrai préparer un fichier par utilisateur avec leur nom prédéfini dans le code etc... Ça coince... On ne peut pas envoyer ça sur le bureau ou dans un répertoire complètement anonyme ?
 
C

Compte Supprimé 979

Guest
Re : Contourner une application "obligatoire" dans un code VBA d'envoi d'une feuille

Re,
Heu, justement... C'est là que le bât blesse... Ce fichier sera envoyé à différents utilisateurs qui pratiquent "Ouvrir", "Nouveau document", "Enregistrer", et c'est à peu près tout. Si je dois vraiment utiliser ce chemin, je devrai préparer un fichier par utilisateur avec leur nom prédéfini dans le code etc... Ça coince... On ne peut pas envoyer ça sur le bureau ou dans un répertoire complètement anonyme ?
Pas pensé à ça ;)

Alors voici le code
VB:
Sub SendEMail()
  Dim olApp As Object, olMail As Object
  Dim CurFile As String
  Dim Destinataire As String
  ' Destinataire
  Destinataire = Range("I5").Value
  ' Déclaration d'une instance Outlook en Late binding
  ' permet la compatibilité en différentes versions office
  Set olApp = CreateObject("outlook.Application")
  Set olMail = olApp.CreateItem(0)
  ' Créer le chemin d'accès et le nom du fichier
  CurFile = ThisWorkbook.Path & "\" & "MaFeuille.Pdf"
  ' Exporter la feuille active en tant que fichier PDF
  ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=CurFile, _
                                  Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
                                  OpenAfterPublish:=False


  With olMail
    .To = Destinataire
    '.CC = "name2@domain2.com" ' Copie du message
    .Subject = "Ouverture de dossier"
    .Body = "Bonjour," & vbLf & vbLf _
      & "Vous trouverez ci-joint le fichier PDF ..."
    .Attachments.Add CurFile
    .Display  '.Send
  End With
  MsgBox "Merci de vérifier que le message apparait dans -messages envoyés- dans votre messagerie OUTLOOK."
  ' Effacer les variables objets
  Set olMail = Nothing
  Set olApp = Nothing
  ' Supprimer le fichier résultant
  Kill CurFile
End Sub

A+
 
Dernière modification par un modérateur:

SOYA

XLDnaute Occasionnel
Re : Contourner une application "obligatoire" dans un code VBA d'envoi d'une feuille

Tu es tout pardonné, ça ne fait pas un pli.

Je m'en vais tester tout ça après ma réunion et te tiendrai au courant. En attendant, un merci vraiment sincère pour ton aide.

À +
 

SOYA

XLDnaute Occasionnel
Re : Contourner une application "obligatoire" dans un code VBA d'envoi d'une feuille

Alors Bruno, tout fonctionne très bien sour Windows 7, mais XP fait la grimace. Il pointe sur :

Set olMail = olApp.CreateItem(0)


Si c'est compliqué à régler, on laisse aller. Si c'est une toute petite virgule à ajouter quelque part, alors je veux bien apprendre :)

Merci !
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 947
Membres
101 849
dernier inscrit
florentMIG