Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Détecter un évennement

20 réponses
Avatar
eddymaue
Salut vous tous,

Est-ce qu'il existe une méthode en vba pour détecter les modifs dans le
calendrier ou le gestionnaire de taches ?


comme exemple un utilisateur sur Outlook décide de changer l'heure d'un
rendez-vous dans le calendrier, j'ai besoin de détecter cette
modification pour avertir d'autres colègues.

a+ Eddy

10 réponses

1 2
Avatar
eddymaue
salut

En mettant les éléments en surbrillance dans le listview, il est
surement possible de détecter ces éléments et du coup les items ciblés.

Hier j'ai tanté de trouver comment atteindre le listview de Contact et
ce fut sans succes.

Donc je suppose comment tu sais faire

a+ Eddy

J'apprécie ton aide et t'en remercie beaucoup



Geo a pensé très fort :
Bonjour Eddy

Alors comment trouver le contact, la tache ou l'appointement détruit ?



Apparemment l'événement se déclenche après la suppression, on n'a donc plus
l'élément, à moins qu'il ne soit dans les éléments supprimés.
Ce sera intéressant à savoir.
Il y a une page d'aide sur ItemRemove, avec un exemple :
HV10040494 (mettre cette référence dans la fenêtre de recherche)
Le premier paragraphe est particulièrement intéressant, mais ne laisse aucun
espoir pour les cas ignorés.
L'exemple prépare un message pour que l'opérateur mette lui-même le nom du
contact supprimé !
Mais ça montre aussi que vous êtes sur la bonne piste.


Avatar
Geo
Bonjour Eddy

En mettant les éléments en surbrillance dans le listview, il est surement possible de
détecter ces éléments et du coup les items ciblés.

Hier j'ai tanté de trouver comment atteindre le listview de Contact et ce fut sans
succes.



Je ne suis pas certain de comprendre ce qu'il y a derrière "listview"

Voici un code qui liste les éléments sélectionnés dans un liste que ce
soit tâches contacts ou autres.
Sub ListeSelection()
Dim AW As Object
Dim myOlApp As New Outlook.Application
Dim Exp As Explorer
Dim i As Integer
Set AW = ActiveWindow
If TypeName(AW) = "Explorer" Then
'pour bénéficier de l'intellisense
Set Exp = AW
Debug.Print Exp.Caption, Exp.Selection.count
For i = 1 To Exp.Selection.count
Debug.Print Exp.Selection.Item(i)
Next
End If
End Sub

--
A+
Avatar
Geo
> Avec ItemRemove il n'y a pas d'objet passé par valeur alors que les 2 autres
évennements soit ItemChange et ItemAdd il un objet passé par valeur

Alors comment trouver le contacte, la tache ou l'appointement détruit ?



Ce serait peut-être plus simple de faire un macro qui supprime l'objet
concerné et envoie le message d'avertissement.
On peut lancer la macro par une commande ajoutée dans un menu.

--
A+
Avatar
eddymaue
Ce qu'il manque c'est des évennements genres
BeforeDel BeforeItemDel ou BeforeItemRemove
BeforeAdd BeforeItemAdd ou BeforeItemIns
BeforeMod BeforeItemModif
AfterAdd ou AfterInsert
AfterMod ou After
AfterDel ou AfterItemRemove

en plus

... , After... Valid, When et autres

bref ce n'est pas moi qui vait réeussir à influencer les concepteurs du
Vba et je comprends pourquoi MS a abanndonné VB au profit de VB.net

quoi qu'il en soit merci de ton aide Geo, je crois avoir tout ce qu'il
me faut pour retourner dans mon p'tit monde (Visual Foxpro)

Pour ce qui de l'évent ItemRemove, je vais simplement constituer une
table pour y recenser toutes les EntryID des Contactes,Taches et des
appointments. Donc à l'activation de cet évennement, je n'airai qu'à
comparer l'entryID des contactes, taches et appointement restant pour
trouver celle qui a disparue.

En passant j'aime ce news il est réactif et il y a de bonnes personnes
ressources

a+ Eddy








Geo avait écrit le 2009-07-26 :
Avec ItemRemove il n'y a pas d'objet passé par valeur alors que les 2
autres évennements soit ItemChange et ItemAdd il un objet passé par valeur

Alors comment trouver le contacte, la tache ou l'appointement détruit ?



Ce serait peut-être plus simple de faire un macro qui supprime l'objet
concerné et envoie le message d'avertissement.
On peut lancer la macro par une commande ajoutée dans un menu.


Avatar
Geo
Bonjour Eddy

bref ce n'est pas moi qui vait réeussir à influencer les concepteurs du Vba



On aimerait bien que le vba évolue comme le vb.
Plus on sera nombreux a demander des évolutions du vba, plus on a des
chances d'être entendus.
MS a fait machine arrière pour la suppression du vba sur Mac.

quoi qu'il en soit merci de ton aide Geo, je crois avoir tout ce qu'il me faut pour
retourner dans mon p'tit monde (Visual Foxpro)



C'est pour ça que faire des tables ne te fait pas peur.

Bon courage pour la suite.

--
A+
Avatar
eddymaue
Allo Geo, j'ai trouvé

Public WithEvents MyContactItem As Outlook.ContactItem
Public WithEvents MyTaskItem As Outlook.TaskItem
Public WithEvents MyAppointmentItem As Outlook.AppointmentItem

et l'évennement c'est BeforeDelete()


Private Sub MyAppointmentItem_BeforeDelete(ByVal Item As Object, Cancel As Boolean)

End Sub


Private Sub MyContactItem_BeforeDelete(ByVal Item As Object, Cancel As Boolean)

End Sub

Private Sub myMailItem_BeforeDelete(ByVal Item As Object, Cancel As Boolean)

End Sub

Private Sub MyTaskItem_BeforeDelete(ByVal Item As Object, Cancel As Boolean)

End Sub

a+ Eddy et merci pour le reste, ca m'a fait avancer vite vite vite


Geo avait énoncé :
Bonjour Eddy

bref ce n'est pas moi qui vait réeussir à influencer les concepteurs du Vba



On aimerait bien que le vba évolue comme le vb.
Plus on sera nombreux a demander des évolutions du vba, plus on a des chances
d'être entendus.
MS a fait machine arrière pour la suppression du vba sur Mac.

quoi qu'il en soit merci de ton aide Geo, je crois avoir tout ce qu'il me
faut pour retourner dans mon p'tit monde (Visual Foxpro)



C'est pour ça que faire des tables ne te fait pas peur.

Bon courage pour la suite.


Avatar
Geo
> Allo Geo, j'ai trouvé



Merci Eddy pour ce tuyau.
Ca ira plus vite comme ça.

--
A+
Avatar
eddymaue
Salut Geo,

comme mon projet avance à grand pas la dossier Outlook est maintenant
clos et je peux enfin récupérer tous les évènements déclenchés par
l'utilisateur.

à savoir quel item des modules Tâche, Calendrier et Contact qui
subissent des modifs, ajouts ou qui sont détruits.

Pour ce qui conserne l'évènement _BeforeDelete(ByVal Item As Object,
Cancel As Boolean) je n'ai pas réeussit à le mettre à exécution ce qui fait que j'ai
poursuivit mes recherches et j'ai trouvé ce qui suit et qui fonctionne
très bien. De plus c'est utilisable pour les versions plus anciennes que la 2007

Alors voilà

'Module ThisOutlookSession
Option Explicit
Dim y As New Delete_Item
Dim X As New Modif_item
Dim z As New Ajout_Item



Private Sub Application_Startup()

' 2009-08-26
Set y.ApOutLook = CreateObject("Outlook.Application")
Set z.ApOutLook = CreateObject("Outlook.Application")

' 2009-07-24
Set X.ApOutLook = CreateObject("Outlook.Application")
End Sub

'------------------------------------------------------------------

' Module Class Delete_item
Option Explicit
Public ApOutLook As New Outlook.Application
Dim WithEvents objCalandarlFolder As Outlook.Folder
Dim WithEvents objTasklFolder As Outlook.Folder
Dim WithEvents objContactlFolder As Outlook.Folder

Dim objDelFolder As Outlook.Folder
Private Sub class_initialize()
Set objTasklFolder = Application.Session.GetDefaultFolder(olFolderTasks)
Set objCalandarlFolder = Application.Session.GetDefaultFolder(olFolderCalendar)
Set objContactlFolder = Application.Session.GetDefaultFolder(olFolderContacts)
Set objDelFolder = Application.Session.GetDefaultFolder(olFolderDeletedItems)

End Sub

Private Sub objCalandarlFolder_BeforeItemMove(ByVal Item As Object, ByVal MoveTo As MAPIFolder, Cancel As Boolean)

If MoveTo Is Nothing Then
Debug.Print Item.Subject & " was hard deleted"
ElseIf MoveTo = objDelFolder Then
Debug.Print Item.Subject & " was moved to Deleted Items"
End If
End Sub
Private Sub objTasklFolder_BeforeItemMove(ByVal Item As Object, ByVal MoveTo As MAPIFolder, Cancel As Boolean)

If MoveTo Is Nothing Then
Debug.Print Item.Subject & " was hard deleted"
ElseIf MoveTo = objDelFolder Then
Debug.Print Item.EntryID & " was moved to Deleted Items"
Debug.Print Item.Subject & " was moved to Deleted Items"

End If
End Sub

Private Sub objContactlFolder_BeforeItemMove(ByVal Item As Object, ByVal MoveTo As MAPIFolder, Cancel As Boolean)

If MoveTo Is Nothing Then
Debug.Print Item.Subject & " was hard deleted"
ElseIf MoveTo = objDelFolder Then
Debug.Print Item.EntryID & " was moved to Deleted Items"
Debug.Print Item.Subject & " was moved to Deleted Items"

End If
End Sub







Après mûre réflexion, Geo a écrit :
Allo Geo, j'ai trouvé



Merci Eddy pour ce tuyau.
Ca ira plus vite comme ça.


Avatar
Geo
Bonjour Eddy

C'est sympa de faire part de la suite de ce projet.
Je vais archiver ce courriel plein d'enseignements.
Ca devient plutôt complexe, je suppose que les modules Modif_item et
Ajout_Item sont bâtis sur le même modèle.

Bonne continuation.

--
A+
Avatar
eddymaue
Exacte c'est seulement pour classifier les méthodes selon leurs types
d'actions

bonne journée

a+ eddy
Geo avait écrit le 2009-08-28 :
Bonjour Eddy

C'est sympa de faire part de la suite de ce projet.
Je vais archiver ce courriel plein d'enseignements.
Ca devient plutôt complexe, je suppose que les modules Modif_item et
Ajout_Item sont bâtis sur le même modèle.

Bonne continuation.


1 2