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 :

ajouter automatiquement données provenant d'un mail dans Access


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 97
    Par défaut ajouter automatiquement données provenant d'un mail dans Access
    Bonjour à tous,

    Petite question. Comment je fais pour ajouter automatiquement des valeurs dans une table Access en fonction des messages que je reçois dans Outlook ?

    J'ai un mail qui me provient d'un formulaire web qui a toujours la même forme... Comment faire pour lire ces données et les mettre dans une table ? Il existe surement un automatisme...

  2. #2
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Par défaut
    Bonjour,

    Dans Outlook, Menu Outils => Macro => Visual Basic Editor.
    Dans la fenêtre de projet, Microsoft Outlook Objects => CetteSessionOutlook.
    Dans l'événement Application_NewMail()

    Tu récupères le corps des messages
    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
     
    ' Sélection du dossier "Boite de réception"
    Set myOlApp = CreateObject("Outlook.Application")
    Set myNameSpace = myOlApp.GetNamespace("MAPI")
    Set myOlApp.ActiveExplorer.CurrentFolder = myNameSpace.GetDefaultFolder(olFolderInbox)
     
    ' Boucler sur les non-lus
    NonLus = ActiveExplorer.CurrentFolder.UnReadItemCount
    For i = 1 To NonLus
        If ActiveExplorer.CurrentFolder.UnReadItemCount = 0 Then
            Exit Sub
        End If
     
        Corps = ActiveExplorer.CurrentFolder.Items.Item(i).Body
    Next i
    Ensuite, pour insérer dans une base Access, fais une recherche sur ADODB.Connexion

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 97
    Par défaut
    d'accord je vois j'utilise un

    ADODB.Connexion pour faire une requête SQL...
    mais je connais pas le VB comment faire pour pour spliter la chaine du message afin que je puisse récupérer les valeurs voulue ?

    Nom : Delpeid
    Prénom : Gregory
    Pseudo : rastrator
    E-mail : mail@free.fr
    ID : C982a4dfb6e0eca17b5451c50d914548823ca668
    Invitation : par email

  4. #4
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Par défaut
    Re,

    Si la chaine que tu cherches est toujours à la même position :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    .....
    Corps = ActiveExplorer.CurrentFolder.Items.Item(i).Body
    MaChaine = Mid(Corps, Deb, Longueur)
    Deb = Position de début de la chaine cherchée
    Longueur = Longueur de la chaine cherchée

    Si tu ne connais pas la position de cette chaine, tu as la fonction InStr() qui te renvoie la position d'une sous-chaine dans une chaine.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 97
    Par défaut
    j'ai tenté d'utiliser ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Déclaration de la variable de connexion
    Dim cnx As ADODB.Connection
    Set cnx = New ADODB.Connection
     
    'Définition du pilote de connexion
    cnx.Provider = "Microsoft.Jet.Oledb.3.51"
    'Définition de la chaîne de connexion
    cnx.ConnectionString = "C:\maBase.mdb"
    'Ouverture de la base de données
    cnx.Open
    Il me met une erreur de compiliation pour la déclaration cnx As
    Il me dit que l'objet défini par l'utilisateur n'a pas été défini. Je dois importer une librairie ? comment ?

  6. #6
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Par défaut
    Re,

    Il doit te manquer une référence vers ADO.

    Dans Outlook, Menu Outils => Macro => Visual Basic Editor

    Menu Outils => Références => tu coches la référence à ADO (je ne sais plus quelle version)

  7. #7
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    Hello,

    pour découper la chaine, tu peux faire / utiliser une fonction VBA générique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function GetValue(ByVal Chaine As String, _
                      ByVal borneDebut As String, _
                      ByVal borneFin As String)
     
    On Error Resume Next
    GetValue = Split(Split(Chaine, borneDebut)(1), borneFin)(0)
     
    End Function
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ?getvalue("nom : Test; prénom : Jean-Pierre; mail : jptest@dvp.com;","prénom : ",";")
    Jean-Pierre
    pour le saut de ligne, essaye vbCrLf ou chr(10)

    Citation Envoyé par yodark Voir le message
    d'accord je vois j'utilise un

    ADODB.Connexion pour faire une requête SQL...
    mais je connais pas le VB comment faire pour pour spliter la chaine du message afin que je puisse récupérer les valeurs voulue ?

Discussions similaires

  1. Ajout automatique de bannière à tous les mails sortants
    Par Raz-X dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 01/06/2011, 00h30
  2. Réponses: 4
    Dernier message: 13/03/2009, 13h55
  3. Comment faire pour un envoi automatique de mail dans access
    Par chpierrot dans le forum VBA Access
    Réponses: 1
    Dernier message: 18/06/2008, 13h45
  4. Réponses: 14
    Dernier message: 23/05/2008, 15h10
  5. [SAX] Ajout de données balisées par l'utilisateur dans un XML déjà formé
    Par Beleg dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 04/03/2008, 18h57

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