VBA dans Outlook

Bonjour tout le monde,

Je viens solliciter votre aide pour corriger un bug dans mon code VBA....

Sur Outlook 2013, je dispose d'un agenda perso... et d'un agenda partagé commun avec mes collègues...

Je souhaite déverser des éléments de mon agenda perso dans l'agenda partagé... du genre les congés, les formations, etc...

Avec mon code, j'arrive à déverser ces éléments... néamoins, seulement 1 seul élément.... Congés... ou Formation... en fonction de ce que je marque comme sujet dans mon code...

J'aimerais créer une fonction "OR"... pour lui dire "si tu vois dans le sujet de l'événement soit le mot CONGES ou FORMATION ou XXX alors tu recopies dans l'agenda partagé"....

Mais rien à faire, cela ne fonctionne pas!!!

Voici ci-dessous mon code... Merci pour votre aide!!!

Sub Copie_événement()
Dim MonSousDoss As Outlook.Folder
Set MonApp = Outlook.Application
Set MonNameSpace = MonApp.GetNamespace("MAPI")

'On pointe sur le calendrier pour chercher les valeurs a copier
Set MonDoss = MonNameSpace.GetDefaultFolder(olFolderCalendar) 'ou le GetSharedDefaultFolder

'Pour chaque événements, on va le copier dans l'autre calendrier.

For Each EvenCalend In MonDoss.Items

'On definit les variables de l'événement, debut, fin, sujet etc.
Sujet = EvenCalend.Subject
If InStr(1, Sujet, "Congés", vbTextCompare) > 0 Then

'On definit les variables de l'événement, début, fin, sujet etc.
Sujet = EvenCalend.Subject
DateDeb = EvenCalend.Start
DateFin = EvenCalend.End
Texte = EvenCalend.Body
Lieu = EvenCalend.Location

'On fait pointer sur le second calendrier, celui où l'on va copier les infos.
Set MonDoss2 = MonNameSpace.GetDefaultFolder(olFolderCalendar)
Set MonSousDoss = MonDoss2.Folders(1)

If fc_AppointmentExist(EvenCalend.Start, EvenCalend.Subject, MonSousDoss) = False Then

'On créé un nouvel événement sur le second calendrier
Set MonObj = MonSousDoss.Items.Add(olAppointmentItem)

'On affecte les variables précédentes à début, fin, sujet etc.
MonObj.Start = DateDeb
MonObj.End = DateFin
MonObj.Subject = Sujet
MonObj.Body = Texte
MonObj.Location = Lieu

'On ferme et on sauvegarde.
MonObj.Close olSave

End If
End If
Next EvenCalend

End Sub

Private Sub test_fc_AppointmentExist()
    Dim strDate
    Dim MyAgendaFolder As Outlook.Folder
    strDate = VBA.Format(Date - 1, "Short Date") & " 11:00 am"
    Set MyAgendaFolder = Application.GetNamespace("mapi").GetDefaultFolder(olFolderCalendar)
    MsgBox fc_AppointmentExist(CDate(strDate), "#123#PDF", MyAgendaFolder)

End Sub
Function fc_AppointmentExist(DateToCheck As Date, Sujet As String, MyAgendaFolder As Outlook.Folder) As Boolean
    Dim searchAgenda As Items
    Dim filtre
    fc_AppointmentExist = False
    Set searchAgenda = MyAgendaFolder.Items
    If DatePart("h", DateToCheck) + DatePart("n", DateToCheck) = 0 Then
        filtre = "[Start] = '" & Format(DateToCheck, "ddddd") & " 0:00 AM' " & " and [Subject] = '" & Sujet & "'"

    Else
        filtre = "[Start] = '" & Trim(Format(DateToCheck, "ddddd h:nn AMPM")) & "' and [Subject] = '" & Sujet & "'"
    End If
    Set searchAgenda = MyAgendaFolder.Items.Restrict(filtre)
    If searchAgenda.Count > 0 Then fc_AppointmentExist = True

End Function

bonjour

faire un essai : remplacer

If InStr(1, Sujet, "Congés", vbTextCompare) > 0 Then

par

 If InStr(1, Sujet, "Congés", vbTextCompare) > 0 or  InStr(1, Sujet, "formation", vbTextCompare) > 0 Then

mais attention avec l'option vbtextcompare, la comparaison est sensible à la casse (majuscule, accents,.....)

Fred

Bonjour,

Merci pour ce retour.

En fait j'avais déjà essayé cette fonction mais il me met cela en message d'erreur :

161222104733802697

quelle est la ligne surlignée en jaune dans le vba project lors de l'apparition de ce message ??

fred

fred2406 a écrit :

quelle est la ligne surlignée en jaune dans le vba project lors de l'apparition de ce message ??

fred

Difficile à dire...

Lorsque je fais une exécution pas à pas détaillé, il fait tourner la macro... il réalise plusieurs fois les boucles.

Tout à l'air de fonctionner parfaitement et un moment il bloque sur la ligne

If InStr(1, Sujet, "Congés", vbTextCompare) > 0 Or InStr(1, Sujet, "formation", vbTextCompare) > 0 Then

Alors qu'il y passe plusieurs fois avant...

Je ne comprends vraiment pas.

Si c'est cela je pense que c'est un problème sur un titre de ton calandrier...

met un

Debug.Print Sujet 

avant le if que je t'ais fait modifié...

et tu regarde dans la fenêtre "execution" du vbproject

cela t'affichera le sujet de la tache cela permettra peut etre de comprendre pourquoi il bloque sur un objet en particulier

fred

fred2406 a écrit :

Si c'est cela je pense que c'est un problème sur un titre de ton calandrier...

met un

Debug.Print Sujet 

avant le if que je t'ais fait modifié...

et tu regarde dans la fenêtre "execution" du vbproject

cela t'affichera le sujet de la tache cela permettra peut etre de comprendre pourquoi il bloque sur un objet en particulier

fred

Il ne m'affiche rien... juste la même erreur.

'On definit les variables de l'événement, debut, fin, sujet etc.
Sujet = EvenCalend.Subject
Debug.Print Sujet
If InStr(1, Sujet, "Congés", vbTextCompare) > 0 Or InStr(1, Sujet, "formation", vbTextCompare) > 0 Then

Je viens de réaliser un diagnostic complémentaire qui pourrait t'aider dans la réflexion....

Je viens de mettre uniquement le code :

If InStr(1, Sujet, "Congés", vbTextCompare) > 0 Then

Tout fonctionne parfaitement...

Par contre lorsque je remplace le mot congés par formation, il me met le message d'erreur déjà cité....

Dès que je change le mot "congés" finalement...

Par exemple, si je mets le mot "test" à la place de "congés" il me met le même message d'erreur mais "Erreur à Exposition".. au lieu de "Erreur à Eau"... Dans mon calendrier je n'ai pas du tout ce genre de terme en plus de ça...

donc je confirme c'est quelque chose dans les sujets de tes tâches du calendrier...

tu dois voir la fenêtre exécution si tu ne l'a pas dans le vba project faire

soit raccourci clavier "ctr+G"

soit dans le menu en haut "affichage"/"fenetre execution"

voici un exemple rapide de l’aperçu que tu devrais avoir :

capture

fred

Exact!!

J'ai ma fenêtre exécution... Je test de suite.... Je te fais un retour dans les 5 minutes


Je pense avoir trouvé!!!!!

Sur un sujet j'ai "Formation poste d'eau"... il ne doit pas aimer le " ' " !!

Comment faire lol ??


Je viens de faire le test sans l'apostrophe et tout est ok!!!

Y a t-il un moyen de remédier à ce problème ou pas ???

Merci beaucoup!!!!!! On avance!!! lol

Des heures de boulot qui ne sont pas perdues!! oufff lol

essai de faire cela :

Sujet = EvenCalend.Subject
sujet2 = replace (sujet,"'"," ")
If InStr(1, Sujet2, "Congés", vbTextCompare) > 0 Or InStr(1, Sujet2, "formation", vbTextCompare) > 0 Then

fred

Justement je viens de regarder...

Tout est ok. C'est vraiment uniquement l'apostrophe qui pose problème...

Je viens de tout rappatrier. Même lorsqu'il s'agit d'un F majuscule ou minuscule, il me le prend en compte... C'est ok.

On a déjà bien avancé!!! Enfin tu as bien avancé!!! mdr

Merci beaucoup Fred

nos messages se sont croisé car j'ai étdité mon precedent message donc je le remet ici :

essai de faire cela :

Sujet = EvenCalend.Subject
sujet2 = replace (sujet,"'"," ")
If InStr(1, Sujet2, "Congés", vbTextCompare) > 0 Or InStr(1, Sujet2, "formation", vbTextCompare) > 0 Then

fred

raté... lol

Même erreur

tu as bien fait le changement de la variable dans le if ???

as tu essayé de faire un debut.print de sujet2 ???

fred

Je vais regarder....

Par contre j'ai un autre problème mais je ne sais pas si tu pourras m'aider sur celui-ci...

J'ai partagé mon calendrier commun avec mes collègues...

Ils voient apparaître le calendrier, etc.. ils peuvent faire des modifications dessus, pas de soucis...

Par contre, lorsque je fais un copier coller de la macro sur leur Outlook, et que j'exécute, il me met un message d'erreur : "Index de la matrice en dehors des limites"...

Une idée en plus ?? lol

euh là aucune idée, a la fois j'ai jamais utilisé la calendrier outlook et encore moins le partage de calendrier....

mais une idée peut-être, si tes collègues ont deux calendriers peut-être l'ordre chez toi celui qui est par défaut le perso et le secondaire le partagé, chez eux peut-être l'inverse ??? ou tout simplement un seul calendrier...

encore une fois faudrais connaitre la ligne où se produit l'erreur.... (surligné en jaune dans vbproject au plantage)

fred

A tester effectivement...

Je te tiens au courant si j'y parviens!!

Merci beaucoup !!

sinon voir aussi le nom de l'espace utiliser :

le même chez tes collègues ???

Set MonNameSpace = MonApp.GetNamespace("MAPI")

Ouais... Il faut que je monopolise le pc d'un collègue cet après-midi lol.

Par contre tu me conseilles quoi si je veux mettre une date à partir de laquelle il commence à recopier les événements ?

pour éviter qu'il me recopie tout sur 3 ou 4 ans à chaque fois...

Cela me permettrait d'accélérer un peu la macro pour éviter qu'il reprenne à chaque fois au départ.

ne melangeons pas tout,

finir déjà ce problème d'apostrophe une fois resolu, voir ensuite si il n'est pas mieux d'ouvrir un nouveau sujet pour cette question plus précise. pour que quelqu'un de plus calé que moi puisse te repondre là dessus

fred

Rechercher des sujets similaires à "vba outlook"