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 :

[VBA-E] Macro boucle for (erreur 424)


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut [VBA-E] Macro boucle for (erreur 424)
    Bonjour !

    Je suis en train de coder une macro en Vba excel qui aurait pour but de creer plusieurs mails pour plusieurs destinataires.

    Le corps du mail est le même pour chacun seulement j'ai mis des variables pour ce qu'il y a à changer.

    J'ai fait un tableau pour y mettre chaque destinataire et je fais une boucle FOR qui parcours tout le tableau.
    J'aimerais intégrer dans ma boucle une création de mail, cependant il y a une erreur d'exécution 424 à partir du deuxième tour de la boucle.



    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
    ' Declaration des variables
    Dim ol As Object
    
    
    Set ol = CreateObject("Outlook.application")
    Set m1 = ol.CreateItem(olMailItem)
    
    
    Dim olns As Object
    Dim objFolder As Object
    Set olns = ol.GetNamespace("MAPI")
    Dim i
    Tableau = Array("0301", "0306", "0336", "0403", "0427", "0475", "0605", "0615", "0622", "0642", "0656", "0668H", "0668P", "0695", "0751", "0770", "1608", "1625", "1627", "1673", "1690", "1971")
    
    
     
     
     
    ' Declaration des variables qui vont être saisies par l'utilisateur
    periode = InputBox("Mois voulu (AAAA.MM) " & vbCr) '
    periode2 = InputBox("Mois voulu (ex: Feb 2010) " & vbCr)
    J3 = InputBox("Date J+3 (ex: 3th june) " & vbCr)
     
     
     
    
    ' Creation du dossier qui se nommera sous la forme: AAAA.MM ( il s'agit de la variable "periode"
    ' Si le répertoire éxiste déja, il n'y a pas de creation.
                        
    If Not (RepertoireExiste("lien ")) Then
    MkDir "lien"
    End If
     
     
     ' Enregistrement du fichier dans le dossier du mois.
    Workbooks.Open "fichier plat"
    ActiveWorkbook.SaveAs Filename:="fichier plat"
    ActiveWorkbook.Close
     
    
    '___________________________________________________________________________________________________________________________
     ' ouverture du fichier contenant le tableau croisé dynamique
    Workbooks.Open "tcd"
    
     
     
     
    For i = LBound(Tableau) To UBound(Tableau)
    
    
    ' choix du code et actualisation
    Sheets("Full").Select
    ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
    ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
    "Code").CurrentPage = Tableau(i)
    Sheets("Overview").Select
    ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotCache.Refresh
    ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
    "Code").CurrentPage = Tableau(i)
    
    
    
    ' enregistrement du fichier dans un dossier précis
    ActiveWorkbook.SaveAs Filename:="test" & Tableau(i) & ".xls"
    
    
    
    With m1
    ' Sujet, objet du mail
    .Subject =      /\ ERREUR au second tour de la boucle /\
    .Body = 
    .To = Tableau(i)
    ' pièce jointe
    .Attachments.Add "fichier excel"
    ' Sauvegarde du mail dans brouillon (Drafts)
    .Save
    .Close olPromtForSave
    End With
    Set ol = Nothing
    Set MailSendItem = Nothing
    Set olns = Nothing
    
    Next i
    ActiveWorkbook.Close

  2. #2
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    bonjour,

    merci de préciser la ligne en erreur.

    petits commentaires déjà,
    * il est TOUJOURS préférable de définir TOUTES les variables explicitement, y compris ton tableau.
    * I=0 avant la boucle est inutile.
    * Si ton tableau est vide, Lbound ou Ubound vont échouer et planter ton code

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    J'ai édité mon post ci-dessus.

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Points : 617
    Points
    617
    Par défaut
    salut

    qu'est donc, finalement, i ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    "i" c'est pour mon tableau

  6. #6
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Re,

    ceci me parait trèèèèèèèès spécial :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With i
    ' Sujet, objet du mail
    .Subject =      /\ ERREUR au second tour de la boucle /\
    C'est quoi i pour toi ?

    Au vu de ceci
    tout et rien à la fois car un objet email et aussi un indice de boucle !!

    ou alors je n'ai pas compris.

    pour info, ci-dessous un exemple d'envoi d'email via Lotus Notes où tu verras qu'on peut simplement mentionner un tableau de destinataires plutot que de faire une boucle.

    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
    'Envoi d'un mail avec Lotus Notes
    'Subject : sujet du mail
    'Attachment : nom d'une pièce jointe
    'Recipient : adresse e-mail du destinataire principal
    'ccRecipient : destinataire en copie
    'bccRecipient : destinataire en copie invisible
    'BodyText : corps du mail
    'SaveIt : mettre à True pour que le mail soit sauvegardé
    'Password : mot de passe
     
    '' Attention Probleme si SaveIt = True : Erreur au send. Contourner en mettant sender en BCC.
    ' Password ne marche pas. Ligne en commentaire
     
    Public Sub SendNotesMail(ByVal Notes_Dbname As String, ByVal Sender As String, _
                             ByVal Subject As String, ByVal Attachment As String, _
                             ByVal Recipient As String, ByVal CCRecipient As String, _
                             ByVal BCCRecipient As String, ByVal Bodytext As String, _
                             ByVal SaveIt As Boolean, ByVal Password As String)
     
        Dim Maildb As Object      'La base des mails
        Dim UserName As String    'Le nom d'utilisateur
        Dim MailDbName As String  'Le nom de la base des mails
        Dim MailDoc As Object     'Le mail
        Dim AttachME As Object    'L'objet pièce jointe en RTF
        Dim Session As Object     'La session Notes
        Dim EmbedObj As Object    'L'objet incorporé
        Dim Ini_File As String    'Full Name of ini File
        Dim recip()  As String    'Tableau des destinataires
        Dim length   As Long
        Dim idx      As Long
        Dim off_in   As Long
        Dim off_out  As Long
        Dim temp_rec As String
        Dim Start As Long
     
     
     
        'Retrieve Parms from Ini
     
        'Crée une session notes
        Set Session = CreateObject("Notes.NotesSession")
     
        '*** Cette ligne est réservée aux versions 5.x et supérieur : ***
        'Session.Initialize (Password)
     
        'Notes Database Name
        MailDbName = Notes_Dbname
     
        'Ouvre la base des mails
        Set Maildb = Session.GETDATABASE("", MailDbName)
        If Not Maildb.IsOpen Then Maildb.OPENMAIL
     
        'Paramètre le mail à envoyer
     
        'Split recipient list
        recip = Split(Recipient, ",")
        Set MailDoc = Maildb.CREATEDOCUMENT
        MailDoc.Form = "Memo"
        MailDoc.sendto = recip()
        MailDoc.CopyTo = CCRecipient
        MailDoc.BlindCopyTo = BCCRecipient
        MailDoc.Subject = Subject
        MailDoc.Body = Bodytext & " " & Sender
        MailDoc.SAVEMESSAGEONSEND = SaveIt
     
        'Prend en compte les pièces jointes
        If Attachment <> "" Then
            Set AttachME = MailDoc.CREATERICHTEXTITEM("Attachment")
            Set EmbedObj = AttachME.EMBEDOBJECT(1454, "", Attachment, "Attachment")
            '        MailDoc.CREATERICHTEXTITEM ("Attachment")
        End If
     
        'Envoie le mail
        MailDoc.PostedDate = Now()
        MailDoc.SEND 0, recip
     
        Set Maildb = Nothing
        Set MailDoc = Nothing
        Set AttachME = Nothing
        Set Session = Nothing
        Set EmbedObj = Nothing

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    En fait je m'étais trompé, j'avais fait une modification pour mettre une variable pour l'objet email.

    En fait je ne peux creer qu'un seul mail avec le code ci-dessus.
    Et je voudrais en creer 22 différents et que les 22 soient enregistrer dans mes brouillons sur outlook.

    Donc le premier mail se créé et s'enregistre bien, mais le second bloque.

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Points : 617
    Points
    617
    Par défaut
    re...
    1) la précision et le soin s'imposent, lorsque l'on pose une question
    2) lorsque l'on crée un objet avant une boucle et qu'on le supprime à l'intérieur de la boucle (= nothing), je ne vois pas comment on peut ensuite l'invoquer dans les autres itérations de la boucle !
    Cela ne te dit vraiment rien ?
    Réfléchis un peu.

  9. #9
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Citation Envoyé par vanexq Voir le message
    En fait je m'étais trompé, j'avais fait une modification pour mettre une variable pour l'objet email.

    En fait je ne peux creer qu'un seul mail avec le code ci-dessus.
    Et je voudrais en creer 22 différents et que les 22 soient enregistrer dans mes brouillons sur outlook.

    Donc le premier mail se créé et s'enregistre bien, mais le second bloque.
    Repense ta modif, déclare tes variable en te basant sur mon exemple de code, mets tes variables à Nothing en fin de boucle, met tes set en début de boucle, et cela devrait fonctionner mieux.Tout ce que tu fais pour le premier email doit être annulé et refait dans la boucle pour le second.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci pour votre aide,
    il suffisait que je déclare mes variables à l'intérieur de ma boucle !

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

Discussions similaires

  1. [2008R2] Conteneur boucle For erreur OLE DB
    Par stdebordeau dans le forum SSIS
    Réponses: 12
    Dernier message: 10/07/2013, 12h44
  2. Boucle for - erreur EOF
    Par laloune dans le forum Groovy
    Réponses: 1
    Dernier message: 06/07/2012, 12h52
  3. [XL-2003] Macro boucle for next trop lente
    Par sixtm dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/06/2011, 17h08
  4. [XL-2000] Boucle for, erreur de dépassement de capacité
    Par chouki60 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 31/05/2011, 13h56
  5. [VBA-E] erreur boucle for each
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/02/2006, 16h38

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