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

VBA Access Discussion :

Boucle sur un nombre détermine d'enregistrements [AC-365]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 21
    Par défaut Boucle sur un nombre détermine d'enregistrements
    Bonjour,

    Je dois envoyer une campagne de mailing.

    J'utilise à ce jour la macro suivante :

    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
     
     
    Public Sub envoimail()
    'Ajouter les références suivantes :
    'Microsoft Outlook
    'Microsoft DAO
    Dim oApp As Outlook.Application
    Dim oMail As Outlook.MailItem
    Dim strContenu As String
    Dim oRst As DAO.Recordset
    Dim oFld As DAO.Field
    Dim strTo As String
    'Instancie Outlook
    Set oApp = CreateObject("Outlook.Application")
    'Crée un nouveau message
    Set oMail = oApp.CreateItem(olMailItem)
    oMail.Body = "Madame, Monsieur," & vbCrLf & _
    " "
    'Ouvre un recordset sur les clients
    Set oRst = CurrentDb.OpenRecordset("SELECT * FROM emailing where ChampEmailClient like '[A]*' ")
    'Boucle sur chaque client et les ajoute au champ BCC du mail
    While Not oRst.EOF
      strTo = strTo & oRst.Fields("ChampEmailClient") & "; "
      oRst.MoveNext
    Wend
    'Supprime la dernière virgule
    oMail.BCC = Left(strTo, Len(strTo) - 2)
    oMail.Subject = "IMPORTANT  "
    'Envoi le mail
    oMail.SentOnBehalfOfName = "xxx@xx.com"
    oMail.Send
    'ferme le curseur
    oRst.Close
    Set oRst = Nothing
    'Ferme Outlook
    'oApp.Quit
    Set oApp = Nothing
     
     
     
    End Sub
    Comme je suis limité à 400 destinataires par mail, je modifie la ligne 20 du code ci-dessus afin de sélectionner le nombre de destinataires, et je lance la macro autant de fois que nécessaire.

    Auriez vous une idée pour boucler afin de générer un mail tous les 400 enregistrements ?

    Merci d'avance

  2. #2
    Membre Expert Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Par défaut
    une piste:
    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
        'Créer des variables à utiliser
        Dim j, k As Long
        Dim sSql As String
        Const delta = 399
     
        j = 1
        k = 400
     
        'admettons que vous ayez un compteur de type long dans votre table
        'et appelons le "Cpteur"
        sSql = "SELECT * FROM emailing where cpteur >=" & j & " cpteur <=" & k
        Set oRst = CurrentDb.OpenRecordset(sSql)
     
        'Lancer l'envoi des mails au 1er groupe
        'puis écrire:
        j = j + delta: k = k + delta + 1
        ' et faire une boucle sur j & k jusqu'à atteindre la fin ".EOF"

  3. #3
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 960
    Par défaut
    bonsoir,
    autre méthode:

    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
    dim J as integer
     
    While Not oRst.EOF
        strTo = strTo & oRst.Fields("ChampEmailClient") & "; "
        j = j + 1
        '
        oRst.MoveNext
        ' envoi du mail dès qu'on atteint 400 ou fin de fichier
        If j = 400 Or oRst.EOF Then
            'Supprime la dernière virgule
            oMail.BCC = Left(strTo, Len(strTo) - 2)
            ' ====> on peut aussi appeler une procédure d'envoi à la place
            oMail.Subject = "IMPORTANT  "
            'Envoi le mail
            oMail.SentOnBehalfOfName = "xxx@xx.com"
            oMail.Send
            ' remise à 0 du compteur et vidage de la liste des destinataires
            j = 0
            strTo = ""
        End If
    Wend

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 21
    Par défaut
    @Zekraoui_Jakani
    je n'ai pas de compteur dans ma table


    @tee_grandbois
    a la lecture et après test, sauf si je me trompe quelque part, cela envoie les 400 premiers enregistrements, cela ne génère pas un mail tous les 400 enregistrements jusqu'à eof

  5. #5
    Membre Expert Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Par défaut
    Il faut faire un petit effort:
    • Pour ma solution, il faudra créer un compteur
    • Pour celle de tee_grandbois, voir son message (ligne 14): c'est à toi d'inclure l'envoi du message

  6. #6
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 960
    Par défaut
    bonsoir,
    @tee_grandbois
    a la lecture et après test, sauf si je me trompe quelque part, cela envoie les 400 premiers enregistrements, cela ne génère pas un mail tous les 400 enregistrements jusqu'à eof
    je n'ai pas testé avec envoi de mail mais envoi de message (MsgBox) et je ne t'ai pas mis tout le code concernant la création du mail (notamment: Set oMail = oApp.CreateItem(olMailItem) et oMail.Body = ...) pour en créer un nouveau) ceci explique peut-être cela et peut être la raison pour laquelle cela n'a pas fonctionné lors de ton test.
    Par contre à la lecture du code tu aurais dû voir que cela ne traite pas que les 400 premiers enregistrements mais tout le RecordSet ...

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

Discussions similaires

  1. [XL-2010] Boucle sur une plage déterminée par la cellule active et copie sur un autre onglet
    Par yanou91 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 16/02/2016, 19h08
  2. [AC-2010] Impression d'un nombre déterminé d'enregistrement dans un état
    Par redojackson dans le forum IHM
    Réponses: 1
    Dernier message: 22/07/2014, 19h54
  3. Réponses: 3
    Dernier message: 04/04/2007, 16h22
  4. Réponses: 2
    Dernier message: 12/10/2005, 15h15
  5. restriction sur le nombre d'enregistrements !
    Par anas123 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/07/2005, 19h57

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