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 :

Macros à la suite pour envoi de mail


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    employé de bureau
    Inscrit en
    Avril 2015
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : employé de bureau

    Informations forums :
    Inscription : Avril 2015
    Messages : 37
    Par défaut Macros à la suite pour envoi de mail
    Bonjour,
    J'ai la macro suivante qui permet d'envoyer un mail automatiquement à une personne à l'ouverture du classeur. Par exemple si la date en case A1 = date du jour la macro envoi un mail à la personne se trouvant en B1. Je voudrais donc faire de même pour les lignes suivantes, c'est à dire si B1= date du jour => envoi de mail ; c'est à dire si c1= date du jour => envoi de mail ainsi de suite. Ces macros doivent s'enchainer, par conséquent j'ai simplement mis à la suite les différentes macros mais j'ai une erreur qui me dit que : Nom ambigue detecté Workbook_open ?
    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
    Private Sub Workbook_Open()
     
    Dim Sh As Worksheet
    Set Sh = ThisWorkbook.Worksheets("CDG")
     
        With Sh
            If CDate(.Range("B2")) = Format(Now, "dd/mm/yyyy") Then
     
                .Range("A5:B5:C5:D5:E5:G5:A6:B6:C6:D6:E6:G6").Select ' la plage de cellules à envoyer
     
     
                With .MailEnvelope
     
                    .Introduction = "Bonjour, merci de relancer le client pour le dossier suivant : "
                    .Item.To = Sh.Range("i6").Value
                    .Item.Subject = " --RELANCE DOCUMENT-- "
                    .Item.Send
     
                End With
            End If
        End With
     
    Set Sh = Nothing
     
    End Sub
     
    Private Sub Workbook_Open()
     
    Dim Sh As Worksheet
    Set Sh = ThisWorkbook.Worksheets("CDG")
     
        With Sh
            If CDate(.Range("B2")) = Format(Now, "dd/mm/yyyy") Then
     
                .Range("A5:B5:C5:D5:E5:G5:A6:B6:C6:D6:E6:G6").Select ' la plage de cellules à envoyer
     
     
                With .MailEnvelope
     
                    .Introduction = "Bonjour, merci de relancer le client pour le dossier suivant : "
                    .Item.To = Sh.Range("i6").Value
                    .Item.Subject = " --RELANCE DOCUMENT-- "
                    .Item.Send
     
                End With
            End If
        End With
     
    Set Sh = Nothing
     
    End Sub
    Comment puis-je faire autrement ?
    merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Bonjour,
    quelque chose du genre

    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
    Private Sub Workbook_Open()
     
    Dim Sh As Worksheet
    Set Sh = ThisWorkbook.Worksheets("CDG")
     
        With Sh
            For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
               If CDate(.Cells(i, 1)) = Format(Now, "dd/mm/yyyy") Then
     
                   .Range("A5:B5:C5:D5:E5:G5:A6:B6:C6:D6:E6:G6").Select ' la plage de cellules à envoyer
     
     
                   With .MailEnvelope
     
                       .Introduction = "Bonjour, merci de relancer le client pour le dossier suivant : "
                       .Item.to = Sh.Range("i6").Value
                       .Item.Subject = " --RELANCE DOCUMENT-- "
                       .Item.Send
     
                   End With
               End If
            Next
        End With
     
    Set Sh = Nothing
     
    End Sub

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    tu ne peux pas avoir deux macro Workbook_Open

    plus généralement, on ne peux pas avoir deux macros portant le même nom (explication simpliste), sinon c'est "ambigu" pour Excel

    il te suffit de faire une boucle.
    admettons que :

    - les dates et noms sont sur la feuille CDG
    - les dates en colonne A
    - les nom en colonne B
    - la plage à envoyer et toujours la même et n'est pas dans les colonnes A et B de la feuille CDG

    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
     
    Private Sub Workbook_Open()
     
    Dim i As Long
    Dim Sh As Worksheet
    Dim Plage As Range
     
    Set Sh = ThisWorkbook.Worksheets("CDG")
    Set Plage = "Ta Plage"
     
        With Sh
            For i = 1 To .Range("A" & Rows.Count).End(xlUp).Row
               If CDate(.Range("A" & i)) = Format(Now, "dd/mm/yyyy") Then
     
                   Plage.Select ' la plage de cellules à envoyer
     
                   With .MailEnvelope
                       .Introduction = "Bonjour, merci de relancer le client pour le dossier suivant : "
                       .Item.to = Sh.Range("B" & i)
                       .Item.Subject = " --RELANCE DOCUMENT-- "
                       .Item.Send
                   End With
               End If
            Next i
        End With
     
    Set Sh = Nothing
     
    End Sub
    tu peux aussi nommer les plages qui contiennent les dates et les nom, pour une meilleur lecture de code
    exemple avec deux plages distinctes

    on aurait pu rassembler date et personnes dans une seule plage, mais c'est à nouveau au détriment de la clarté du 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
     
    Private Sub Workbook_Open()
     
    Dim i As Long
    Dim Sh As Worksheet
    Dim PlageEnvoi As Range
    Dim LesDates As Range
    Dim LesPersonnes As Range
     
    Set Sh = ThisWorkbook.Worksheets("CDG")
    Set PlageEnvoi = Range("Ta Plage à envoyer")
    Set LesDates = Range("Le nom de ta plage")
    Set LesPersonnes = Range("Le nom de ta plage")
     
        With Sh
            For i = 1 To LesDates.Count
               If CDate(LesDates(i)) = Format(Now, "dd/mm/yyyy") Then
     
                   PlageEnvoi.Select ' la plage de cellules à envoyer
     
                   With .MailEnvelope
                       .Introduction = "Bonjour, merci de relancer le client pour le dossier suivant : "
                       .Item.To = LesPersonnes(i)
                       .Item.Subject = " --RELANCE DOCUMENT-- "
                       .Item.Send
                   End With
               End If
            Next i
        End With
     
    Set Sh = Nothing
    Set PlageEnvoi = Nothing
    Set LesDates = Nothing
    Set LesPersonnes = Nothing
     
    End Sub

  4. #4
    Membre averti
    Homme Profil pro
    employé de bureau
    Inscrit en
    Avril 2015
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : employé de bureau

    Informations forums :
    Inscription : Avril 2015
    Messages : 37
    Par défaut
    J'ai fait des essais sans succès, pour être plus clair je vous joins un exemple de fichier : EXEMPLE.xlsm

    Je m'explique, si la date du jour = I6 alors envoyer les cellules A5:B5:C5:A6:B6:C6 à l'adresse mail en H6
    De même si la date du jour = J6 alors envoyer les cellules A5:B5:C5:A6:B6:C6 à l'adresse mail en H6
    et idem pour K6

    Ensuite si la date du jour = I7 alors envoyer les cellules A5:B5:C5:A7:B7:C7 à l'adresse mail en H7
    si la date du jour = J7 alors envoyer les cellules A5:B5:C5:A7:B7:C7 à l'adresse mail en H7
    et ainsi de suite..
    J'espère avoir été clair. merci

  5. #5
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Bonjour,
    quelque chose comme ça
    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
    Private Sub Workbook_Open()
     
    Dim i As Long
    Dim j As Long
    Dim Sh As Worksheet
    Dim Plage As Range
     
    Set Sh = ThisWorkbook.Worksheets("CDG")
        With Sh
            For i = 6 To .Range("A" & Rows.Count).End(xlUp).Row
                For j = 10 To 13
                      If CDate(.Cells(i & j)) = Format(Now, "dd/mm/yyyy") Then
     
                          .Range("A5:B5:C5:A" & i & ":B" & i & ":C" & i).Select
     
                          With .MailEnvelope
                              .Introduction = "Bonjour, merci de relancer le client pour le dossier suivant : "
                              .Item.To = Sh.Cells(i, 8)
                              .Item.Subject = " --RELANCE DOCUMENT-- "
                              .Item.Send
                          End With
                      End If
                Next j
            Next i
        End With
     
    Set Sh = Nothing
     
    End Sub

  6. #6
    Membre averti
    Homme Profil pro
    employé de bureau
    Inscrit en
    Avril 2015
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : employé de bureau

    Informations forums :
    Inscription : Avril 2015
    Messages : 37
    Par défaut
    merci gnain, j'ai essayé ton code sur le fichier que j'ai envoyé mais il ne se passe rien..

  7. #7
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Il y avait une erreur dans le code
    mais attention Format(Now, "dd/mm/yyyy") ne correspond pas au format de tes cellules

    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
    Private Sub Workbook_Open()
     
    Dim i As Long
    Dim j As Long
    Dim Sh As Worksheet
    Dim Plage As Range
     
    Set Sh = ThisWorkbook.Worksheets("CDG")
        With Sh
            For i = 6 To .Range("A" & Rows.Count).End(xlUp).Row
                For j = 10 To 13
                      If CDate(.Cells(i , j)) = Format(Now, "dd/mm/yyyy") Then
     
                          .Range("A5:B5:C5:A" & i & ":B" & i & ":C" & i).Select
     
                          With .MailEnvelope
                              .Introduction = "Bonjour, merci de relancer le client pour le dossier suivant : "
                              .Item.To = Sh.Cells(i, 8)
                              .Item.Subject = " --RELANCE DOCUMENT-- "
                              .Item.Send
                          End With
                      End If
                Next j
            Next i
        End With
     
    Set Sh = Nothing
     
    End Sub

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

Discussions similaires

  1. Macro pour envoi de mail auto selon conditions
    Par soadadrinker dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/06/2013, 00h16
  2. [OL-2007] Macros pour envoi de mail
    Par Lelouche dans le forum Outlook
    Réponses: 8
    Dernier message: 12/04/2013, 16h44
  3. Macro pour envoi de mail
    Par guiles dans le forum VBA Word
    Réponses: 2
    Dernier message: 10/06/2009, 16h37
  4. [MySQL] Parcourir la liste des emails extraits de la base pour envois de mail
    Par Ylias dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/02/2006, 22h34
  5. pb pour envoi de mail
    Par taurus dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 28/11/2005, 09h51

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