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

Macros et VBA Excel Discussion :

Création de RDV Outlook sur tableau excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 44
    Points : 12
    Points
    12
    Par défaut Création de RDV Outlook sur tableau excel
    Bonsoir à tous !!!

    J'ai actuellement un fichier Excel recensant des outils que je dois faire réviser à une certaine date.
    J'ai trouvé sur le forum une macro qui permet de générer des RDV en fonction des valeurs de ce tableau (pour me permettre de me rappeler quand je dois faire réviser mes outils).
    La macro fonctionne super bien SAUF qu'à chaque fois que je l'exécute elle me recréé les rendez-vous déjà créés ...

    Du coup j'aimerais modifié cette macro afin d'éviter des doublons, triplé, etc etc

    Comment modifier ma macro pour que :
    - Soit elle vérifie sur le rendez-vous n'a pas déjà été créé et si tel est le cas ne recréé pas le rendez-vous
    - Soit elle n'exécute la macro que sur les lignes que je sélectionne

    Si quelqu'un arrive à m'aider ca serait super génial !!! :-)

    MERCI D'AVANCE !!! :-)

    Voici mon code actuel :
    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
     
    Sub NouveauRDV_Calendrier()
    Dim myOlApp As New Outlook.Application
    Dim MyItem As Outlook.AppointmentItem
    Dim Cell As Range
     
    For Each Cell In Range("A2:A" & Range("A22").End(xlUp).Row)
        Set MyItem = myOlApp.CreateItem(olAppointmentItem)
     
        With MyItem
            .MeetingStatus = olNonMeeting
            .Subject = Cell
            .Start = Cell.Offset(0, 4)
            .AllDayEvent = True
            .Location = Cell.Offset(0, 1)
            .Save
        End With
     
        Set MyItem = Nothing
    Next Cell
     
    End Sub

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    plutôt que de tester l'existence du rendez-vous, qui nécessite la double lenteur inhérente à outlook (la lecture des éléments, notamment ayant trait aux thématiques de calendriers) mais également au fait qu'il est piloté par excel et donc forcément ralentit ... pourquoi ne prendre le problème à l'envers et créer un état dans ta feuille excel, indiquant si le rendez-vous est déjà posé ou non

    ajoute une colonne dans ton tableau de donnée, le champs "Existant", dans la procédure qui crée un rendez-vous, ajoute simplement une ligne de code pour remplir ton champs avec ce que tu veux : oui / X / toto etc...

    et ajoute une autre ligne de code, entre la ligne 7 et 8 de ton code actuel, qui vérifie si le champs est remplit ou pas pour décider de créer ou non le rendez-vous


    par précaution, on peut écrire une procédure à lancer "de temps en temps" et qui ira simplement inspecter l'ensemble des rendez-vous existants pour pointer sur la feuille Excel s'il n'y a pas d'anomalies. C'est plus optimal de faire un contrôle global de tes deux jeux de données une seule fois, que de lancer X fois un contrôle unitaire

    et même au final, renommer ce champs "Existant" en "Statut" ... et gérer l'état de chaque rendez-vous.
    Et même prendre de la hauteur et pouvoir suivre ton objet "Outil" avec des "évènements" , dont le moteur est "rendez-vous" .. mais c'est une piste qui nécessite de bien monter le projet en amont avant de se lancer dans le vif du sujet et du codage

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 44
    Points : 12
    Points
    12
    Par défaut
    MERCI JOE !!!

    C'était une très bonne idée et du coup j'ai créé deux colonnes avec des marqueurs : une colonne qui va repérer des modifications dans la ligne et une autre dans laquelle je note si cet outils et sous ma gestion.

    Seulement j'ai un problème, le code que j'ai mis dans le premier post je l'ai testé sur mon PC perso et ca marchait super bien ... Mais sur mon PC Boulot avec Excell 2007 ca ne fonctionne pas car il manque la librairie "Microsoft Outlook xx.x Object Library".

    J'ai lu par ci et par là qu'il faudrait changer le code en LateBinding mais là ca va bien au delà de mes connaissances d'autodidacte ....

    MON CODE ACTUEL : Il me donne une erreur "Type défini par l'utilisateur non défini" sur la ligne "Dim MyOlApp As New Outlook.Application"
    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
    Sub NouveauRDV_Calendrier()
    'nécéssite d'activer la référence Microsoft Outlook 10.0 Object Library
     
    Dim myOlApp As New Outlook.Application
    Dim MyItem As Outlook.AppointmentItem
    Dim Cell As Range
    Dim dLgC As Long, dLgR As Long
     
    For Each Cell In Range("A2:A" & Range("A50").End(xlUp).Row)
     
    If Cell.Offset(0, 7).Value = "Y" And Cell.Offset(0, 8).Value = "Y" Then
        Set MyItem = myOlApp.CreateItem(olAppointmentItem)
     
        With MyItem
            .MeetingStatus = olNonMeeting
            .Subject = "ETALONNAGE " & Cell
            .Start = Cell.Offset(0, 6)
            .AllDayEvent = True
            .Location = "Laboratoire Métrologie ILLKIRCH"
            .Save
        End With
     
        Set MyItem = Nothing
    End If
    Next Cell
     
    End Sub

    Avec les infos que j'ai trouvé j'ai modifié :
    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
    Sub NouveauRDV_Calendrier()
    'nécéssite d'activer la référence Microsoft Outlook 10.0 Object Library
     
    Dim myOlApp As Object
    Set myOlApp = CreateObject("Outlook.Application")
    Dim MyItem As Object
    Set MyItem = CreateObject("Outlook.AppointmentItem")
     
    Dim Cell As Range
    Dim dLgC As Long, dLgR As Long
     
    For Each Cell In Range("A2:A" & Range("A50").End(xlUp).Row)
     
    If Cell.Offset(0, 7).Value = "Y" And Cell.Offset(0, 8).Value = "Y" Then
        Set MyItem = myOlApp.CreateItem(olAppointmentItem)
     
        With MyItem
            .MeetingStatus = olNonMeeting
            .Subject = "ETALONNAGE " & Cell
            .Start = Cell.Offset(0, 6)
            .AllDayEvent = True
            .Location = "Laboratoire Métrologie ILLKIRCH"
            .Save
        End With
     
        Set MyItem = Nothing
    End If
    Next Cell
     
    End Sub
    ERREUR 429 : Un composant ActiveX ne peux pas créer d'objet.


    Du coup je suis paumé là ... Si quelqu'un peut me venir en aide ca serait génial !!!!

    C'est la dernière pierre pour terminer mon projet !!!!

    MERCI D'AVANCE !!!

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ici, une petite explication pour passer en liaison tardive, rédigée il y a quelques jours : https://www.developpez.net/forums/d1...a/#post9056030

    la ligne 7 de ton code est inutile, pas besoin d'un createobjet car plus loin tu fais déjà le CreateItem sur ce rendez-vous
    regarde bien dans la lien que je t'ai donné comment j'ai créer un nouveau mail sans passer par une variable (dans un bloc With)
    sinon, la logique de l'exemple que je t'ai mis plus haut est totalement identique à la tienne

    à ceci près que l'objet MailItem possède la valeur 0 (dans mon exemple) et qu'un olAppointmentItem possède la valeur 1
    pour olNonMeeting c'est la valeur 0

    pour toujours retrouver ces "valeurs" tu as trois méthodes :

    - la documentation en ligne Microsoft
    - aller dans l'explorateur d'objet dans ton éditeur VBA
    - aller dans outlook (ou un projet excel où tu as coché la référence à outlook) et faire tout simplement un

    dans la fenêtre d'exécution (Ctrl+G pour l'afficher)
    en validant cette ligne, tu obtiens en retour la valeur numérique

    en liaison tardive tu ne peux plus utiliser les constantes Olxxx tu dois les remplacer par leur valeur

    n'oublie pas de décocher la référence à Outlook aussi


    EDIT : dans la même discussion que citée en début de message
    https://www.developpez.net/forums/d1...a/#post9056067
    ici, il y a des exemples de procédures pour correctement chopper Outlook, s'il est déjà ouvert ou non
    et d'autres petites choses qui pourraient t'intéresser

Discussions similaires

  1. Création rdv Outlook depuis Excel
    Par vincentariaux dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/06/2017, 11h39
  2. Création interface à partir d'un tableau excel
    Par Alex_ltr dans le forum Excel
    Réponses: 3
    Dernier message: 17/11/2016, 15h16
  3. Tri sur tableau excel avec recherche de champs
    Par Baltazarr dans le forum Excel
    Réponses: 8
    Dernier message: 25/10/2013, 10h39
  4. problèmes de données sur tableau excel
    Par Coyotteabf dans le forum Excel
    Réponses: 4
    Dernier message: 18/10/2012, 08h52
  5. [Toutes versions] Aide sur tableau excel récupération de donnée
    Par mattdogg97 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/02/2011, 09h29

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