VBA - Erreur sur rdv outlook Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
m
mikaTi
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 14 janvier 2016
Version d'Excel : 2010

Message par mikaTi » 20 janvier 2016, 16:00

Bonjour a tous,

Dans le cadre d'un fichier excel pour le suivi de prospection, j'ai réussi à intégrer une macro pour pouvoir exporter sur outlook, sous forme de rendez vous, la date de relance. Cette date de relance se trouve à colonne O.
J'ai rempli toutes mes lignes en mettant pour faire des testes des date de relance fictives.
Jusque là, tout marche correctement... mes alertes sur outlook sont bien faites.

Problème maintenant quand je veux utiliser mon fichier, en mettant les vrais dates de relance.
En effet, certaines cellules (par exemple O3), n'est pas rempli, puisque je n'ai pas encore effectué de premier appel téléphonique. Je ne peux donc pas encore déterminer la date de relance.
Lorsque je lance le macro j'ai donc un message d'erreur

"Erreur d'exécution '13':

Incompatibilité de type"


Du coup ça me surligne en jaune en debogage ma ligne de code
.Start = Cell.Offset(0, 14) & " " & Cell.Offset(0, 15) ' Date plus heure.

Donc seul les rendez vous au dessus de la ligne dont la date de relance est vide, sont exportés sur Outlook.
J'ai bien compris que le problème vient du fait que la cellule O3 est vide...

Est ce qu'il y aurait un petit quelque chose pour contourner ce problème?

Merci bien à tous pour vos éventuelles réponses.

:)
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 9'151
Appréciations reçues : 376
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 20 janvier 2016, 16:40

Bonjour,

merci de joindre un fichier ou a minima le code complet de ta macro.
m
mikaTi
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 14 janvier 2016
Version d'Excel : 2010

Message par mikaTi » 20 janvier 2016, 16:47

h2so4 a écrit :Bonjour,

merci de joindre un fichier ou a minima le code complet de ta macro.
Merci bien, le voici :)

Donc là dans ce cas j'ai volontairement mis vide la première cellule de mon tableau date de relance et la seconde...

Merci bien :)
Modifié en dernier par mikaTi le 20 janvier 2016, 20:32, modifié 1 fois.
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 9'151
Appréciations reçues : 376
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 20 janvier 2016, 17:00

bonjour,

si j'ai bien compris
'Reference importante : Microsoft Outlook xx Object librairy
'Reference importante sinon erreur automation : OutlookNotifier 1.0 type librairy
'Installer pour cela Yahoo Synchronisation qui rajoute l'option OutlookNotifier 1.0 type librairy
Sub ajout()

    Dim DateDebut As String
    Dim Nom As String
    Dim journee As String
    Dim sSearch As String
    Dim OutlApp As New Outlook.Application
    Dim OutlItems As Outlook.Items
    Dim OutlAppointment As Outlook.AppointmentItem
    Dim MyCalendar As Outlook.Items
    Dim OutlMapi As Outlook.Namespace
    Dim OutlFolder As Outlook.MAPIFolder
    Dim MyItem As Outlook.AppointmentItem
    Dim Cell As Range
    Dim cal As String

    UserForm1.TextBox2.Visible = False
    UserForm1.TextBox1.Visible = False    'indique la mise à jour de RDV dans le calendrier

    'plage de donnée
    For Each Cell In Range("A4:A" & Range("A6000").End(xlUp).Row)
        'fin de plage de donnée

        'Pour la vérification des doublons on utilise les données suivantes :
        If Cell <> "" Then    'recherche dans la plage si il existe des données à inscrire

            If Cell.Offset(0, 14) <> "" Then
                DateDebut = Cell.Offset(0, 14) & " " & Cell.Offset(0, 15)    'date
                Nom = "Relance" & " " & Cell.Offset(0, 0) & " - " & Cell.Offset(0, 1)    'nom
                journee = Cell.Offset(0, 6)    ' Toute la journée oui/non
                'Fin des données pour la valitation de doublon

                'Crée la sélection du calendrier dans Outlook
                Set OutlApp = CreateObject("Outlook.Application")
                Set OutlMapi = OutlApp.GetNamespace("MAPI")
                Set OutlFolder = OutlMapi.GetDefaultFolder(olFolderCalendar)
                Set OutlItems = OutlFolder.Folders("prospection").Items    ' Nom du calendrier - Attention calendrier ajouté en dessous du calendrier par default et nom dans un nouveau groupe.
                'Set OutlItems = OutlFolder.Items ' Calendrier par default

                'Vérification de doublon pour les rdv
                On Error Resume Next
                sSearch = "[AllDayEvent] = '" & journee & "' and [Start] = '" & DateDebut & "' and  [Subject] = '" & Nom & "'"
                Set OutlAppointment = OutlItems.Find(sSearch)
                On Error GoTo 0
                'fin vérification doublon


                If OutlAppointment Is Nothing Then    's'il n'y a pas de doublons lancement du code
                    'On choisi le calendrier
                    Set MyCalendar = OutlItems    'choix calendrier
                    'Fin choix calendrier


                    UserForm1.TextBox1.Visible = True
                    Set MyItem = MyCalendar.Add(olAppointmentItem)

                    With MyItem    'inscription des données dans excel
                        .MeetingStatus = olNonMeeting    'meeting
                        .Subject = "Relance" & " " & Cell.Offset(0, 0) & " - " & Cell.Offset(0, 1)    'Sujet
                        .Start = Cell.Offset(0, 14) & " " & Cell.Offset(0, 15)    ' Date plus heure.
                        .Duration = 30    'durée du RDV en minute"
                        .Location = Cell.Offset(0, 4) & " - " & Cell.Offset(0, 5)    'emplacement
                        .AllDayEvent = True    ' Toute la journée oui/non
                        .ReminderSet = True    ' S'il y a un rappel
                        .ReminderMinutesBeforeStart = 1    ' Durée du rappel en minute
                        .body = Cell.Offset(0, 13)    'Pour les commentaires ou sujets
                        .Categories = "PROSPECTION"
                        .Save

                    End With
                    Set MyItem = Nothing
                    UserForm1.TextBox1.Visible = False
                End If
            End If
        End If
    Next Cell    'tant que les cellules de la plage est complete on relance le macro

End Sub

m
mikaTi
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 14 janvier 2016
Version d'Excel : 2010

Message par mikaTi » 20 janvier 2016, 20:48

h2so4 a écrit :bonjour,

si j'ai bien compris
'Reference importante : Microsoft Outlook xx Object librairy
'Reference importante sinon erreur automation : OutlookNotifier 1.0 type librairy
'Installer pour cela Yahoo Synchronisation qui rajoute l'option OutlookNotifier 1.0 type librairy
Sub ajout()

    Dim DateDebut As String
    Dim Nom As String
    Dim journee As String
    Dim sSearch As String
    Dim OutlApp As New Outlook.Application
    Dim OutlItems As Outlook.Items
    Dim OutlAppointment As Outlook.AppointmentItem
    Dim MyCalendar As Outlook.Items
    Dim OutlMapi As Outlook.Namespace
    Dim OutlFolder As Outlook.MAPIFolder
    Dim MyItem As Outlook.AppointmentItem
    Dim Cell As Range
    Dim cal As String

    UserForm1.TextBox2.Visible = False
    UserForm1.TextBox1.Visible = False    'indique la mise à jour de RDV dans le calendrier

    'plage de donnée
    For Each Cell In Range("A4:A" & Range("A6000").End(xlUp).Row)
        'fin de plage de donnée

        'Pour la vérification des doublons on utilise les données suivantes :
        If Cell <> "" Then    'recherche dans la plage si il existe des données à inscrire

            If Cell.Offset(0, 14) <> "" Then
                DateDebut = Cell.Offset(0, 14) & " " & Cell.Offset(0, 15)    'date
                Nom = "Relance" & " " & Cell.Offset(0, 0) & " - " & Cell.Offset(0, 1)    'nom
                journee = Cell.Offset(0, 6)    ' Toute la journée oui/non
                'Fin des données pour la valitation de doublon

                'Crée la sélection du calendrier dans Outlook
                Set OutlApp = CreateObject("Outlook.Application")
                Set OutlMapi = OutlApp.GetNamespace("MAPI")
                Set OutlFolder = OutlMapi.GetDefaultFolder(olFolderCalendar)
                Set OutlItems = OutlFolder.Folders("prospection").Items    ' Nom du calendrier - Attention calendrier ajouté en dessous du calendrier par default et nom dans un nouveau groupe.
                'Set OutlItems = OutlFolder.Items ' Calendrier par default

                'Vérification de doublon pour les rdv
                On Error Resume Next
                sSearch = "[AllDayEvent] = '" & journee & "' and [Start] = '" & DateDebut & "' and  [Subject] = '" & Nom & "'"
                Set OutlAppointment = OutlItems.Find(sSearch)
                On Error GoTo 0
                'fin vérification doublon


                If OutlAppointment Is Nothing Then    's'il n'y a pas de doublons lancement du code
                    'On choisi le calendrier
                    Set MyCalendar = OutlItems    'choix calendrier
                    'Fin choix calendrier


                    UserForm1.TextBox1.Visible = True
                    Set MyItem = MyCalendar.Add(olAppointmentItem)

                    With MyItem    'inscription des données dans excel
                        .MeetingStatus = olNonMeeting    'meeting
                        .Subject = "Relance" & " " & Cell.Offset(0, 0) & " - " & Cell.Offset(0, 1)    'Sujet
                        .Start = Cell.Offset(0, 14) & " " & Cell.Offset(0, 15)    ' Date plus heure.
                        .Duration = 30    'durée du RDV en minute"
                        .Location = Cell.Offset(0, 4) & " - " & Cell.Offset(0, 5)    'emplacement
                        .AllDayEvent = True    ' Toute la journée oui/non
                        .ReminderSet = True    ' S'il y a un rappel
                        .ReminderMinutesBeforeStart = 1    ' Durée du rappel en minute
                        .body = Cell.Offset(0, 13)    'Pour les commentaires ou sujets
                        .Categories = "PROSPECTION"
                        .Save

                    End With
                    Set MyItem = Nothing
                    UserForm1.TextBox1.Visible = False
                End If
            End If
        End If
    Next Cell    'tant que les cellules de la plage est complete on relance le macro

End Sub

ESSAI CONCLUANT!!!!!!!!! UN GRAND MERCI!!!!!!!!!!!!!!!! :) :) :)

J'ai un souci auquel j'ai réussi à pallier en "bidouillant".... Peut être pouvez-vous tout de même m'éclairer, si oui ou non bidouiller était nécessaire.

En fait, initialement, je voulais ajouter ces rendez vous dans mon calendrier par défaut, pour éviter de créer un calendrier spécifique...

En effet, cette macro permet de faire en sorte que lorsque je change la date de relance d'une ligne, l'ancien rendez-vous avec l'ancienne date soit supprimé du calendrier et ainsi, le rendez-vous dont la date est modifié apparait. Mais, lors de la mise à jour de mon calendrier "par défaut" j'avais remarqué que tous mes rendez-vous passés et futurs sans lien avec ce fichier, sont supprimés.... Quand j'ai découvert ça j'étais abattu ^^
Du coup j'ai bien inscris dans la macro qu'il fallait ajouter les rdv du tableau dans un calendrier à part... mais bon je trouve cela moins pratique.
Vous me confirmez qu'on ne peut pas faire autrement? (j'espère que j'ai été clair dans mes explications)

Merci bien
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message