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 :

Envoi mail avec userform et choix case à option [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2022
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2022
    Messages : 15
    Par défaut Envoi mail avec userform et choix case à option
    Bonsoir à tous,

    j'ai besoin de votre aide .

    j'ai crée un macro pour envoyer des mails , jusqu'à maintenant tout va bien les deux mails ( embauche et périodique s'exécute )

    je souhaite l'améliorer en ajoutant un userform avec deux option à cocher RDV périodique et RDV d'embauche , en cochant l'une des deux et cliquer sur " Mailing"

    le mail doit être afficher :

    on coche RDV périodique : le module mail périodique s'exécute
    on coche RDV d'embauche : le module mail embauche s'exécute
    userform crée avec les 2 case à option= ok

    bouton : listes RDV crée = ok

    puisque je suis débutant je n'arrive pas à relié tous ça .

    ci joint le fichier XLSM.Nom : 12-33-33-94509_6233916bbd734086822894.png
Affichages : 152
Taille : 3,0 Ko
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme bon nombre d'intervenants, je n'ouvre pas les fichiers joints.
    Une bonne explications est largement suffisantes pour vous aider

    on coche RDV périodique : le module mail périodique s'exécute
    on coche RDV d'embauche : le module mail embauche s'exécute
    Je suppose que vous parlez d'exécuter une procédure et pas un module

    Personnellement, j'aurais lancé la procédure au clic sur un bouton et redirigé vers l'une au l'autre procédure suivant la sélection de l'OptionButton mais comme ce n'est pas votre souhait, voici un élément de réponse

    En supposant que les procédures que je nommerai pour l'exemple RecurringAppointment (RDV périodique) et JobAppointment se trouvent dans un module nommé mMailManager (RDV d'embauche), voici le code à placer dans les procédures événementielles Object_Clic du UserForm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub optRecurringAppointment_Click()
      mMailManager.RecurringAppointment
    End Sub
     
    Private Sub optJobAppointment_Click()
      mMailManager.JobAppointment
    End Sub
    Une autre option serait d(avoir une même procédure avec un argument qui définirait le traitement à effectuer "RDV périodique" ou "RDV d'embauche"
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2022
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2022
    Messages : 15
    Par défaut
    merci Philippe,
    Je teste et je tiens au courant.

  4. #4
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2022
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2022
    Messages : 15
    Par défaut
    ça ne fonctionne pas Philippe , par contre je crois que je me suis mal exprimé
    si tu ouvre le fichier tu vas trouver sur le module embauche et périodique une condition pour afficher le mail :
    "If Range("J" & ligne) = "M" Then" ==> je veux enlever cette condition et m'en débarrasser


    cependant , la condition va être différente avec le userform et le bouton de commande

    1- bouton pour ouvrir le userform : listes des RDV
    2- deux case à option relié chacune à un module ( périodique et embauche )
    3- bouton de commande activex ( mailing ) pour afficher le mail si on coche soit embauche ou périodique.

    le problème c'est affecter chaque module à une case à option ensuite déclencher le mail avec la commande activx

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    si tu ouvre le fichier tu vas trouver sur le module embauche et périodique une condition pour afficher le mail :
    Désolé mais je l'ai déjà écrit dans ma première intervention. Je n'ouvre pas les classeurs joints.

    Une bonne explication avec éventuellement en plus s'il le faut une ou deux illustrations de la manière dont sont organisées les données est largement suffisant pour que l'on puisse répondre
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2022
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2022
    Messages : 15
    Par défaut
    voici le code pour le module ( embauche ) :

    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
     Sub mail_envoie_embauche() 'début du programme 'mail_outlook'
     
    Dim OutApp As Object 'Déclaration de l'application objet Outlook
    Dim OutMail As Variant 'Déclaration du mail objet Outlook
     
     
    Set OutMail = CreateObject("Outlook.Application")
    Set OutApp = CreateObject("Outlook.Application")
     
    For ligne = 2 To 30
     
     
      If Range("J" & ligne) = "M" Then
     
    With OutMail.Createitem(olMailItem) 'début de la boucle
     
     
        .SentOnBehalfOfName = "sssss.ssssss@gmail.com"
        .To = Range("i" & ligne) 'champ envoyer à
                                             'ne pas oublier les "" lorsque le texte est écrit 'en dur'
                                             'séparer les adresses mail par un ;
        .CC = "sssss.sssssss@gmail.com; <a href="mailto:xxxxx.hsssss@gmail.com">xxxxx.hsssss@gmail.com</a>" 'champ mail en copie
        .BCC = "" 'champ mail en copie caché
        .Subject = "visite médicale d'embauche" 'champ du sujet du mail
        .Body = "Bonjour Monsieur Madame,"
        .display 'affiche le mail en brouillon dans Outlook, pratique
                 'pour vérifier avant d'envoyer
        '.Send 'envoie directement le mail
        '.Save 'sauvegarde le mail
     
    End With 'fin de la boucle
     
       End If
     
    Next ligne
     
    Set OutMail = Nothing 'nettoie la mémoire en nettoyant les variables
    Set OutApp = Nothing 'nettoie la mémoire en nettoyant les variables
     
    End Sub  'fin du programme
    voici le code bouton de commande ( mailing) ==> problème d'éxécution !!!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CommandButton1_Click()
    If OptionButton3 = True Then
    Call embauche
    End If
    End Sub
    [CODE]

    ci dessous le code pour aficher le userform ( listes de RDV )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub listes_RDV()
    UserForm1.Show
    End Sub

    Nom : Capturejjj.JPG
Affichages : 109
Taille : 47,2 Ko

  7. #7
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2022
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2022
    Messages : 15
    Par défaut
    sayé j'ai trouvé

    pour appeler un module il suffit de changer le "sub" en "function" comme suit et supprimer ce que je n'ai plus besoin en Rouge Gras comme suit :
    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
    Function mail_envoie_embauche()'début du programme 'mail_outlook'
     
    Dim OutApp As Object 'Déclaration de l'application objet Outlook
    Dim OutMail As Variant 'Déclaration du mail objet Outlook
     
     
    Set OutMail = CreateObject("Outlook.Application")
    Set OutApp = CreateObject("Outlook.Application")
     
    For ligne = 2 To 30
     
     
      If Range("J" & ligne) = "M" Then
     
    With OutMail.Createitem(olMailItem) 'début de la boucle
     
     
        .SentOnBehalfOfName = "sssss.ssssss@gmail.com"
        .To = Range("i2") 'champ envoyer à
                                             'ne pas oublier les "" lorsque le texte est écrit 'en dur'
                                             'séparer les adresses mail par un ;
        .CC = "sssss.sssssss@gmail.com; <a href="mailto:xxxxx.hsssss@gmail.com">xxxxx.hsssss@gmail.com</a>" 'champ mail en copie
        .BCC = "" 'champ mail en copie caché
        .Subject = "visite médicale d'embauche" 'champ du sujet du mail
        .Body = "Bonjour Monsieur Madame,"
        .display 'affiche le mail en brouillon dans Outlook, pratique
                 'pour vérifier avant d'envoyer
        '.Send 'envoie directement le mail
        '.Save 'sauvegarde le mail
     
    End With 'fin de la boucle
     
       End If
     
    Next ligne
     
    Set OutMail = Nothing 'nettoie la mémoire en nettoyant les variables
    Set OutApp = Nothing 'nettoie la mémoire en nettoyant les variables
       End Function 'fin du programme
    en suite saisir dans le code de userform comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
     
    Private Sub CommandButton1_Click()
    If OptionButton3 = True Then
    Call mail_envoie_embauche
    Else
    Call mail_envoie_periodique
    End If
    End Sub

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    pour appeler un module il suffit de changer le "sub" en "function"
    Invoquer une procédure Sub ou Function c'est du pareil au même. La seule différence c'est qu'une fonction peut renvoyer une valeur.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2022
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2022
    Messages : 15
    Par défaut
    tu as raison c'est pareil , j'ai saisi SUB ; END SUB et ça fonctionne
    mais d'où vient le soucis alors , peut être que j'ai saisi le nom du module (embauche) que le nom du SUB en lui même ( mail_envoie_embauche )
    mais bon , merci de ta coopération et à bientot

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    mais d'où vient le soucis alors , peut être que j'ai saisi le nom du module (embauche) que le nom du SUB en lui même ( mail_envoie_embauche )
    Absolument,
    Un module ne peut pas avoir le même nom qu'une procédure, il y a ambiguïté. C'est d'ailleurs le message qu'envoie le VBA il me semble

    [EDIT]
    Je ne sais pas si j'avais bien compris mais si le module se nomme "embauche" et la procédure a un nom qui contient le même mot comme dans "mail_envoie_embauche" ce n'est évidemment pas la même chose et donc ce n'est pas là que se situe le problème.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [javamail] envoi mail avec message en pièce jointe
    Par k4eve dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 16/11/2007, 11h17
  2. [VB]Bp envoie mail avec piéce jointe
    Par jm1213 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 17/02/2006, 20h55
  3. [Oracle 10g] Envoi mail avec PJ à une heure donnée
    Par djoule6 dans le forum Oracle
    Réponses: 5
    Dernier message: 25/10/2005, 11h51
  4. Envoi mail avec Outlook accusé de réception
    Par KapoueMan dans le forum Access
    Réponses: 2
    Dernier message: 14/04/2005, 10h41
  5. envoi mail avec piece jointe fichier excel
    Par flogreg dans le forum ASP
    Réponses: 12
    Dernier message: 20/12/2004, 16h02

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