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 :

boucle while wend


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 9
    Par défaut boucle while wend
    Bonjour à tous
    J’espère qu'il y aura une personne qui saura répondre à mon problème de programmation. Cela faisait plus d'un an que je n'avais pas programmé avec VBA et je sèche un peu la sur ce que l'on me demande. Je décris mon problème de la manière la plus simple : je souhaite automatiser un envois de mail avec outlook, avec un objet et un message différent en fonction des choix faits dans deux cellules.
    à partir d'un fichier excel , où il y figure
    - feuille 1 : sur une même ligne, une adresse mail (destinataire), une adresse mail (en CC), une cellule avec deux choix possible (salarié ou indépendant) et une cellule avec le type de mail (5 choix différents mais cela n'est pas important de le détailler)
    - feuille 2 : selon le choix fait (salarié ou indépendant) et selon le choix fait sur le type de mail (5 choix possibles), il y a un objet qui s'ajoute au mail et un message écrit.

    Donc pour résumer, en cliquant sur un bouton affectée d ela macro ci dessus, je souhaite que mon programme envois, pour chaque ligne, un mail avec le destinataire, le mail CC, un fichier, et SURTOUT un objet + un message variable.
    J'ai déjà réussi a faire cette macro, mais seulement pour une seule ligne ... et j'ai essayer d'inclure une boucle while wend mais cela ne marche pas et je commence à désespérer.

    Merci d'avance pour une éventuelle aide.

    Voici la macro :

    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    Sub Commandbutton1_click()
     
        If MsgBox("Souhaitez-vous envoyer le mail ?", vbYesNo, "Demande de confirmation pour l'envoi du mail") = vbYes Then
     
            Dim Ouvriroutlook As Object
            Dim OuvrirMessage As Object
            Dim AdresseMail As String
            Dim AdresseMAilIA As String
            Dim SalariéSubject1 As String 'toutes ces variables sont les differents objet et message  a inclure 
            Dim SalariéBody1 As String
            Dim SalariéSubject2 As String
            Dim SalariéBody2 As String
            Dim SalariéSubject3 As String
            Dim SalariéBody3 As String
            Dim SalariéSubject4 As String
            Dim SalariéBody4 As String
            Dim SalariéSubject5 As String
            Dim SalariéBody5 As String
            Dim IndépendantSubject1 As String
            Dim IndépendantBody1 As String
            Dim IndépendantSubject2 As String
            Dim IndépendantBody2 As String
            Dim IndépendantSubject4 As String
            Dim IndépendantBody4 As String
            Dim IndépendantSubject5 As String
            Dim IndépendantBody5 As String
            Dim i As Integer
     
            Set Ouvriroutlook = CreateObject("Outlook.Application")
            Set OuvrirMessage = Ouvriroutlook.CreateItem(0)
     
            i = 5
     
            AdresseMail = Worksheets("Tableau").Cells(i, 3)
            AdresseMAilIA = Worksheets("Tableau").Cells(i, 6)
     
            SalariéSubject1 = Worksheets("Annexe").Cells(2, 3)
            SalariéBody1 = Worksheets("Annexe").Cells(2, 4)
            SalariéSubject2 = Worksheets("Annexe").Cells(3, 3)
            SalariéBody2 = Worksheets("Annexe").Cells(3, 4)
            SalariéSubject3 = Worksheets("Annexe").Cells(4, 3)
            SalariéBody3 = Worksheets("Annexe").Cells(4, 4)
            SalariéSubject4 = Worksheets("Annexe").Cells(5, 3)
            SalariéBody4 = Worksheets("Annexe").Cells(5, 4)
            SalariéSubject5 = Worksheets("Annexe").Cells(6, 3)
            SalariéBody5 = Worksheets("Annexe").Cells(6, 4)
            IndependantSubject1 = Worksheets("Annexe").Cells(7, 3)
            IndependantBody1 = Worksheets("Annexe").Cells(7, 4)
            IndependantSubject2 = Worksheets("Annexe").Cells(8, 3)
            IndependantBody2 = Worksheets("Annexe").Cells(8, 4)
            IndependantSubject4 = Worksheets("Annexe").Cells(10, 3)
            IndependantBody4 = Worksheets("Annexe").Cells(10, 4)
            IndependantSubject5 = Worksheets("Annexe").Cells(11, 3)
            IndependantBody5 = Worksheets("Annexe").Cells(11, 4)
     
            While AdresseMail <> ""
     
                    If Statut = "Salarié" And Relance = "Démarrage" Then
     
                        With OuvrirMessage
                         .To = AdresseMail
                         .Subject = SalariéSubject1
                         .CC = AdresseMAilIA
                         .Body = SalariéBody1
                         .Attachments.Add ("C:\Users\bvalleti\Desktop\Florent\ModèleFichedePoste.doc")
                         .Send
                        End With
     
                    Returnreceipt = True
     
     
                    ElseIf Statut = "Salarié" And Relance = "1ère Relance" Then
                        With OuvrirMessage
                        .To = AdresseMail
                        .Subject = SalariéSubject2
                        .CC = AdresseMAilIA
                        .Body = SalariéBody2
                        .Attachments.Add ("C:\Users\bvalleti\Desktop\Florent\ModèleFichedePoste.doc")
                        .Send
     
                        End With
     
                    Returnreceipt = True
     
     
                    ElseIf Statut = "Salarié" And Relance = "2ème Relance" Then
                        With OuvrirMessage
                        .To = AdresseMail
                        .Subject = SalariéSubject3
                        .CC = AdresseMAilIA
                        .Body = SalariéBody3
                        .Attachments.Add ("C:\Users\bvalleti\Desktop\Florent\ModèleFichedePoste.doc")
                        .Send
     
                        End With
     
                    Returnreceipt = True
     
     
                    ElseIf Statut = "Salarié" And Relance = "Changement mission" Then
                        With OuvrirMessage
                        .To = AdresseMail
                        .Subject = SalariéSubject4
                        .CC = AdresseMAilIA
                        .Body = SalariéBody4
                        .Attachments.Add ("C:\Users\bvalleti\Desktop\Florent\ModèleFichedePoste.doc")
                        .Send
     
                        End With
     
                    Returnreceipt = True
     
     
                    ElseIf Statut = "Salarié" And Relance = "Changement mission relance" Then
                        With OuvrirMessage
                        .To = AdresseMail
                        .Subject = SalariéSubject5
                        .CC = AdresseMAilIA
                        .Body = SalariéBody5
                        .Attachments.Add ("C:\Users\bvalleti\Desktop\Florent\ModèleFichedePoste.doc")
                        .Send
     
                        End With
     
                    End If
     
                    i = i + 1   'surligné en jaune ce qui est le problème
     
                Wend
     
            MsgBox "Le mail a bien été envoyé à "
     
        Else
     
        MsgBox ("Les mails n'ont pas été envoyés")
     
        End If
     
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut
    Bonjour,


    Dans un premier temps, merci de mettre les balises CODE sur ton code (le # dans la barre de mise en forme), de façon à ce que ton post soit plus lisible.

    Ensuite :

    Citation Envoyé par bryval Voir le message
    j'ai essayer d'inclure une boucle while wend mais cela ne marche pas et je commence à désespérer.

    Qu'entends-tu par "ça marche pas" ? c'est un peu vague comme message d'erreur ça plante quelquepart ? si oui, sur quelle ligne ?
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 9
    Par défaut
    désolé pour les mises en forme ...
    il me surligne la ligne i=i+1 car "dépassement de capacité" .

    J'ai modifier la déclaration variable i en mettant : dim i as long.

    Mais maintenant c'est une erreur d'incompatibilité de type à la ligne 56 où il me surligne en bleu la variable "adressemail" ... j'ai éssayer de déclarer cette variable sous un autre nom mais cela ne change pas.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    PLusieurs erreurs dans les noms de variables.
    Met Option Explicit en entête de modules et fais Compiler VBAProject dans le menu Débogage
    Tu trouveras les erreurs...

    Ici, ajoute .Text
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AdresseMail = Worksheets("Tableau").Cells(i, 3).Text
    Et j'irais avec une boucle For...Next
    J'ai laissé le code à peu près intact, mais j'aurais eu tendance à le simplifier, mais je manque un peu de temps...

    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    Option Explicit
     
    Sub Commandbutton1_click()
        On Error GoTo Erreur
     
        If MsgBox("Souhaitez-vous envoyer le mail ?", vbYesNo, "Demande de confirmation pour l'envoi du mail") = vbYes Then
     
            Dim Ouvriroutlook As Object
            Dim OuvrirMessage As Object
            Dim AdresseMail As String
            Dim AdresseMAilIA As String
            Dim SalariéSubject1 As String 'toutes ces variables sont les differents objet et message  a inclure
            Dim SalariéBody1 As String
            Dim SalariéSubject2 As String
            Dim SalariéBody2 As String
            Dim SalariéSubject3 As String
            Dim SalariéBody3 As String
            Dim SalariéSubject4 As String
            Dim SalariéBody4 As String
            Dim SalariéSubject5 As String
            Dim SalariéBody5 As String
            Dim IndépendantSubject1 As String
            Dim IndépendantBody1 As String
            Dim IndépendantSubject2 As String
            Dim IndépendantBody2 As String
            Dim IndépendantSubject4 As String
            Dim IndépendantBody4 As String
            Dim IndépendantSubject5 As String
            Dim IndépendantBody5 As String
            Dim Statut As String
            Dim Relance As String
            Dim Returnreceipt As Boolean
            Dim i As Integer, nbLignes As Long
     
            Set Ouvriroutlook = CreateObject("Outlook.Application")
     
            nbLignes = Cells(Rows.Count, "A").End(xlUp).Row
     
     
            SalariéSubject1 = Worksheets("Annexe").Cells(2, 3)
            SalariéBody1 = Worksheets("Annexe").Cells(2, 4)
            SalariéSubject2 = Worksheets("Annexe").Cells(3, 3)
            SalariéBody2 = Worksheets("Annexe").Cells(3, 4)
            SalariéSubject3 = Worksheets("Annexe").Cells(4, 3)
            SalariéBody3 = Worksheets("Annexe").Cells(4, 4)
            SalariéSubject4 = Worksheets("Annexe").Cells(5, 3)
            SalariéBody4 = Worksheets("Annexe").Cells(5, 4)
            SalariéSubject5 = Worksheets("Annexe").Cells(6, 3)
            SalariéBody5 = Worksheets("Annexe").Cells(6, 4)
            IndépendantSubject1 = Worksheets("Annexe").Cells(7, 3)
            IndépendantBody1 = Worksheets("Annexe").Cells(7, 4)
            IndépendantSubject2 = Worksheets("Annexe").Cells(8, 3)
            IndépendantBody2 = Worksheets("Annexe").Cells(8, 4)
            IndépendantSubject4 = Worksheets("Annexe").Cells(10, 3)
            IndépendantBody4 = Worksheets("Annexe").Cells(10, 4)
            IndépendantSubject5 = Worksheets("Annexe").Cells(11, 3)
            IndépendantBody5 = Worksheets("Annexe").Cells(11, 4)
     
            For i = 5 To nbLignes
     
                AdresseMail = Worksheets("Tableau").Cells(i, 3).Text
                AdresseMAilIA = Worksheets("Tableau").Cells(i, 6)
     
     
                Statut = Range("G" & i)
                Relance = Range("H" & i)
                If Statut = "Salarié" And Relance = "Démarrage" Then
     
                    Set OuvrirMessage = Ouvriroutlook.CreateItem(0)
                    With OuvrirMessage
                     .To = AdresseMail
                     .Subject = SalariéSubject1
                     .CC = AdresseMAilIA
                     .Body = SalariéBody1
                     .Attachments.Add ("C:\Book1.xls")
                     .display
    '                     .Send
                    End With
     
                Returnreceipt = True
     
     
                ElseIf Statut = "Salarié" And Relance = "1ère Relance" Then
                    Set OuvrirMessage = Ouvriroutlook.CreateItem(0)
                    With OuvrirMessage
                    .To = AdresseMail
                    .Subject = SalariéSubject2
                    .CC = AdresseMAilIA
                    .Body = SalariéBody2
                     .Attachments.Add ("C:\Book1.xls")
                     .display
    '                     .Send
     
                    End With
     
                Returnreceipt = True
     
     
                ElseIf Statut = "Salarié" And Relance = "2ème Relance" Then
                    Set OuvrirMessage = Ouvriroutlook.CreateItem(0)
                    With OuvrirMessage
                    .To = AdresseMail
                    .Subject = SalariéSubject3
                    .CC = AdresseMAilIA
                    .Body = SalariéBody3
                     .Attachments.Add ("C:\Book1.xls")
                     .display
    '                     .Send
     
                    End With
     
                Returnreceipt = True
     
     
                ElseIf Statut = "Salarié" And Relance = "Changement mission" Then
                    Set OuvrirMessage = Ouvriroutlook.CreateItem(0)
                    With OuvrirMessage
                    .To = AdresseMail
                    .Subject = SalariéSubject4
                    .CC = AdresseMAilIA
                    .Body = SalariéBody4
                     .Attachments.Add ("C:\Book1.xls")
                     .display
    '                     .Send
     
                    End With
     
                Returnreceipt = True
     
     
                ElseIf Statut = "Salarié" And Relance = "Changement mission relance" Then
                    Set OuvrirMessage = Ouvriroutlook.CreateItem(0)
                    With OuvrirMessage
                    .To = AdresseMail
                    .Subject = SalariéSubject5
                    .CC = AdresseMAilIA
                    .Body = SalariéBody5
                     .Attachments.Add ("C:\Book1.xls")
                     .display
    '                     .Send
     
                    End With
     
                End If
     
                Set OuvrirMessage = Nothing
     
            Next
     
            MsgBox "Le mail a bien été envoyé à "
     
           Else
     
           MsgBox ("Les mails n'ont pas été envoyés")
     
           End If
     
        Exit Sub
    Erreur:
        MsgBox Err.Description
     
    End Sub

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 9
    Par défaut
    Pas grave c'est déjà gentil d'avoir répondu et m'avoir donné quelques solutions

    Je voudrais juste te demander, quel est l'objectif de ta ligne 37 ? ça stoppe la boucle for lorsqu'il tombe sur une case vide ?

    j'ai rectifier toutes les petites erreur mais la il me met "variable objet ou variable bloc with non définie , sans me surligner quoique ce soit ...

  6. #6
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut
    Essaye de faire du pas-à-pas, voir où ça plante. Ou bien la macro ne se lance pas du tout ?

    Qu'as-tu modifié ? peut-on voir ton code modifié ?

    Par ailleurs, pour envoyer un mail avec Excel, je crois me souvenir qu'il faut activer la référence pour Outlook. C'est déjà fait ?
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

Discussions similaires

  1. [AC-2000] Sortir d'une boucle while wend
    Par 973thom dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/09/2009, 11h14
  2. chargement du Combo Par sql boucle While wend
    Par r.mehdi dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 09/06/2008, 19h16
  3. Boucle While .. Wend
    Par petibonohm dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 21/02/2008, 17h19
  4. [VBA]Boucle While/Wend interrompue
    Par stéphane_ais2 dans le forum VBA Access
    Réponses: 6
    Dernier message: 29/03/2007, 16h05
  5. Recordset et boucle While...Wend
    Par sbeprod dans le forum Access
    Réponses: 9
    Dernier message: 24/07/2006, 17h48

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