IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Equivalent "On Cancel GoTo"???


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 100
    Par défaut Equivalent "On Cancel GoTo"???
    Bonjour à tous,

    Tout d'abord merci pour ce forum, il m'est d'une grande aide pour mon travail

    Je vous expose mon pb : j'ai réalisé une petite macro qui envoie une feuille par mail avec l'option Sendmail. Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    Private Sub CommandButton1_Click()
     
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '' Cette macro est déclenchée par un clic sur le bouton d'envoi par mail. Elle a pour but d'envoyer  ''
    '' le bon de commande "xxx" du service "xxx" par mail au service Economique.  ''
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     
    ' Déclaration des variables.
    Dim Jour As String ' Jour en cours.
    Dim Mois As String ' Mois en cours.
    Dim Annee As String ' Année en cours.
    Dim NomClasseurTampon As String ' Nom du classeur envoyé par mail, contenant le bon de commande "xxx".
    Dim Destinataires(1) As String ' Liste des destinataires du mail (2 destinataires sont définis pour ce bon de commande).
     
    ' Initialisation des variables.
    If DatePart("d", Date) < 10 Then
        Jour = "0" & DatePart("d", Date)
    Else
        Jour = DatePart("d", Date)
    End If
    If DatePart("m", Date) < 10 Then
        Mois = "0" & DatePart("m", Date)
    Else
        Mois = DatePart("m", Date)
    End If
    Annee = DatePart("yyyy", Date)
    NomClasseurTampon = "BDC xxx - " & ActiveSheet.Name & " - " & Jour & "-" & Mois & "-" & Annee
    Destinataires(0) = "adresse1@truc.com"
    Destinataires(1) = "adresse2@truc.com"
     
    ' Copie de la feuille active (ici "xxx") dans un nouveau classeur.
    ActiveSheet.Copy
     
    ' Renommage du classeur nouvellement créé (classeur tampon) pour envoi par mail.
    ActiveWorkbook.SaveAs Filename:=NomClasseurTampon
     
    ' Envoi du classeur tampon par mail.
    ActiveWorkbook.SendMail _
    Recipients:=Destinataires(), _
    Subject:=NomClasseurTampon
     
    ' Fermeture du classeur tampon, sans sauvegarder.
    ActiveWorkbook.Close SaveChanges:=False
     
    ' Suppression du classeur tampon.
    Kill "C:\Users\PC\Documents\" & NomClasseurTampon & ".xls"
     
    ' Affichage de la date du dernier envoi.
    Worksheets("xxx").Range("K17").Value = Date
     
    ' Message de confirmation d'envoi du mail.
    MsgBox "Le bon de commande """ & ActiveSheet.Name & """ a bien été envoyé au service Economique."
     
    ' Remise à zéro du bon de commande "xxx".
    Sheets("xxx").Range("E9:G34,B3:B4").ClearContents
     
    ' Affichage de la date du dernier envoi sur la feuille "Récapitulatif".
    Sheets("Récapitulatif").Range("F11").Value = Date
    Sheets("Boisson - Alimentaire").Range("A1").Select
     
    End Sub
    Voici ma question : lorsque l'utilisateur clique sur le bouton "Envoyer" de la demande de confirmation d'envoi de mail, tout se passe bien, la msgbox de confirmation s'affiche avec le message "Le bon de commande blabla a bien été envoyé etc.".
    Je voudrais maintenant que lorsque l'utilisateur clique sur "Ne pas envoyer", une autre msgbox s'affiche. Le pb est que je n'arrive pas à détecter le bouton sur lequel l'utilisateur a cliqué (cela me permettrait de réaliser une instruction conditionnelle du type : si clic sur "Envoyer" alors msgbox "confirmation envoi" + "remise à 0", sinon "confirmation non envoi").

    Et pendant que j'y suis, est-il normal qu'avec une messagerie de type windows live mail, les adresses des destinataires s'affichent bien dans la demande de confirmation d'envoi, alors qu'avec Outlook, seul un ";" s'affiche? (les mails sont bien envoyés, cependant).

    Merci de m'éclairer sur ce point, ce n'est pourtant pas faute d'avoir cherché!

    [Edit]

    Je me permets de reformuler ma demande : comment puis-je afficher une msgbox "mail non envoyé" si l'utilisateur clique sur le bouton "ne pas envoyer" après l'exécution de la fonction sendmail?

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 226
    Par défaut
    Hello,

    Ps sûr d'avoir bien compris, mais considère ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CommandButton1_Click()
     
        Dim OuiNon As Range: Set OuiNon = [A1].Value' A adapter
     
        OuiNon.Value = OuiNon.Value + 1
        If OuiNon.Value > 1 Then OuiNon.Value = 0
        ...
        ...
    Tu mets ceci en début de procédure.. il affectera 1 ou 0.

    Peut-être tu peux jouer avec ça.

    Bonne journée.

    Antoniom.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 100
    Par défaut
    Merci Antoniom pour ta réponse, mais moi non plus je ne suis pas sûr de l'avoir bien comprise

    Pour être tout à fait clair, lorsque l'utilisateur clique sur le bouton "envoyer" qui déclenche ma macro, excel envoie automatiquement la feuille active par mail (à qqun, peu importe), avec SendMail.
    Une boîte de dialogue s'affiche alors, demandant la confirmation de l'envoi. L'utilisateur a alors le choix entre cliquer sur "Envoyer", ou "Ne pas Envoyer".
    S'il clique sur "Envoyer", le mail est bien envoyé.
    S'il clique sur "Ne pas envoyer", le mail n'est pas envoyé. Logique.

    Sauf que j'aimerais coder l'affichage de msgboxs en cas d'envoi ou de non-envoi, qui préviendraient l'utilisateur que le mail a bien été envoyé ou non.
    ET JE NE SAIS PAS COMMENT DETECTER SUR QUEL BOUTON A CLIQUE L'UTILISATEUR!

    That's my pb. Une autre idée?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 100
    Par défaut Equivalent "On Cancel GoTo"???
    Excusez-moi de poster tant de messages, mais je souhaitais préciser encore ma question : en gros, je voulais savoir s'il existait en VBA Excel un équivalent de "On Cancel GoTo", ou "On Validate GoTo"...

    Ca pourrait régler mon pb. Je sais qu'à l'exécution d'une fonction, celle-ci possède une variable qui prend les valeurs 0 ou 1 (ou alors 1 ou 2, je ne sais plus), en fonction du résultat de son exécution.

    Récupérer cette variable d'exécution pourrait également m'aider à résoudre ce pb, mais je ne sais pas comment faire!

    Ou alors je ne sais pas, moi, une procédure de vérification de l'envoi d'un mail?

    Comment faire pour savoir si un mail a bien été envoyé? Auquel cas je me contenterai d'une msgbox de confirmation si le mail est bien envoyé...

    Svp, aidez-moi, ça fait plusieurs jours que je cherche une solution, et je ne comprends pas que si peu de gens aient été confrontés à la même problématique...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 100
    Par défaut Pb avec la fonction SendMail
    Bonjour à tous,

    J'ai un petit souci avec la fonction SendMail...
    J'ai développé une petite macro qui envoie automatiquement un classeur excel par mail lorsqu'on clique sur un bouton.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ActiveWorkbook.SendMail _
    Recipients:="blabla@bla.com", _
    Subject:=ActiveWorkbook.Name
    Tout se passe bien, mais à l'exécution, une fenêtre de confirmation d'envoi s'ouvre, proposant à l'utilisateur "d'envoyer" ou de "ne pas envoyer" le mail.

    J'aimerais être en mesure de coder une petite instruction conditionnelle qui afficherait une MsgBox "Message bien envoyé" en cas de clic sur "Envoyer", ou alors une MsgBox "Message non envoyé" si l'on clique sur "Ne pas envoyer"...

    Ca ne me parait pas compliqué comme ça, sauf que je ne parviens pas à différencier ces deux actions (clic sur "Envoyer" ou "Ne pas envoyer").
    Aucune erreur n'est générée en cas de non envoi, donc le faire par gestion des erreurs me semble vain.

    Une idée? Merci d'avance, je lutte depuis des jours pour trouver ça!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 100
    Par défaut
    Personne?

    Ou alors quelqu'un peut-il me dire comment détecter l'ouverture d'une boîte de dialogue?
    Avec le nom de la boîte de dialogue "Outlook Express" qui s'ouvre, je pourrais peut-être résoudre mon pb...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 100
    Par défaut
    J'avance un peu dans ma problématique...

    En fait ce qu'il me faudrait, c'est quelquechose du style :

    If Application.xlDialog(Nom de la fenêtre de dialogue de confirmation d'envoi du mail).Show = False Then MsgBox "Message non envoyé".

    Le problème est que je ne sais pas détecter le nom de la fenêtre active, à savoir une fenêtre Outlook Express avec confirmation d'envoi.

    Une autre solution serait de désactiver l'affichage de cette boîte de dialogue de confirmation et d'en créer une autre à la place, personnalisée, que je pourrais contrôler plus aisément...

    Dur, dur

  8. #8
    Membre éclairé Avatar de Basicnav
    Profil pro
    Inscrit en
    Février 2008
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2008
    Messages : 245
    Par défaut
    Bonjour,
    il y a une réponse, cherche du coté de ClickYes.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 100
    Par défaut
    Merci pour ta réponse.

    J'ai installé ClickYes sur mon poste, mais je n'arrive pas à le faire fonctionner. De toute façon, je dois déployer l'application sur de nombreux postes, donc ça ne me semble pas évident de l'installer partout...

    Mais merci de t'être intéressé à mon pb en tout cas

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo