XL 2019 On error et envoi de pièce jointe

david54520

XLDnaute Junior
Bonjour

Ce que je souhaite : via une macro, envoyer message et plusieurs PJ.
Plusieurs essais faits --> tout fonctionne
Mais je souhaite arrêter la procédure si pb avec la PJ 1, ou 2 ou 3 etc

J'ai écrit :
If Sh.Range("f" & i).Value = "" Then GoTo pointsuite1
On Error GoTo pb1
.attachments.Add PJ1
pb1: MsgBox "pb avec PJ1"

pointsuite1:
If Sh.Range("g" & i).Value = "" Then GoTo pointsuite2
On Error GoTo pb2
.attachments.Add PJ2
pb2: MsgBox "pb avec PJ2"

pointsuite2:





or, même s'il n'y a pas d'erreur (par exemple la pièce jointe1 est trouvée et rattachée au mail..... le système va tout même à la balise pb1 et génère donc le message

je dois mal gérer le "on error"...mais je ne trouve pas le bon positionnement
si vous avez des idées, je suis preneur :)

merci !! David
 

TooFatBoy

XLDnaute Barbatruc
le petit pb qui reste :
- la macro passe l'individu 1, tout est ok, mail affiché
- la macro passe l'individu 2, tout est ok, mail affiché
- la macro passe l'individu 3 , ...problème, message, ...mail pour l'individu 3 supprimé, sortie de la procédure

Existe-t-il un bout de code qui permettrait de supprimer TOUS les mails qui sont prêts (dans l'exemple ci dessus je souhaiterai que la macro ferme aussi les mails destinés aux individus 1 et 2.
Dans ta version finale les mails ne seront pas affichés, donc ils ne seront pas "en attente" mais déjà partis.

D'où mes questions pour savoir ce que tu veux réellement obtenir comme fonctionnement.


Le fonctionnement que tu décris ne me semble pas viable.
 
Dernière édition:

david54520

XLDnaute Junior
Salut ToofatBoy

oui, je pensais avoir répondu dans ce que je décrivais en #27, mais je ne suis peut-être pas trés clair ;) . Dis le moi dans ce cas

et puis quand je bosse sur un fichier comme çà.. j'ai des idées qui arrivent (et des des gestions de problèmes) au fur et à mesure que je construis...d'où ma question du jour

a+
 

david54520

XLDnaute Junior
Re toofatboy

Pour le moment ca fonctionne, et j'ai fais pour que les mails s'affichent (pas de Send);
quand je fais tourner, c'est bien ce qui se produit.

mais.. j'ai évoqué une solution de contournement qui finalement sera peut-être plus pertinente que de tout arrêter quand y a un pb de pièces jointe.

Bref : NE CHERCHONS PLUS A FERMER TOUS LES MAILS AFFICHES :rolleyes:
je retourne sur mon "chantier" et j'en dirais plus, plus tard ;)

a+, david
 

david54520

XLDnaute Junior
AAAhhh..j'ai encore un dernier bout de code que je ne connais pas....😢

A la fin du processus décrit tout à l'heure, le système reste bloqué sur les mails crées (en attente de cliquer sur envoyer par l'utilisateur après vérif, car l'utilisateur, méfiant, veut vérifier 😩)

Or je souhaite diffusé un message lorsque tous les mails ont été générés, message qui dit que le boulot est fait

mais....même en tentant d'activer mon classeur, en tentant de sélectionner un onglet...rien n'y fait, il reste sur outlook et ne veut pas revenir sur Excel (sauf bien sûr à prendre la souris et à cliquer dans le fichier et le message de fin s'affiche.....encore faut-il savoir que le boulot est fini)

j'ai tenté d'aller voir sur le Net..je ne trouve rien
Sauf parfois où il est question de module de classe....et là....j'y comprends plus rien 🫣

donc si un de vous à le truc qui permet de faire cette passerelle entre Outlook et excel, je sui preneur

ci dessous le bout de code utilisé pour construire les mails.
et donc après next k, j'ai tenté des trucs...mais donc...pas opérationnels.....du tout
Merci d'avance !!

A+

VB:
    With oMail
    
        .Display
        Set oObjetWord = .GetInspector.WordEditor
        .To = SHO.Range("w" & k).Value
        
  
        If SHO.Range("f" & k).Value = "" Then GoTo pointsuite1
    
         If Dir(PJ1) = "" Then
             MsgBox "pb avec PJ1 concernant " & SHO.Range("aF" & k) & ", " & SHO.Range("p" & k) & Err.Description
             oMail.Delete
             SHte.Range("a" & LTE).Value = "publipostage_OF_CFP"
             SHte.Range("b" & LTE).Value = SHe.Range("p" & k)
             SHte.Range("c" & LTE).Value = SHe.Range("af" & k)
             SHte.Range("d" & LTE).Value = SHe.Range("f1")
             SHte.Range("e" & LTE).Value = SHe.Range("f" & k)
             GoTo SUIVANT
            
            Else
                .attachments.Add PJ1
             End If
            
pointsuite1:

 
 
        .Subject = SHO.Range("d" & k).Value
        Set oObjetWord = .GetInspector.WordEditor
      SHMO.Range("A8:a22").Copy
      
        oObjetWord.Range(0).Paste
    
     'Send si on veut envoyer
    
    Dim dtAujourdhui As String
   dtAujourdhui = Format(Date, "dd mmmm yyyy")

    SHO.Range("N" & k).Value = "Envoyé le " & dtAujourdhui
     SHO.Range("m" & k).Value = "NON"
 
SUIVANT:

    End With


End If

       Set oMail = Nothing: Set oOutlook = Nothing
      

Next k
ThisWorkbook.Activate
SHO.Select


MsgBox "Messages prêts à partir. "
 

TooFatBoy

XLDnaute Barbatruc
Oups...on ne s'était effectivement pas compris
Ok, mais on doit mieux se comprendre avec ceci :
Pour moi il faut, soit un compte rendu de ce qui a été envoyé (comme on a fait dans un autre fil de discussion récemment), soit un compte rendu préalable et la possibilité d'envoyer ou non les mails.

Si effectivement on se comprend mieux, quelle serait ta réponse à cette "proposition" ?
 

david54520

XLDnaute Junior
Ok, mais on doit mieux se comprendre avec ceci :


Si effectivement on se comprend mieux, quelle serait ta réponse à cette "proposition" ?
Le plus simple est que je fasse une description de ce que fait la macro

Mais avant un petit mot de contexte

  • Le fichier est « nourri » par une extraction .xls d’un logiciel pro
  • Chaque ligne est un individu avec un certains nombre de données
  • Par exemple (et simplement) il y a son nom et prénom dans une cellule
  • Cette extraction est copié-collé dans le fichier, dans l’onglet publipostage, à partir de la colonne AA
  • Les colonnes précédentes servent à reprendre ou créer des données nécessaires pour faire tourner la macro – par exemple l’adresse mail de l’individu (qui est juste reprise de l’extraction)
  • L’intitulé des pièces jointes (qui se trouvent à partir de la colonne F) est construite toujours de la même façon (par exemple nom_prenom_recette_tarte.pdf
  • Tous les individus auront les mêmes pièces jointes, mais qui sont personnalisées dans leur intitulé et une partie u contenu de la pièces jointe
  • et à partir de la colonne F se trouve non seulement l’intitulé de la pièce jointe et son chemin. La structure du chemin est toujours la même et varie juste en fonction de l’individu
  • aussi, l’utilisateur aura pris soin de
  • construire son intitulé de la même manière que se qui est réclamé par la macro
  • aura mis les pièces jointes dans un dossier crée au nom de l’individu
  • ainsi, reconstruire un chemin par formule devient assez simple (concatener)
  • enfin il existe un autre onglet avec la trame du corps de mai , aussi personnalisable en fonction de chaque individu
La macro

  • à partir de la première ligne de données jusqu’à la dernière
  • on définit les toutes les variables (dernière ligne, pièce jointe, onglet, etc)
  • dans l’onglet mail on personnalise le mail dans une ou deux cellules
  • on ouvre un mail
  • les destinataires et l’objet du mail sont issues des données présentes dans l’onglet publipostage
  • on va chercher les PJ de l’individu
  • si pas de pb
  • tous les mails se construisent avec le corps du mail issu de l’onglet évoqué tout à l'heure.
  • Les mails s’affichent
  • La date de l’envoi du mail est alors indiqué dans le tableau dans l’onglet publipostage
  • L’utilisateur vérifie, peut rajouter des choses s’il le souhaite
  • Et il clique sur envoyer
  • Si pb de pièce jointe (parce que le nom crée lors de la création ne correspond pas exactement a ce qui été défini comme règle d’écriture de l’intitule – ou chemin erroné)
  • Un message s’affiche informant l’utilisateur d’un pb pour tel ou tel individu et pièce jointe
  • Indique dans un onglet « table erreur »
  • Le nom de l’onglet où la macro a été cherche la pièce jointe (il existe plusieurs onglet de publipostage pour des situations différentes
  • Le nom de la personne
  • Le numéro de ligne qui ne va pas
  • La PJ qui déconne
  • Efface le mail qui était en cours de construction
  • Et la macro continue pour les autres individus selon les descriptif précédent (si pas de pb)
  • Et donc quand tout est passé un message pour l’utilisateur qui lui indique que le boulot est terminé et qui s’il y a eu des messages d’erreur il faut aller voir l’onglet table erreur
  • L’utilisateur doit repérer et réparer les erreurs
  • Il relance la macro qui ne prendra en compte que les individus qui n’ont pas eu le mail envoyé (colonne M, « a envoyer : soit rien et le système doit envoyer, soit NON et le système doit passer à la ligne suivante)


Voilà, j’espère avoir été clair

Tout cela n’est possible bien sûr que par

  • de l’odieux braconnage ;)
  • votre appui:)
A ta disposition pour en recauser.

A+ David
 

Discussions similaires

Réponses
6
Affichages
311

Statistiques des forums

Discussions
313 865
Messages
2 103 078
Membres
108 521
dernier inscrit
manouba