Relier 2 macros à 1 bouton

Bonjour,

Je suis désespérée...

Je ne suis pas experte avec les VBA. Je vous remercie à l'avance de m'aider à apprendre. Je suis ok pour faire une macro et la relier à 1 bouton. Cependant, j'essaie d'en mettre deux et il y a quelque chose qui cloche.

Ce que je veux: 1ère macro : doit compléter certains champs obligatoires et lorsqu'on clique sur le bouton Envoyer, un avertissement apparait et empêche d'envoyer le fichier. 2e macro: En cliquant sur Envoyer doit envoyer par courriel si les champs sont tous compléter.

Mon problème: Il m'avertit que des champs sont manquants, cependant, ensuite le curseur se met à tourner sans fin et je dois débloquer à partir du gestionnaire des tâches.

Je vous mets mon fichier en pièce jointe pour vous aider à m'aider :)

Et si je pousse ma chance un peu... j'aimerais aussi faire en sorte que lorsqu'on clique sur Envoyer, que cela copie le fichier et l'enregistre sur l'ordi de la personne qui complète le formulaire.

Garf

Bonjour,

Ceci non vérifié;

Sub Controle_et_envoi_mail()
    Application.ScreenUpdating = False
    'on vérifie si toutes les cellules sont remplies
    If ThisWorkbook.Worksheets("Commande").Cells(41, 3).Value = "" Or ThisWorkbook.Worksheets("Commande").Cells(41, 10).Value = "" Or _
        ThisWorkbook.Worksheets("Commande").Cells(42, 3).Value = "" Or ThisWorkbook.Worksheets("Commande").Cells(43, 3).Value = "" Or _
        ThisWorkbook.Worksheets("Commande").Cells(44, 3).Value = "" Or ThisWorkbook.Worksheets("Commande").Cells(44, 10).Value = "" Or _
        ThisWorkbook.Worksheets("Commande").Cells(199, 6).Value = "" Then
        'si c'est incomplet, message d'avertissement et sortie macro
        MsgBox "Veuillez compléter tous les champs obligatoires", vbOKOnly, "ERREUR: champs obligatoires"
        Exit Sub
    Else
        'si tout est rempli alors on envoie le mail
        'ici on demande d'utiliser Outlook comme client de messagerie'
        Dim MaMessagerie As Object
        Dim MonMessage As Object
        Set MaMessagerie = CreateObject("Outlook.application")
        Set MonMessage = MaMesssagerie.createitem(0)

        'ici nous définissons les champs du mail'
        'entre guillemet il faut indiquer les adresses mail'
        MonMessage.to = "cdl@daa-quebec.org"

        'ici nous commençons la rédaction du mail'
        MonMessage.attachments.Add Fichier

        'sujet du mail'
        MonMessage = "Bon de commande"

        'corps du mail'
        contenu = "Bonjour,"
        contenu = contenu & Chr(10) & Chr(13)
        'les caractères Chr indiquent un saut de ligne'
        contenu = contenu & "Veuillez trouver en pièce jointe le Bon de commande" & Chr(10) & Chr(13)
        contenu = contenu & "Cordialement" & Chr(10) & Chr(13)
        MonMessage.body = contenu

        'ici on provoque l'envoi du mail et de la pièce jointe'
        MonMessage.send

        'réinitialisation de la messagerie'
        Set MaMessagerie = Nothing

        'Boite de dialogue qui confirme l'envoi du message et de la pièce jointe'
        MsgBox "Votre mail a bien été envoyé"

        'Enregistrement sur le PC
        ActiveWorkbook.Save
    End If
End Sub

Cdlt

Bonjour Arturo83,

Merci pour ton aide! Cependant, quand je clique sur Envoyer, une fois les champs obligatoires complétés, il n'y a rien qui se passe et le curseur se met à tourner sans fin.

Merci

Garf

Bonjour,

Je ne peux pas faire les tests car je n'utilise pas "Outlook", en revanche la partie de code qui semble donner des soucis se situe après le "Else".

Pour trouver d'où vient le problème, exécutez la macro en pas à pas avec la touche F8 ainsi, vous verrez bien où il se situe.

A mon avis, si la macro piétine, je situerai le problème dans cette zone, mais seule une exécution en pas à pas de la macro (avec F8), vous le confirmera.

        'ici nous définissons les champs du mail'
        'entre guillemet il faut indiquer les adresses mail'
        MonMessage.to = "cdl@daa-quebec.org"

        'ici nous commençons la rédaction du mail'
        MonMessage.attachments.Add Fichier

        'sujet du mail'
        MonMessage = "Bon de commande"

Cdlt

Bonjour Garf96 et Salut @Arturo83
Voici ma proposition.

Dans un 1er temps, je crée la préparation du mail en colonnes N2:N5
Puis je contrôle toutes les zones de l'identification et l'option en F199.
Ensuite je crée la zone A33:J202 en Pdf

Au clic sur Envoyer le fichier pdf sera créé et le mail sera envoyé (dans la macro, mettre l'apostrophe devant .display et l'enlever devant .send)
Cdt
Papy Henri

Re Bonjour,
Une petite erreur dans la macro ExécuterControles, (j'avais oublié les . devant Range) la remplacer par celle-ci:

Sub ExécuterControles()
'Vérification des champs obligatoires

With ThisWorkbook.Worksheets("Commande")
    If .Range("C41").Value = "" Then
        MsgBox "Veuillez renseigner le nom du groupe."
            .Range("C41").Select
        Exit Sub
    ElseIf .Range("J41").Value = "" Then
        MsgBox "Veuillez renseigner le N° du groupe."
            .Range("J41").Select
        Exit Sub
    ElseIf .Range("C42").Value = "" Then
        MsgBox "Veuillez renseigner le nom du responsable du groupe."
            .Range("C42").Select
        Exit Sub
    ElseIf .Range("C43").Value = "" Then
        MsgBox "Veuillez renseigner l'adresse du groupe."
            .Range("C43").Select
        Exit Sub
    ElseIf .Range("C44").Value = "" Then
        MsgBox "Veuillez renseigner le mail du groupe."
            .Range("C44").Select
        Exit Sub
    ElseIf .Range("J44").Value = "" Then
        MsgBox "Veuillez renseigner le téléphone du groupe."
            .Range("J44").Select
        Exit Sub
    ElseIf .Range("F199").Value = "" Then
         MsgBox "Veuillez cocher une des options"
            .Range("F199").Select
       Exit Sub
'Ne pas envoyer tant que toutes les zones de l'dentification ne sont pas renseignées.
    End If
End With
Call ImprimerPDF
End Sub

Voici le fichier

Papy Henri

Rechercher des sujets similaires à "relier macros bouton"