VBA - Erreur sur rdv outlook
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.
Bonjour,
merci de joindre un fichier ou a minima le code complet de ta macro.
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
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
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