ACCESS VERS LOTUS NOTE - fichier joint - requêtes sur 2 tables. [Résolu]

Messages postés
32
Date d'inscription
mardi 27 octobre 2009
Statut
Membre
Dernière intervention
4 août 2011
- - Dernière réponse : givemecookies
Messages postés
32
Date d'inscription
mardi 27 octobre 2009
Statut
Membre
Dernière intervention
4 août 2011
- 4 août 2011 à 10:07
Bonjour,

Je souhaite envoyer via un bouton (btnmail) une table sous format excel.
J'ai parcouru plein de sujet et n'ayant pas trouvé mon bonheur je viens m'adresser à vous.

J'ai donc deux tables :
- la table 1 (T_SECTEUR_MAIL) a : secteur, A , Cc, Ccc (vous l'avez deviné ce sont les informations nécessaire pour mon mail)
- la table 2 (carnet de commande) est une table avec énormément d'enregistrements et possède également une colonne secteur.

je voudrais que la macro parcourt la table 1 et envoie par mail une table excel qui vient faire une requête pour chaque secteur (1 secteur = 1 mail). comme un tri sur la table 2 par secteur et ensuite envoyer la table triée au secteur correspondant.

Je ne sais pas comment tourner ça. sachant que si j'attribue le mail correspondant à tous les enregistrements de la table 2, je crois que le destinataire va criser en voyant plus de 1000 mails correspondant avec une seule commande pour chaque mail.

J'avais pensé à une création temporaire de table ou de requête mais je ne vois pas trop comment faire.

Voici ce que j'ai pu faire pour l'instant :

Private Sub btnEmail_Click()
  Dim rst As DAO.Recordset
  Dim strSQL As String
  Dim strMessageType As String
  Dim strTitre As String

  
  ' Titre du message
  strTitre = "carnet de commande"
  
  ' Message type à expédier
  strMessageType = "Bonjour," _
    & vbCrLf & vbCrLf _
    & "Voici l'état des commandes  pour le secteur " & rst("secteur") & "." _
    & vbCrLf & "Cordialement," _
    & vbCrLf & vbCrLf & "-- mail automatique - carnet de commande.mdb"
  
  ' Ouverture de la requête
  ' (seuls les clients ayant un email sont concernés ici)
  strSQL = "SELECT * FROM [T_SECTEUR_MAIL]" _
    & " WHERE [A] IS NOT NULL"
  Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
  
  ' Parcourir la liste des clients
  While Not rst.EOF

    
    ' Expédier le mail

    DoCmd.SendObject acSendTable, "nomrequeteenvoyee", acFormatXLS, _
    M_A, M_Cc, M_Ccc, _
    strTitre, strMessagType, False

    ' Client suivant
    rst.MoveNext
  Wend
  
  ' On libère les ressources
  rst.Close
  Set rst = Nothing
  
End Sub


Merci d'avance pour votre aide,
golden.
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
32
Date d'inscription
mardi 27 octobre 2009
Statut
Membre
Dernière intervention
4 août 2011
3
Merci
re,

bon eh bien je me suis répondu à moi-même. Voici le bon code pour les intéréssé :
Private Sub btnEmail_Click()
  Dim rst As DAO.Recordset
  Dim strSQL As String
  Dim strMessageType As String
  Dim strTitre As String

  ' Ouverture de la requête
  ' (seuls les clients ayant un email sont concernés ici)
  strSQL = "SELECT * FROM [T_SECTEUR_MAIL]" _
    & " WHERE [A] IS NOT NULL"
  
  Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
  
  ' Parcourir la liste des clients
  While Not rst.EOF
  
  DoCmd.RunSQL "DELETE * FROM T_ENVOIMAIL"
  DoCmd.RunSQL "INSERT INTO T_ENVOIMAIL ( Numéro, Secteur, Pays, Client, Code, Prod, Délai, Champ7, Champ8, [OF], Commerce, Nuance, Produit, Dim, Longueur, [Pds cde], [Pds cours], Stade, [Section], Champ19, Référence, Hermes, P, [du client] )" & _
    " SELECT [carnet de commance].Numéro, [carnet de commance].Secteur, [carnet de commance].Pays, [carnet de commance].Client, [carnet de commance].Code, [carnet de commance].Prod, [carnet de commance].Délai, [carnet de commance].Champ7, [carnet de commance].Champ8, [carnet de commance].OF, [carnet de commance].Commerce, [carnet de commance].Nuance, [carnet de commance].Produit, [carnet de commance].Dim, [carnet de commance].Longueur, [carnet de commance].[Pds cde], [carnet de commance].[Pds cours], [carnet de commance].Stade, [carnet de commance].Section, [carnet de commance].Champ19, [carnet de commance].Référence, [carnet de commance].Hermes, [carnet de commance].P, [carnet de commance].[du client]" & _
    " FROM [carnet de commance]" & _
    " WHERE [carnet de commance].Secteur=" & rst("secteur") & ""
  
    M_A = rst("A")
    M_Cc = rst("Cc")
    M_Ccc = rst("Ccc")
    
            ' Titre du message
  strTitre = "carnet de commande " & rst("pays")
  
        ' Message type à expédier
  strMessageType = "Bonjour," _
    & vbCrLf & vbCrLf _
    & "Voici l'état des commandes  pour le secteur " & rst("secteur") & "." _
    & vbCrLf & "Cordialement," _
    & vbCrLf & vbCrLf & "-- mail automatique - carnet de commande.mdb" _
    & vbCrLf & vbCrLf _
    & ""
    
    ' Expédier le mail
   
    DoCmd.SendObject acSendTable, "T_ENVOIMAIL", acFormatXLS, _
    M_A, M_Cc, M_Ccc, _
    strTitre, strMessageType, False

    ' Client suivant
    rst.MoveNext
  Wend
  
  ' On libère les ressources
  rst.Close
  Set rst = Nothing
  
End Sub


Merci quand même,
golden

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 193 internautes nous ont dit merci ce mois-ci

Commenter la réponse de givemecookies
Messages postés
32
Date d'inscription
mardi 27 octobre 2009
Statut
Membre
Dernière intervention
4 août 2011
0
Merci
j'ai essayé de faire une requête temporaire et mis ça :
Private Sub btnEmail_Click()
Dim rst As DAO.Recordset
Dim strSQL As String
Dim strMessageType As String
Dim strTitre As String




' Ouverture de la requête
' (seuls les clients ayant un email sont concernés ici)
strSQL = "SELECT * FROM [T_SECTEUR_MAIL]" _
& " WHERE [A] IS NOT NULL"

Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)


' Parcourir la liste des clients
While Not rst.EOF

'pingoin = "SELECT * FROM [carnet de commance]" _
& " WHERE [Secteur] =" & rst("secteur")
pingoin = "SELECT * FROM [carnet de commance]" _
& " WHERE ([Secteur]=" & rst("secteur") & ")" '--> erreur d'execution '3011' ici


M_A = rst("A")
M_Cc = rst("Cc")
M_Ccc = rst("Ccc")

' Titre du message
strTitre = "carnet de commande"

' Message type à expédier
strMessageType = "Bonjour," _
& vbCrLf & vbCrLf _
& "Voici l'état des commandes pour le secteur " & rst("secteur") & "." _
& vbCrLf & "Cordialement," _
& vbCrLf & vbCrLf & "-- mail automatique - carnet de commande.mdb"

' Expédier le mail

DoCmd.SendObject acSendTable, pingoin, acFormatXLS, _
M_A, M_Cc, M_Ccc, _
strTitre, strMessagType, True

' Client suivant
rst.MoveNext
Wend

' On libère les ressources
rst.Close
Set rst = Nothing

End Sub

par contre cela bloque au niveau de la requete pour rechercher le secteur dans la table 2.. alors que le secteur existe bien dans les 2 tables..

Merci d'avance.
Commenter la réponse de givemecookies
Messages postés
32
Date d'inscription
mardi 27 octobre 2009
Statut
Membre
Dernière intervention
4 août 2011
0
Merci
bonjour (encore),
désolée de spamer mais on peut pas éditer..
bon le code fonctionne pour tout.. sauf la pièce jointe. donc c'est bien que ça vient de là!

aucun problème particulier avec lotus en tout cas!
Merci

golden.
Commenter la réponse de givemecookies