Copier coller depuis Access 365 vers Outlook 365
D'abord, je souhaite à tous un 20/20 pour cette année... ("jeu de mot" de de copains profs ).
Ensuite, mon petit souci : je gère un fichier sous Access, et on me demande de réaliser des mailings via Outlook 365 à partir de sélections réalisées sur Access.
Pas de souci pour les requêtes et les sélections d'adresses email, et la création d'un état de contrôle comportant la liste des emails des destinataires.
Problème pour la suite : ma macro comprend bien la commande "SelectionnerTousLesEnregistrements" (elle le fait), mais :
- je ne trouve pas de commande pour "copier",
- si je copie "à la main", lorsque je "colle" dans le champ "cci" du mail Outlook, le presse-papier me colle aussi le nom du champ, ce que Outlook apprécie moyennement.
Voilà. Ce n'est pas très grave ; au pire, mes utilisateurs sont capables de comprendre qu'il faut copier/coller à la main, puis, retirer le nom du champ dans la zone "cci" d'Outlook, mais ce n'est pas très propre, non ?
J'ai évidemment cherché partout avant de poser ma question, mais je ne maîtrise pas VBA, et à peine les macros Access (et encore).
Merci pour votre aide.
Arsène.
Petit à petit, l'oiseau fait son nid
Faute de mieux (du genre "solution toute prête gentiment offerte par un amical contributeur"), je m'y suis collé (c'est le cas de le dire).
Donc, quelques ligne de code pour réussir la première étape, c'est à dire une variable string contenant les emails sélectionnés par la requête ad hoc séparés par des point virgule (ci-dessous, et merci à celui que j'ai plagié).
Mais : je ne sais pas récupérer ma variable inListe pour coller son contenu dans le champ ccc d'Outlook.
Je continue à chercher, mais le temps commence à presser (et ma femme à s'agacer).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Public Sub TransposePourOutlook()
Dim oDB As DAO.Database
Dim inListe As String
Dim Email1 As DAO.Recordset
Set oDB = CurrentDb
Set Email1 = oDB.OpenRecordset("SELECT [Adresse de messagerie] FROM Sélection")
inListe = ""
While Not Email1.EOF
inListe = inListe & Email1.Fields("Adresse de messagerie") & "; "
Email1.MoveNext
Wend
inListe = Left(inListe, Len(inListe) - 2)
MsgBox inListe
End Sub |
Merci Hypérion13 : ça fonctionne.
Merci Hypérion13 : ça fonctionne.
Et maintenant, avec une requête (et non plus sur la table)
Bonjour,
Mon problème se complique :
- La solution d'Hypérion13 est parfaite si on fait référence à une table, mais VBA s'embrouille si j'indique le nom d'une requête à la place du nom d'une table (après dbs.OpenRecordset).
Je ne peux même pas insérer le code SQL correspondant, beaucoup trop long.
- Et de plus, le résultat de la fonction ne peut pas être collé en l'état dans un champ Cci d'Outlook : la liste commence par le nom de la variable.
Comment faire ?
Merci pour votre aide.
Reste le premier souci : faire référence au résultat d'une requête et non à la table source elle-même
Merci "User" : je n'ai pas encore pu regarder la solution "automation" pour Outlook ; je vais voir si on peut étendre la méthode à d'autres logiciels de messagerie (certains de mes utilisateurs sont accros au WebMail, et ils aimeraient que je leur propose une solution comparable à un simple copié/collé).
Mais je butte d'abord sur la première question : comment modifier mon module pour extraire ma liste à partir d'une requête, et non pas de la table source ?
Merci pour votre aide,
Arsène.
N'est-il pas plus simple de passer par la création d'une table temporaire ?
Merci beaucoup : je suis presque rassuré de savoir que ce n'était pas possible simplement.
La solution élégante que vous suggérez ne peut hélas pas être mise en oeuvre : les champs n'ont pas de libellé permettant de renseigner le querydef aisément (j'hérite d'un fichier déjà conçu et déjà utilisé par ailleurs, qui ne peut plus être modifié dans sa structure).
Je vais tenter de "contourner" la difficulté en ajoutant une étape : requête action pour créer une table, puis exécution de la fonction.
Si ça fonctionne, il restera une petite difficulté agaçante : le copié/collé du résultat sans le nom de la variable... Si vous avez une idée...
Cdt.