Gestion des erreurs

dam3117

XLDnaute Occasionnel
Sub SendMail_Outlook()
ActiveSheet.Protect Password:="DAM", DrawingObjects:=True, Contents:=True, Scenarios:= _
False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True
ActiveWorkbook.Save

Range("a5").Select
ActiveWorkbook.Save
'Avant de lancer cette macro, Dans l'éditeur VBA: Faire Menu / Tools / Reference / Cocher "Microsoft Outlook Library"
'Il est possible de vérifier avant l'exécution de la macro si la référence est activée ou non, et de l'activer si ce n'est pas le cas
ActiveWorkbook.Activate

Dim Ol As New Outlook.Application
Dim Olmail As MailItem
Dim CurrFile As String
Dim adr, body, bodyvierge As String
Dim nomfi, nomfii As String
Dim nomfb, nomfbb As String

nomfi = Format(Cells(2, 12), "ddmmyyyy") & "-FI-" & Cells(5, 1)
nomfb = Format(Cells(2, 12), "ddmmyyyy") & "-FB-" & Cells(5, 1)
nomfbb = ThisWorkbook.Path & "\FICHES FB\" & nomfb & ".xls"
nomfii = ThisWorkbook.Path & "\FICHES FI\" & nomfi & ".xls"
'nomfii = "\\svr-ccibco4\dossier-bv\PROJET BASE\FICHES FI\" & nomfi & ".xls"

If Range("C5") = "XXX" Then adr = "XX@p.com"
If Range("C5") = "YYY" Then adr = "JJ@a.com"
If Range("C5") = "ZZZ" Then adr = "ww@hh.com"
If Range("C5") = "WWW" Then adr = "zzzzzz@h.com"

body = "Bonjour,"
bodyvierge = "Bonjour vierge »

Set Ol = New Outlook.Application
Set Olmail = Ol.CreateItem(olMailItem)
With Olmail
.To = adr & ";" & Range("c2")

.BCC = "compte rendu agreage"
.Subject = "Rapport(s) du " & Range("l2") & " concernant le navire " & Range("a5")
If Range("c2") <> "" Then .body = body
If Range("c2") = "" Then .body = bodyvierge

On Error Resume Next
.Attachments.Add nomfbb
On Error Resume Next
.Attachments.Add nomfii
.Attachments.Add ActiveWorkbook.FullName
.Display
'.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
ActiveWindow.SelectedSheets.PrintOut copies:=2, Collate:=True

On Error GoTo SUITE1

Workbooks.Open Filename:= _
nomfii

ActiveWindow.SelectedSheets.PrintOut copies:=2, Collate:=True
ActiveWorkbook.Close True
ActiveWorkbook.Close True

SUITE1:
If Err.Number = 1004 Then

ActiveWorkbook.Close True

Else
Workbooks.Open Filename:= _
nomfbb
ActiveWindow.SelectedSheets.PrintOut copies:=3, Collate:=True

ActiveWorkbook.Close True

Exit Sub
End If

ActiveWorkbook.Close True
ActiveWorkbook.Close True


End Sub

Bonjour le forum,

Je souhaite envoyer un mail avec 1 ou 2 ou 3 pièce(s) jointe(s) juste que la pas de soucis!!!
ensuite pour l'impression de la ou des pièces jointes:
- pour la jointe ActiveWorkbook.FullName pas de soucis!!!
- pour les fichiers nomfii et nomfbb ma macro me génère une erreur 1004 si la pièce est inexistante!

en resumé
pièces jointes ActiveWorkbook.FullName + nomfii + nomfbb => impression OK
pièces jointes ActiveWorkbook.FullName => erreur 1004
pièces jointes ActiveWorkbook.FullName + nomfii => erreur 1004
pièces jointes ActiveWorkbook.FullName + nomfbb => erreur 1004

Donc je cherche une solution pour la gestion des erreurs du style pas de nomfii on cherche nomfbb et si pas de nomfbb non plus on imprime ActiveWorkbook.FullName et on le ferme.

j'ai pensai "goto suite:" mais toujours des erreur 1004.
Merci de votre aide
dam
 

Roland_M

XLDnaute Barbatruc
Re : Gestion des erreurs

bonjour,

il faut vérifier tous les noms avec le chemin complet !
car il doit manqué qq chose du genre \ ou des caractères invalides !?

pour cela il faut utiliser MsgBox exemple
MsgBox ActiveWorkbook.FullName & nomfii & nomfbb
bien entendu, cela, après que ces variables soient initialisées entièrement !

autre chose ! ici Dim il y a erreur !
Dim adr, body, bodyvierge As String
Dim nomfi, nomfii As String
Dim nomfb, nomfbb As String

il faut répéter as string à chaque var !!!
Dim adr As String, body As String, bodyvierge As String
Dim nomfi As String, nomfii As String
Dim nomfb As String, nomfbb As String

ici :
If Range("C5") = "XXX" Then adr = "XX@p.com"
If Range("C5") = "YYY" Then adr = "JJ@a.com"
If Range("C5") = "ZZZ" Then adr = "ww@hh.com"
If Range("C5") = "WWW" Then adr = "zzzzzz@h.com"

voir:
Select Case Range("C5")
Case "XXX": adr = "XX@p.com"
Case "YYY": adr = "JJ@a.com"
Case "ZZZ": adr = "ww@hh.com"
Case "WWW": adr = "zzzzzz@h.com"
End Select
 

Roland_M

XLDnaute Barbatruc
Re : Gestion des erreurs

re

à essayer !?
je n'ai pas analysé ce que tu cherches à faire !
j'ai fais au plus simple pour toi voir un peu la procédure à suivre !
il y a d'autres moyens pour tester un nom de fichier et chemin si valide
avec CreateObject("Scripting.FileSystemObject") mais c'est autre chose !

Code:
Sub SendMail_Outlook()
ActiveSheet.Protect Password:="DAM", DrawingObjects:=True, Contents:=True, Scenarios:= _
False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True

'Avant de lancer cette macro, Dans l'éditeur VBA: Faire Menu / Tools / Reference / Cocher "Microsoft Outlook Library"
'Il est possible de vérifier avant l'exécution de la macro si la référence est activée ou non, et de l'activer si ce n'est pas le cas

Range("A5").Select
ActiveWorkbook.Save

Dim Ol As New Outlook.Application
Dim Olmail As MailItem
Dim CurrFile As String
Dim adr As String, body As String, bodyvierge As String
Dim nomfi As String, nomfii As String
Dim nomfb As String, nomfbb As String

nomfi = Format(Cells(2, 12), "ddmmyyyy") & "-FI-" & Cells(5, 1)
nomfb = Format(Cells(2, 12), "ddmmyyyy") & "-FB-" & Cells(5, 1)
nomfbb = ThisWorkbook.Path & "\FICHES FB\" & nomfb & ".xls"
nomfii = ThisWorkbook.Path & "\FICHES FI\" & nomfi & ".xls"

'nomfii = "\\svr-ccibco4\dossier-bv\PROJET BASE\FICHES FI\" & nomfi & ".xls"

Select Case Range("C5")
  Case "XXX": adr = "XX@p.com"
  Case "YYY": adr = "JJ@a.com"
  Case "ZZZ": adr = "ww@hh.com"
  Case "WWW": adr = "zzzzzz@h.com"
End Select

body = "Bonjour,"
bodyvierge = "Bonjour vierge »"

Set Ol = New Outlook.Application
Set Olmail = Ol.CreateItem(olMailItem)

On Error Resume Next: Err.Clear
With Olmail
 .To = adr & ";" & Range("c2")
 .BCC = "compte rendu agreage"
 .Subject = "Rapport(s) du " & Range("l2") & " concernant le navire " & Range("A5")
  If Range("c2") > "" Then .body = body Else .body = bodyvierge
 .Attachments.Add nomfbb
 .Attachments.Add nomfii
 .Attachments.Add ActiveWorkbook.FullName
 .Display
'.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

'pas de nomfii on cherche nomfbb
'pas de nomfbb non plus on imprime ActiveWorkbook.FullName et on le ferme.
On Error Resume Next
Err.Clear: Workbooks.Open Filename:=nomfii
If Err = 0 Then '1'nomfii
   ActiveWindow.SelectedSheets.PrintOut copies:=2, Collate:=True: ActiveWorkbook.Close True
Else '2'nomfbb
   Err.Clear: Workbooks.Open Filename:=nomfbb
   If Err = 0 Then
      ActiveWindow.SelectedSheets.PrintOut copies:=3, Collate:=True: ActiveWorkbook.Close True
   Else '3'ActiveWorkbook.FullName
      ActiveWindow.SelectedSheets.PrintOut copies:=2, Collate:=True: ActiveWorkbook.Close True
End If
End Sub
 

dam3117

XLDnaute Occasionnel
Re : Gestion des erreurs

Re roland,
Pour faire simple:
j'ai une feuille d’agréage (ou se trouve la macro) "ActiveWorkbook.FullName" à partir de cette derniere je crée ou pas une feuille une feuille nomfii ou et une feuille nomfbb que je transmets par mail et je veux imprimer ma ou mes pièces jointes;
les possibilités sont:
- feuille d' agréage seule
- feuille d' agréage + NOMFII
- feuille d' agréage + NOMFbb
- feuille d' agréage + NOMFII + NOMFBB
Voila le résume
merci
 

dam3117

XLDnaute Occasionnel
Re : Gestion des erreurs

Re roland,
Pour faire simple:
j'ai une feuille d’agréage (ou se trouve la macro) "ActiveWorkbook.FullName" à partir de cette derniere je crée ou pas une feuille une feuille nomfii ou et une feuille nomfbb que je transmets par mail et je veux imprimer ma ou mes pièces jointes;
les possibilités sont:
- feuille d' agréage seule
- feuille d' agréage + NOMFII
- feuille d' agréage + NOMFbb
- feuille d' agréage + NOMFII + NOMFBB
Voila le résume
merci
 

Roland_M

XLDnaute Barbatruc
Re : Gestion des erreurs

re

alors si j'ai bien compris, tu travailles sur une feuille de base "ragréage"
de là tu crées une feuille que tu nommes "nomfii" et ou "nomfbb"
donc quand tu lances la macro, ces feuilles existent déjà ou pas !?

si elles existent,
elles doivent être collées en pièces jointes dans outlook et puis imprimées !
il faut donc simplement tester si ces feuilles existent !
il faut faire une copy des feuilles, ce qui créera un nouveau classeur
qui lui pourra être exploité pour envoi et impression.

car je comprends pas pourquoi Workbooks.Open Filename:=nomf... !?
 

dam3117

XLDnaute Occasionnel
Re : Gestion des erreurs

re,

merci

moi j'ai mis Workbooks.Open Filename:=nomf... pour l'ouvrir, l'imprimer et la refermer, mais par moment il ne peut pas l'ouvrir car elle n'existe pas.
Donc moi au départ c'etait: je tente d'ouvrir nomfii si ok tu l'imprimes, tu la refermes et tu continues la procédure, si elle n’existe pas tu continues en tentant d'ouvrir nomfbb si ok tu l'imprimes, tu la refermes et tu ferme le fichier de base "agréage", si elle n’existe pas tu continues en fermant le fichier de base agréage.

Dans mon projet:
J'ai une base de données à partir de la je crée un fichier nommé feuille d'agréage par jour avec la macro ci-dessus ( ce fichier est systématiquement créé), et tjs à partir de cette même base de données je crée un fichier nomfii ou et nomfbb. Et mon souhait est d'envoyer en pièce jointe le ou les fichier(s) créé le jour en question et de les imprimer.
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 188
dernier inscrit
evebar