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 :

Problème Methode Find dans automation Outlook


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 134
    Par défaut Problème Methode Find dans automation Outlook
    Bonjour à tous et bonne année 2017 !

    Voici l' ébauche d'un code qui devrait permettre de vérifier si le champ [globalappointmentID] est déjà présent dans le calendrier Outlook. la variable IDAction de ma table est de type string et reprend le "[globalappointmentID]" préalablement importé depuis Outlook.

    La variable "ResultatRech" retourne "Nothing" tandis que IDAction retourne bien la bonne valeur.
    Cependant le code se détient sur la ligne 45 me disant qu'il lui est impossible de vérifier la condition...

    Est il préferable d'utiliser FIND ou RESTRICT ?

    Merci d'avance de m'aider à résoudre ce mystère


    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
    86
    87
    88
    89
    90
    91
    92
    Public Sub RechRdvOutlook()
     
        Dim olApp As Outlook.Application
        Dim DossierOutlook As Outlook.MAPIFolder
        Dim RdvOutlook As Outlook.AppointmentItem
        Dim ns As NameSpace
        Dim Compteur As Single
        Dim LigneRdvActif As String
        Dim rstListeRdv As dao.Recordset
     
        Dim ResultatRech As Object
        Dim ElementTrouve As Boolean
     
     
        Set olApp = New Outlook.Application
        Set ns = olApp.GetNamespace("MAPI")
        Set DossierOutlook = ns.GetDefaultFolder(olFolderCalendar)
     
     
     
     
        ' Référence à la requête contenant les rdv
     
     
        Set rstListeRdv = CurrentDb.OpenRecordset("SELECT t_rendezvous.idaction,t_rendezvous.ajoutéàoutlook,T_RendezVous.HoraireDebut, T_RendezVous.NotesAction, T_RendezVous.LieuAction, T_RendezVous.RappelAction, T_RendezVous.MinutesRappel, T_RendezVous.NumAction, T_RendezVous.DuréeAction, [Vendeurs et Intervenants].[Vendeur/Intervenant], RqContacts.Contact " & _
                                        "FROM RqContacts INNER JOIN ([Vendeurs et Intervenants] INNER JOIN T_RendezVous ON [Vendeurs et Intervenants].IdVendeurIntervenant = T_RendezVous.IdIntervenant) ON RqContacts.NumContact = T_RendezVous.NumContact;")
     
     
     
        'Si l'évenement n'existe pas dans Outlook il sera créé (plus tard dans le code)
     
        If rstListeRdv.RecordCount = 0 Then
     
            MsgBox "Aucune donnée n'existe pour exportation dans Outlook"
     
            Exit Sub
     
      Else
     
            rstListeRdv.MoveFirst
     
        Do While Not rstListeRdv.EOF
     
     
             Set ResultatRech = RdvOutlook.Find("[GlobalAppointmentID] = " & rstListeRdv!IdAction & "")
     
            'DoCmd.OpenForm ("dialogbox")
            'Forms!dialogbox.Caption = "Synchronisation des évenements avec Outlook"
     
     
                Debug.Print rstListeRdv!IdAction
     
                If ResultatRech.Count = 0 Then
     
                    Debug.Print "Aucun élement trouvé"
     
                    ElementTrouve = False
     
                 Else
     
                    ElementTrouve = True
     
                    Debug.Print ResultatRech.Count & " Eléments trouvés."
     
     
                 End If
     
     
    'Si aucun rdv n'est trouvé:
    If Not ElementTrouve Then
        'NoResults.Show
    Else
       Debug.Print "Trouvé " & ResultatRech.Count & " items."
     
    End If
     
     
     
                    'Else
     
                        'GoTo CréationRdv
     
                            'End If
     
                   rstListeRdv.MoveNext
                    Loop
     
     
     
    CréationRdv:
     
                'Création de l'évenement

  2. #2
    Membre émérite
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Par défaut
    Bonjour clickandgo et bonne année à tout le monde.

    globalappointmentID renvoie une valeur de type string,donc ton code devrait etre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set ResultatRech = RdvOutlook.Find("[GlobalAppointmentID] = 'rstListeRdv!IdAction'")
    D'autre part, ResultatRech si il est trouvé, representera l'objet trouvé et un seul à la fois .Donc il ne possède pas de proriété .count.
    La méthode Restrict est peut-etre plus rapide, mais me semble plus complexe à écrire (au niveau des apostrophes, guillemets...)
    Cdlt

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 134
    Par défaut
    Bonjour Thierry et merci pour ta prompte réponse.

    Malheureusement cela ne marche pas, toujours le message "condition invalide", j'ai remis rstlisterdv!idaction en variable dans la parenthèse du find() sinon il ne me la prend pas.

    Si je mets un "On resume next" par contre ça roule mais curieusement il ne trouve pas les occurrences, par contre le debug print dans la fenêtre d’exécution me prouve que la boucle s’exécute bien...

    Je lis sur un forum Anglais que l'on ne peut utiliser de valeur hexadécimale en tant que string dans la propriété Find() alors comment faire ? Doit on convertir en string ?

    https://social.msdn.microsoft.com/Fo...-id?forum=vsto

    Une idée ?

    Merci d'avance

  4. #4
    Membre émérite
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Par défaut
    et si tu remplaçais [GlobalAppointmentID] par [AppointmentItem.GlobalAppointmentID] ?

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 134
    Par défaut
    Citation Envoyé par Thierry_PALLIER Voir le message
    et si tu remplaçais [GlobalAppointmentID] par [AppointmentItem.GlobalAppointmentID] ?
    Ca ne marche pas, de-plus la variable RdvOutlook précédent le Find() fait déjà référence à AppointmentItem.

    Je crois que véritablement il s'agît effectivement comme dit sur le forum Anglais d'une restriction de la fonction Find() qui ne prend pas en charge les valeurs hexadécimales du type GlobalAppointmentID comme mentionné dans de nombreux posts.

    Je mentionne que je suis sous Exchange des fois que cela ait une incidence aussi ...

  6. #6
    Membre émérite
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Par défaut
    Bonjour.

    Apparement, on ne peut pas rechercher dans le champ "GlobalAppointmentID", ni dans "EntryId",pour les raisons que tu cites, par contre, j'arrive bien à trouver un rv à partir du champ
    "Organizer". Donc la méthode est bonne.
    Si malgré tout tu veux utiliser un identifiant unique (pratique et rapide pour les recherches),tu peux voir pour en créer un avec un champ personnalisé.
    Par exemple, quand j'envoie un mail:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
           With olMail                                   'PREPARATION DE L'ENVOIE DU MAIL
     
                .To = AQui    'DESTINATAIRE
                .Subject = "Liste Materiel"    'SUJET
                .UserProperties.Add "EmailRef", olText
                .UserProperties.Item("EmailRef").Value = sRef
            End with
    Par contre ma dsi ne me permet pas d'utiliser un formulaire personnalisé, qui me permettrait de remplir ce champ dans ma boite de réception.
    Une idée à creuser.

    Cdlt

Discussions similaires

  1. Erreur variable et pièces jointes dans automation Outlook
    Par clickandgo dans le forum VBA Access
    Réponses: 4
    Dernier message: 01/05/2013, 00h45
  2. [AC-2003] Aide sur l'envoi d'HTML dans une automation Outlook
    Par Thotho-Maxime dans le forum VBA Access
    Réponses: 2
    Dernier message: 29/07/2009, 09h28
  3. Erreur de type dans methode find
    Par jeje00 dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 03/06/2009, 18h27
  4. probléme d'affichage dans outlook express
    Par leto02 dans le forum Outlook Express / Windows Mail
    Réponses: 0
    Dernier message: 14/04/2008, 09h44
  5. Problème envoyer/recevoir dans Outlook 2003
    Par Jipé70 dans le forum Outlook
    Réponses: 8
    Dernier message: 28/12/2007, 09h40

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