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 :

Bug sur Envoi de mail Outlook à partir d'une macro [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut Bug sur Envoi de mail Outlook à partir d'une macro
    Bonjour,

    Après des heures de recherches sur le net, je viens de trouver un fichier Excel composé de 3 onglets et d'un module dont le code est le suivant :
    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
    Option Explicit
     
    Sub envoi_Feuille()
    Dim olapp As Outlook.Application
    Dim malist, Count, Envoi, AdresseRépertoire As Variant
     On Error Resume Next
                '-------Contrôler dans Bisual Basic/Outils/Références/que Microsoft Outlook --,- Object Librairy est bien coché
    Dim adresse(1 To 10)
                '----------------------Création de la liste d'adresses mail contenus de la ligne 2 à 10
    Set malist = Sheets("Feuil1").Range("A2:A10")
    Count = 1
    For Each Envoi In malist
    If Len(Envoi) Then adresse(Count) = Envoi: Count = Count + 1
    Next
                '----------------------Copie de la liste d'adresse dans une cellule vide exemple H1
    [H1] = Array(adresse(1) & "; " & adresse(2) & "; " & _
    adresse(3) & "; " & adresse(4) & "; " & adresse(5) & "; " & adresse(6), adresse(7), adresse(8), adresse(9), adresse(10))
                '-------adresse du répertoire ou sera enregistré le fichier
    AdresseRépertoire = ActiveWorkbook.Path
                '---------------------copie de la feuille à envoyer
    Application.DisplayAlerts = False
    Sheets("Feuil2").Copy
                '---------------------Nom du fichier à envoyer
    ActiveWorkbook.SaveAs AdresseRépertoire & "\" & "Class.xls" ' ou adresse si le nom est dans une cellule  Range("E2").Value & ".xls"
    ActiveWindow.Close
                '---------------------Envoi par mail
    Sheets("Feuil1").Select
    Range("H1").Select
                '---------------------contrôle la validité ou la présence d'adresse mail en H1
    If [H1] Like "*@*" Then
                '---------------------Le mail est envoyé que si y a des adresses feuille 1 en H1
    Do While Not IsEmpty(ActiveCell)
    Dim msg As MailItem
    Set olapp = New Outlook.Application
    Set msg = olapp.CreateItem(olMailItem)
    msg.To = Range("H1").Value 'Adresse de la cellule contenant la liste des adesses mails
                '--------------------Saisir le sujet de l'envoi
    msg.Subject = "Coucou c'est moi "  ' ou saisir le sujet dans une cellule ex. Range("H2").Value
                '---------------------saisie du message
    msg.Body = "Bonjour" & Chr(13) & Chr(13) & "Veuillez trouver ci-joint" & Chr(13) & "copie du dossier" & Chr(13) & Chr(13) & "Cordialement"
                '---------------------ou saisir le message dans des cellules
    'msg.Body = Range("E5").Value & Chr(13) & Chr(13) & Range("E8").Value & Chr(13) & Chr(13)& Range("E10").Value
                '---------------------ou saisir le message dans des cellules
                '---------------------Adresse de la pièce jointe
    msg.Attachments.Add Source:=AdresseRépertoire & "\" & "Class.xls" ' ou adresse si le nom est dans une cellule  Range("E2").Value & ".xls"
    msg.Send
                '---------------------effacement de la liste d'envoi
    [H1].ClearContents
    Loop
    Else
    MsgBox "Aucune adresse valide sélectionnée"
    End If
    Application.ScreenUpdating = True
    End Sub
    Aucune complication pour comprendre ce code, la macro fonctionne correctement mais mon souci est le suivant :

    Lorsque je veux intégrer ces 3 feuilles ainsi que le code dans un autre fichier Excel (ma base de données composée de 15 feuilles renommées autrement que Feuil1, Feuil2, ...., Feuil15) çà bug dans le code.

    Si je renomme également les 3 feuilles du présent classeur (fichier joint) et que je modifie également le nom des feuilles dans le code Vba, çà bug aussi.

    Sinon La feuille 3 a-t-elle une importance primordiale vu qu'elle n'est pas utilisée dans le code ?

    Quelqu'un aurait il une solution à me proposer pour résoudre ce bug ?

    Cordialement.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Ca bugue ? sur quelle ligne ? quel est le message d'erreur ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Dès que je clique sur le bouton "Envoi Mail" qui déclenche la macro : envoi_Feuille(), çà bugue sur la ligne 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sub envoi_Feuille()
    Dim olapp As Outlook.Application
    avec le msg d'erreur suivant :
    Erreur de compilation : Type défini par l'utilisateur non défini.
    Lorsque je contrôle dans Visual Basic/Outils/Références/, Object Librairy est bien coché (j'ai fait une copie écran).

    çà ne fait celà uniquement lorsque je copie le module ainsi que les 3 feuilles dans mon fichier (base de données.xls).
    Si j'utilise le fichier joint au 1er msg, là tout fonctionne.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Tu dois cocher la référence "Microsoft Outlook 11.0 Object Library".
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  5. #5
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Merci et bon W.E

  6. #6
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Re,

    J'ai deux autres soucis dans le code à cet endroit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    '---------------------Nom du fichier à envoyer
    ActiveWorkbook.SaveAs AdresseRépertoire & "\" & "Class.xls"
     ' ou adresse si le nom est dans une cellule  Range("E2").Value & ".xls"
    ActiveWindow.Close
    et celui -ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    '---------------------Adresse de la pièce jointe
    msg.Attachments.Add Source:=AdresseRépertoire & "\" & "Class.xls"
     ' ou adresse si le nom est dans une cellule  Range("E2").Value & ".xls"
    Comment dois je procéder si je mets en E2 (déjà de quelle feuille ?) le nom du fichier à envoyer ?

    J'ai mis ceci mais çà ne fonctionne pas :

    1er code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveWorkbook.SaveAs AdresseRépertoire & "\" & Range("E2").Value & ".xls"
    ActiveWindow.Close
    2eme code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    '---------------------Adresse de la pièce jointe
    msg.Attachments.Add Source:=AdresseRépertoire & "\" & Range("E2").Value & ".xls"


    2eme incompréhension : j'ai modifié le code pour que je puisse envoyer jusquà 150 adresses comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim adresse(1 To 150)
                '----------------------Création de la liste d'adresses mail contenus de la ligne 2 à 151
    Set malist = Sheets("Envoi Mail").Range("A2:A151")
    Count = 1
    For Each Envoi In malist
    If Len(Envoi) Then adresse(Count) = Envoi: Count = Count + 1
    Next
                '----------------------Copie de la liste d'adresse dans une cellule vide exemple H1
    [H1] = Array(adresse(1) & "; " & adresse(2) & "; " & _
    adresse(3) & "; " & adresse(4) & "; " & adresse(5) & "; " & adresse(6), adresse(7), adresse(8), adresse(9), adresse(10))
    Bien que après , adresse(10)), je n'ai pas continué jusqu'à adresse(150)),
    celà fonctionne est ce normal ?


    Merci

  7. #7
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    1er code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveWorkbook.SaveAs AdresseRépertoire & "\" & Range("E2").Value & ".xls"
    ActiveWindow.Close
    2eme code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    '---------------------Adresse de la pièce jointe
    msg.Attachments.Add Source:=AdresseRépertoire & "\" & Range("E2").Value & ".xls
    "
    Ajoute juste avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MsgBox AdresseRépertoire
    MsgBox Range("E2").Value
    Bien que après , adresse(10)), je n'ai pas continué jusqu'à adresse(150)),
    celà fonctionne est ce normal ?
    Qu'est-ce qui ne devrait pas fonctionne ? En tout cas, tu devrais faire une boucle.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  8. #8
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Merci pour les codes
    mais je ne comprends pas comment faire la boucle avec Do puis Loop Until ?
    Si c'est çà je le place où ?

    Merci

  9. #9
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        For i = 1 To 150
            If adresse(i) = "" Then Exit For
            [H1] = [H1] & ";" & adresse(i)
        Next i
        [H1] = Right([H1], Len([H1]) - 1) 'ôte le premier ";"
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  10. #10
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Bonjour Daniel,

    Je te remercie pour tes réponses mais ton code ne va pas en contradiction avec le mien car tu mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If adresse(i) = "" Then Exit
    ce qui signifie que si je n'ai pas d'adresse alors "Sortir" et dans mon code il y a à la fin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Loop
    Else
    MsgBox "Aucune adresse valide sélectionnée"
    End If
    Application.ScreenUpdating = True
    End Sub
    soit un message disant qu'aucune adresse n'a été saisi.


    ______________
    Cordialement

  11. #11
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    ce qui signifie que si je n'ai pas d'adresse alors "Sortir" et dans mon code il y a à la fin
    Non. Seulement,cela signifie "sortir de la boucle quand je trouve la première adresse vide. J'ai supposé que les 150 valeurs n'étaient pas toutes renseignées. S'il n'y en a que 20 de renseignées, alors je sors à la 21e. Pour signaler qu'il n'y a pas d d'adresse renseignée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        If adresse(1) = "" Then MsgBox "Aucune adresse sélectionnée"
        For i = 1 To 150
            If adresse(i) = "" Then Exit For
            [H1] = [H1] & ";" & adresse(i)
        Next i
        [H1] = Right([H1], Len([H1]) - 1) 'ôte le premier ";"
    Note que je n'ai pas écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If adresse(i) = "" Then Exit
    ce qui signifierait "arrêter la macro" mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If adresse(i) = "" Then Exit For
    ce qui signifie "Sortir de la boucle For Next".
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  12. #12
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Ah ! Ok et encore MErci Daniel

    Celà signifie maintenant que je place ton code à la place des lignes 8 à 17
    et que je supprime les lignes 50 et 51

    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
    Option Explicit
     
    Sub envoi_Feuille()
    Dim olapp As Outlook.Application
    Dim malist, Count, Envoi, AdresseRépertoire As Variant
     On Error Resume Next
                '-------Contrôler dans Bisual Basic/Outils/Références/que Microsoft Outlook --,- Object Librairy est bien coché
    Dim adresse(1 To 150)
                '----------------------Création de la liste d'adresses mail contenus de la ligne 2 à 151
    Set malist = Sheets("Feuil1").Range("A2:A151")
    Count = 1
    For Each Envoi In malist
    If Len(Envoi) Then adresse(Count) = Envoi: Count = Count + 1
    Next
                '----------------------Copie de la liste d'adresse dans une cellule vide exemple H1
    [H1] = Array(adresse(1) & "; " & adresse(2) & "; " & _
    adresse(3) & "; " & adresse(4) & "; " & adresse(5) & "; " & adresse(6), adresse(7), adresse(8), adresse(9), adresse(10))
                '-------adresse du répertoire ou sera enregistré le fichier
    AdresseRépertoire = ActiveWorkbook.Path
                '---------------------copie de la feuille à envoyer
    Application.DisplayAlerts = False
    Sheets("Feuil2").Copy
                '---------------------Nom du fichier à envoyer
    ActiveWorkbook.SaveAs AdresseRépertoire & "\" & "Class.xls" ' ou adresse si le nom est dans une cellule  Range("E2").Value & ".xls"
    ActiveWindow.Close
                '---------------------Envoi par mail
    Sheets("Feuil1").Select
    Range("H1").Select
                '---------------------contrôle la validité ou la présence d'adresse mail en H1
    If [H1] Like "*@*" Then
                '---------------------Le mail est envoyé que si y a des adresses feuille 1 en H1
    Do While Not IsEmpty(ActiveCell)
    Dim msg As MailItem
    Set olapp = New Outlook.Application
    Set msg = olapp.CreateItem(olMailItem)
    msg.To = Range("H1").Value 'Adresse de la cellule contenant la liste des adesses mails
                '--------------------Saisir le sujet de l'envoi
    msg.Subject = "Coucou c'est moi "  ' ou saisir le sujet dans une cellule ex. Range("H2").Value
                '---------------------saisie du message
    msg.Body = "Bonjour" & Chr(13) & Chr(13) & "Veuillez trouver ci-joint" & Chr(13) & "copie du dossier" & Chr(13) & Chr(13) & "Cordialement"
                '---------------------ou saisir le message dans des cellules
    'msg.Body = Range("E5").Value & Chr(13) & Chr(13) & Range("E8").Value & Chr(13) & Chr(13)& Range("E10").Value
                '---------------------ou saisir le message dans des cellules
                '---------------------Adresse de la pièce jointe
    msg.Attachments.Add Source:=AdresseRépertoire & "\" & "Class.xls" ' ou adresse si le nom est dans une cellule  Range("E2").Value & ".xls"
    msg.Send
                '---------------------effacement de la liste d'envoi
    [H1].ClearContents
    Loop
    Else
    MsgBox "Aucune adresse valide sélectionnée"
    End If
    Application.ScreenUpdating = True
    End Sub
    comme ceci :
    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
    Option Explicit
     
    Sub envoi_Feuille()
    Dim olapp As Outlook.Application
    Dim malist, Count, Envoi, AdresseRépertoire As Variant
     On Error Resume Next
                '-------Contrôler dans Bisual Basic/Outils/Références/que Microsoft Outlook --,- Object Librairy est bien coché
     If adresse(1) = "" Then MsgBox "Aucune adresse sélectionnée"
        For i = 1 To 150
            If adresse(i) = "" Then Exit For
            [H1] = [H1] & ";" & adresse(i)
        Next i
        [H1] = Right([H1], Len([H1]) - 1) 'ôte le premier ";"
                '-------adresse du répertoire ou sera enregistré le fichier
    AdresseRépertoire = ActiveWorkbook.Path
                '---------------------copie de la feuille à envoyer
    Application.DisplayAlerts = False
    Sheets("Feuil2").Copy
                '---------------------Nom du fichier à envoyer
    ActiveWorkbook.SaveAs AdresseRépertoire & "\" & "Class.xls" ' ou adresse si le nom est dans une cellule  Range("E2").Value & ".xls"
    ActiveWindow.Close
                '---------------------Envoi par mail
    Sheets("Feuil1").Select
    Range("H1").Select
                '---------------------contrôle la validité ou la présence d'adresse mail en H1
    If [H1] Like "*@*" Then
                '---------------------Le mail est envoyé que si y a des adresses feuille 1 en H1
    Do While Not IsEmpty(ActiveCell)
    Dim msg As MailItem
    Set olapp = New Outlook.Application
    Set msg = olapp.CreateItem(olMailItem)
    msg.To = Range("H1").Value 'Adresse de la cellule contenant la liste des adesses mails
                '--------------------Saisir le sujet de l'envoi
    msg.Subject = "Coucou c'est moi "  ' ou saisir le sujet dans une cellule ex. Range("H2").Value
                '---------------------saisie du message
    msg.Body = "Bonjour" & Chr(13) & Chr(13) & "Veuillez trouver ci-joint" & Chr(13) & "copie du dossier" & Chr(13) & Chr(13) & "Cordialement"
                '---------------------ou saisir le message dans des cellules
    'msg.Body = Range("E5").Value & Chr(13) & Chr(13) & Range("E8").Value & Chr(13) & Chr(13)& Range("E10").Value
                '---------------------ou saisir le message dans des cellules
                '---------------------Adresse de la pièce jointe
    msg.Attachments.Add Source:=AdresseRépertoire & "\" & "Class.xls" ' ou adresse si le nom est dans une cellule  Range("E2").Value & ".xls"
    msg.Send
                '---------------------effacement de la liste d'envoi
    [H1].ClearContents
    Loop
    End If
    Application.ScreenUpdating = True
    End Sub

  13. #13
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Pour Daniel,
    Je viens juste de modifier mon commentaire de 10h et quelques, peux tu y jeter un oiel

    Merci beaucoup

  14. #14
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    C'est OK, sauf que je déplacerais plutôt le test de l'arobase comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        For i = 1 To 150
            If adresse(i) = "" Then Exit For
            If adresse(i) Like "*@*" Then [H1] = [H1] & ";" & adresse(i)
        Next i
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  15. #15
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Re,

    plus rien ne fonctionne, as tu essayé le code en entier ?

  16. #16
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Non, comment veux-tu ? Mets le classeur - sans données confidentielles - en PJ.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  17. #17
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Ok voici mon classeur, en fait le bug est ici, la totalité des adresses viennent se coller en H1 mais de la feuille Matrice et non Envoi

    Si tu peux voir aussi sur le bout de code à la fin car sur d'autres macros çà fonctionne tres bien et là çà bugue ! ! ! !

    Sinon où dois je modifier le code pour que le fichier Excel transmis par mail aille se copier sur par ex : D:\Repertoire envoi mail au lieu de se coller sur le bureau ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    rep = MsgBox("Votre @mail a été transmis aux différents destinataires, le " & Date & " à " & Time, vbYes + vbInformation, " Transmission de mail / Application développée par XXXXXXXXX.")
       Select Case MsgBox("Désirez-vous effectuer une autre requête ?", vbYesNo, "Application développée par XXXXXXX C.")
      Case vbYes
           'procédure si click sur Oui
        rep = MsgBox("Veuillez sélectionner une nouvelle requête.", vbYes + vbInformation, "Sélection nouvelle requête / Application développée par XXXXXXXXX.")
       Case vbNo
            'procédure si click sur Non
        Sheets("Accueil").Select
    End Select

  18. #18
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [H1] = Array(adresse(1) & "; " & adresse(2) & "; " & _
    adresse(3) & "; " & adresse(4) & "; " & adresse(5) & "; " & adresse(6), adresse(7), adresse(8), adresse(9), adresse(10))
    Pourquoi es-tu revenu sur cette syntaxe incorrecte ? Tu ne peux pas mettre un array dans une cellule !
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  19. #19
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Quand j'ai copié ton bout de code dans la macro, plus rien ne fonctionner alors j'ai remis le code d'origine mais j'ai dû me tromper quelque part et là je ne m'y retrouve plus.

    Comment dois je procéder ?
    As tu une soluce pour que tout refonctionne ?


  20. #20
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    Sub Envoi_Mail()
    Dim olapp As Outlook.Application
    Dim malist, Count, Envoi, AdresseRépertoire As Variant
     'On Error Resume Next
                '-------Contrôler dans Visual Basic/Outils/Références/que Microsoft Outlook --,- Object Librairy est bien coché
     
     
    Dim Sujet As String
    Dim Corps As String
     
    ' Effacement des doonées sur feuille Matrice Mail
     
    Sheets("Matrice Mail").Select
        Cells.Select
        Application.CutCopyMode = False
        Selection.Delete Shift:=xlUp
        Range("A1").Select
     
     
        'Boucle
     Do
        'Boite de dialogue demandant le sujet du mail
        Sujet = InputBox("Veuillez saisir le sujet de votre @mail :" & Chr$(13) & "ATTENTION : la saisie est obligatoire.", "Sujet")
        'si sujet non saisi alors retour jusqu a saisi
        If Sujet = "" Then
    MsgBox "Vous n'avez pas saisi de sujet." _
     & "La zone est obligatoire", vbExclamation
     End If
     Loop Until Sujet <> ""  'Fin de boucle
     
     
     'Boucle
     Do
     'Boite de dialogue demandant le corps du message
        Corps = InputBox("Veuillez saisir le corps de votre message : " & Chr$(13) & "ATTENTION : la saisie est obligatoire.", "Corps")
      'si Corps non saisi alors retour jusqu a saisi
      If Corps = "" Then
     MsgBox "Vous n'avez pas saisi de texte pour le corps de votre message." _
     & "La zone est obligatoire", vbExclamation
     End If
    Loop Until Corps <> ""  ' Fin de boucle
     
     
     
    Dim adresse(1 To 150)
                '----------------------Création de la liste d'adresses mail contenus de la ligne 2 à 151
    Set malist = Sheets("Envoi Mail").Range("A2:A151")
    Count = 1
    For Each Envoi In malist
    If Len(Envoi) Then adresse(Count) = Envoi: Count = Count + 1
    Next
                '----------------------Copie de la liste d'adresse dans une cellule vide exemple H1
    For i = 1 To 150
        If adresse(i) = "" Then Exit For
        If adresse(i) Like "*@*" Then [H1] = [H1] & ";" & adresse(i)
    Next i            '-------adresse du répertoire ou sera enregistré le fichier
    AdresseRépertoire = ActiveWorkbook.Path
                '---------------------copie de la feuille à envoyer
    Application.DisplayAlerts = False
    Sheets("Matrice Mail").Copy
                '---------------------Nom du fichier à envoyer
    Dim NameXls As String
     
     Do
        'Boite de dialogue demandant le Nom du fichier à envoyer
        NameXls = InputBox("Veuillez saisir le nom du fichier à envoyer :" & Chr$(13) & "ATTENTION : la saisie est obligatoire.", "Nom du fichier à envoyer")
        'si NameXls non saisi alors retour jusqu a saisi
        If NameXls = "" Then
    MsgBox "Vous n'avez pas saisi de nom pour le fichier à envoyer." _
     & "La zone est obligatoire", vbExclamation
     End If
     Loop Until NameXls <> ""
     
     
    'ActiveWorkbook.SaveAs AdresseRépertoire & "\" & "Class.xls" ' ou adresse si le nom est dans une cellule  Range("E2").Value & ".xls"
    'ActiveWindow.Close
    ActiveWorkbook.SaveAs AdresseRépertoire & "\" & NameXls & ".xls"
    ActiveWindow.Close
                '---------------------Envoi par mail
    Sheets("Envoi Mail").Select
    Range("H1").Select
                '---------------------contrôle la validité ou la présence d'adresse mail en H1
    Dim msg As MailItem
    Set olapp = New Outlook.Application
    Set msg = olapp.CreateItem(olMailItem)
    msg.To = Range("H1").Value 'Adresse de la cellule contenant la liste des adesses mails
                '--------------------Saisir le sujet de l'envoi
    'msg.Subject = "Coucou c'est moi "
    ' ou saisir le sujet dans une cellule ex. Range("H2").Value
    'msg.Subject = Range("H2").Value
    msg.Subject = Sujet  'Sujet étant la InputBox
                '---------------------saisie du message
    'msg.Body = "Bonjour" & Chr(13) & Chr(13) & "Veuillez trouver ci-joint" & Chr(13) & "copie du dossier" & Chr(13) & Chr(13) & "Cordialement"
                '---------------------ou saisir le message dans des cellules
    'msg.Body = Range("E5").Value & Chr(13) & Chr(13) & Range("E7").Value & Chr(13) & Chr(13) & Range("E9").Value
                '---------------------ou saisir le message dans InputBox Corps
     msg.Body = Corps
                '---------------------Adresse de la pièce jointe
    'msg.Attachments.Add Source:=AdresseRépertoire & "\" & "Class.xls" ' ou adresse si le nom est dans une cellule  Range("E2").Value & ".xls"
    'msg.Attachments.Add Source:=AdresseRépertoire & "\" & Range("E2").Value & ".xls"
    msg.Attachments.Add Source:=AdresseRépertoire & "\" & NameXls & ".xls"
    msg.Send
                '---------------------effacement de la liste d'envoi
    [H1].ClearContents
    Application.ScreenUpdating = True
     
    [A2:A151].ClearContents
    Range("A1").Select
     
    Sheets("Requete").Select
    Range("A1").Select
    'rep = MsgBox("Votre @mail a été transmis aux différents destinataires, le " & Date & " à " & Time, vbYes + vbInformation, " Transmission de mail / Application développée par XXXXXXXXX.")
    '   Select Case MsgBox("Désirez-vous effectuer une autre requête ?", vbYesNo, "Application développée par XXXXXXX C.")
    '  Case vbYes
           'procédure si click sur Oui
    '    rep = MsgBox("Veuillez sélectionner une nouvelle requête.", vbYes + vbInformation, "Sélection nouvelle requête / Application développée par XXXXXXXXX.")
    '    Case vbNo
            'procédure si click sur Non
    '    Sheets("Accueil").Select
    'End Select
     
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Envoi de mail Outlook à partir d'Excel
    Par Daejung dans le forum VBA Outlook
    Réponses: 8
    Dernier message: 19/12/2008, 23h37
  2. Envoi e-mail outlook avec access
    Par Jacques-Henri dans le forum VBA Access
    Réponses: 4
    Dernier message: 27/11/2007, 20h19
  3. Réponses: 1
    Dernier message: 06/04/2007, 10h40
  4. [mail] Timeout sur envoi de mails en HTML
    Par NorthernLights dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 05/12/2006, 10h35
  5. [VBA-E] pb envois de mail outlook
    Par minoru dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/08/2005, 19h42

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