Macro outlook
Bonsoir
Nouveau sur ce forum, merci d’avance de votre accueil. J’ai beaucoup cherché sur la toile et j’ai beaucoup trouvé aussi, mais le fait d’être débutant fait que je n’arrive pas en m’en sortir avec tous les exemples de macro trouver.
Voici donc mon problème : j’essaie de faire une macro qui va créer une tache (rappel) dans Outlook à une date mis dans une colonne (F). La macro fonctionne mais si j’ai plusieurs mêmes dates dans ma colonne, je me retrouve qu’avec une seule alerte !
J’aimerais aussi que ce soit un envoi dès que la date du jour soit dépassé car j’ai remarqué que l’envoie fonctionne que jour -1.
J'aimerais aussi mettre le texte de la colonne (A) a la place de "Alerte".
Voici ma macro
Sub Send_Tache_Outlook()
Dim MyOut As New Outlook.Application
Dim MyTassk As TaskItem
Set MyTask = MyOut.CreateItem(olTaskItem)
Dlg = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
For R = 4 To 41
If UCase(Sheets("Feuil1").Cells(R, 8)) <> "X" And Sheets("Feuil1").Cells(R, 6) = Date - 1 Then
With MyTask
.Subject = "Alerte"
.Body = "Le décompte envoyé le " & Sheets("Feuil1").Cells(R, 6) & "Pour la maintenance effectuée sur la commune de " & Sheets("Feuil1").Cells(R, 1) & " n'a toujours pas été validé par le client, merci de faire une relance"
End With
Set outapp = Nothing
Sheets("Feuil1").Cells(R, 8) = "X" 'Mise du X en colonne H
End If
Next
MyTask.Save
End Sub
Je vous remercies d'avance.
Xavier
Bonsoir
Dite moi si réalisable ou pas ?
Je me suis peut être pas très bien expliqué ? j'en suis désolé !
CDT
Xavier
Bonjour
Peux tu mettre ton fichier stp.
Je vais regarder.
Cdt,
Bonsoir
Merci beaucoup de vouloir m'aider. Je joint mon fichier qui n'est pas encore fini.
CDT
Xavier
xshbl a écrit :Bonsoir
Merci beaucoup de vouloir m'aider. Je joint mon fichier qui n'est pas encore fini.
CDT
Xavier
peux tu tester ce code?
Sub Send_Tache_Outlook()
Dim MyOut As New Outlook.Application
Dim MyTassk As TaskItem
Set MyTask = MyOut.CreateItem(olTaskItem)
Dim debut
Dlg = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
der_lign = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
'Definition à la main de ton début
debut = 4
'on parcours chaque ligne de la colonne A
For Each c In Sheets("Feuil1").Range("A" & debut & ":A" & der_lign)
'on s'assure que la donnée n'est pas vide + colonne H différente de X
If c <> "" And c.Offset(0, 7) <> "X" And c.Offset(0, 5) = Date - 1 Then
With MyTask
.Subject = "Alerte"
.Body = "Le décompte envoyé le " & c.Offset(0, 4) & _
" pour la maintenance effectuée sur la commune de " & c & _
" n'a toujours pas été validé par le client, merci de faire une relance"
End With
'mise a X de la colonne H
c.Offset(0, 7) = "X"
MyTask.Save
Set outpp = Nothing
End If
Next
End Sub
Bonsoir ti_chou_3
Tout dabord merci de m'aider. Je viens d'essayer ton code mais rien ne se passe, pas de tache sur Outlook, pas de "x" dans la colonne "H" ?!
J'ai donc essayé avec mon ancien code et cela fonctionne mais avec bien-sur tous les défauts.
Encore merci
CDT
Xavier
xshbl a écrit :Bonsoir ti_chou_3
Tout dabord merci de m'aider. Je viens d'essayer ton code mais rien ne se passe, pas de tache sur Outlook, pas de "x" dans la colonne "H" ?!
J'ai donc essayé avec mon ancien code et cela fonctionne mais avec bien-sur tous les défauts.
Encore merci
CDT
Xavier
Bonsoir
La date de rappel est elle a jour -1?
Quelle est la condition si date rappel est jour -1 alors rappel est ce bien cela?
Pour tes deux premieres lignes mets la date d hier et execute la requete
Cdt,
Re
Désolé il fallait vraiment que je commence à la ligne 4, par contre si je rentre plusieurs dates (-1 du jour) en colonne F, il me met bien un "x" en face (colonne H) mais je reçois qu'une seule tache sur Outlook.
Merci
CDT
Xavier
xshbl a écrit :Re
Désolé il fallait vraiment que je commence à la ligne 4, par contre si je rentre plusieurs dates (-1 du jour) en colonne F, il me met bien un "x" en face (colonne H) mais je reçois qu'une seule tache sur Outlook.
Merci
CDT
Xavier
C'est bon j'ai oublié de placer la création de l'item de tache dans ma boucle
ps j'ai aussi mis comme nom de tache Tache: + nom de la tache c'est plus visuel
Sub Send_Tache_Outlook()
Dim MyOut As New Outlook.Application
Dim MyTassk As TaskItem
Dim debut
Dlg = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
der_lign = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
'Definition à la main de ton début
debut = 4
'on parcours chaque ligne de la colonne A
For Each c In Sheets("Feuil1").Range("A" & debut & ":A" & der_lign)
'on s'assure que la donnée n'est pas vide + colonne H différente de X
If c <> "" And c.Offset(0, 7) <> "X" And c.Offset(0, 5) = Date - 1 Then
'creation de tache imbrique dans boucle
Set mytask = MyOut.CreateItem(olTaskItem)
With mytask
.Subject = "Alerte" & " : " & c
.Body = "Le décompte envoyé le " & c.Offset(0, 4) & _
"Pour la maintenance effectuée sur la commune de " & c & _
" n'a toujours pas été validé par le client, merci de faire une relance"
.Save
End With
'mise a X de la colonne H
c.Offset(0, 7) = "X"
'mise a zero de mytask
Set mytask = Nothing
End If
Next
End Sub
Super, vraiment merci, ça fonctionne très bien……..cool
D’après vous peut on mettre le texte de la colonne A à la place de "alerte" mis dans la macro et peut on facilement créer les taches a une date quelconque inférieures à la date du jour en remplacement à date -1 ?
Si trop de bouleau alors juste cette macro me ravis
Encore merci
Xavier
xshbl a écrit :Super, vraiment merci, ça fonctionne très bien……..cool
D’après vous peut on mettre le texte de la colonne A à la place de "alerte" mis dans la macro et peut on facilement créer les taches a une date quelconque inférieures à la date du jour en remplacement à date -1 ?
Si trop de bouleau alors juste cette macro me ravis
Encore merci
Xavier
alors pour remplacer alerte par la colonne a
.Subject = c
et peut on facilement créer les taches a une date quelconque inférieures à la date du jour en remplacement à date -1 ? ???
Pourriez vous me donner plus de détails?
cdt,
ok merci je vais essayer pour la colonne A.
Oui je m’explique très mal, désolé
En fait dans mon tableau j’ai une dates début de session colonne E rangée 4 et à partir de cette date mon tableau m, envoie les taches a faires à tel date (donc toujours inférieure a la date de départ (colonne E Rangée 4).
Je suis pas certain de vous avoir bien expliqué ......
xshbl a écrit :ok merci je vais essayer pour la colonne A.
Oui je m’explique très mal, désolé
En fait dans mon tableau j’ai une dates début de session colonne E rangée 4 et à partir de cette date mon tableau m, envoie les taches a faires à tel date (donc toujours inférieure a la date de départ (colonne E Rangée 4).
Je suis pas certain de vous avoir bien expliqué ......
on donc une alerte est à créer a l approche de cette date en colonne E est-ce bien cela?
Une alerte de date fixe? -4 jours, -5 jours ? ou qu'on paramètre quelque part sur excel dans une feuille paramétrage par exemple
cdt,
Bonjour
Non vous avez raison c'est bien à l'approche de la date -1. Donc votre code est parfait. merci
En fait ce fichier va me servir de pense bete. Je vais le faire ouvrir automatiquement avec Windows. Peut on faire demarrer la macro à l'ouverture du fichier ?
Peut on refermer le fichier automatiquement ?
Peut on travailler dans l'autre sens => mettre un "X" en colonne "I" lorsque l'on a effectué une tache ?
Merci pour votre patience
Xavier
xshbl a écrit :Bonjour
Non vous avez raison c'est bien à l'approche de la date -1. Donc votre code est parfait. merci
En fait ce fichier va me servir de pense bete. Je vais le faire ouvrir automatiquement avec Windows. Peut on faire demarrer la macro à l'ouverture du fichier ?
Peut on refermer le fichier automatiquement ?
Peut on travailler dans l'autre sens => mettre un "X" en colonne "I" lorsque l'on a effectué une tache ?
Merci pour votre patience
Xavier
Bonsoir
Oui pr l execution a ouverture & changement a I. Collez le code et toutes les modifs sont la.
Sub workbook_open()
Dim MyOut As New Outlook.Application
Dim MyTassk As TaskItem
Dim debut
Dlg = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
der_lign = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
'Definition à la main de ton début
debut = 4
'on parcours chaque ligne de la colonne A
For Each c In Sheets("Feuil1").Range("A" & debut & ":A" & der_lign)
'on s'assure que la donnée n'est pas vide + colonne H différente de I
If c <> "" And c.Offset(0, 7) <> "I" And c.Offset(0, 5) = Date - 1 Then
'creation de tache imbrique dans boucle
Set mytask = MyOut.CreateItem(olTaskItem)
With mytask
.Subject = c
.Body = "Le décompte envoyé le " & c.Offset(0, 4) & _
" pour la maintenance effectuée sur la commune de " & c & _
" n'a toujours pas été validé par le client, merci de faire une relance"
.Save
End With
'mise a I de la colonne H
c.Offset(0, 7) = "I"
'mise a zero de mytask
Set mytask = Nothing
End If
Next
End Sub
Bonsoir ti_chou_3
Merci beaucoup pour votre nouveau code et surtout de continuer sur mon sujet.
En fait je me suis très mal expliqué, je voulais savoir si on pouvait travailler à l'envers, c'est a dire de Outlook vers le fichier Excel ?
Grace à votre macro je génère des taches (rappel) dans Outlook et j'ai une croix dans la colonne H pour m'indiquer que le rappel à bien était effectuer. Une fois la tache effectuée, lorsque je clic sur le drapeau rouge d'Outlook pour la supprimer, peut on créer une crois en colonne I par exemple ?
Le dernier code que vous avez posté ne se lance pas à l'ouverture ?!
La macro à ce jour me convient vraiment et encore merci, la demande du lancement à l'ouverture et du travail à l'envers reste du suppléant, donc si vous en avait marre ...........
CDT
Xavier
xshbl a écrit :Bonsoir ti_chou_3
Merci beaucoup pour votre nouveau code et surtout de continuer sur mon sujet.
En fait je me suis très mal expliqué, je voulais savoir si on pouvait travailler à l'envers, c'est a dire de Outlook vers le fichier Excel ?
Grace à votre macro je génère des taches (rappel) dans Outlook et j'ai une croix dans la colonne H pour m'indiquer que le rappel à bien était effectuer. Une fois la tache effectuée, lorsque je clic sur le drapeau rouge d'Outlook pour la supprimer, peut on créer une crois en colonne I par exemple ?
Le dernier code que vous avez posté ne se lance pas à l'ouverture ?!
La macro à ce jour me convient vraiment et encore merci, la demande du lancement à l'ouverture et du travail à l'envers reste du suppléant, donc si vous en avait marre ...........
CDT
Xavier
Bonsoir
Point 1:
L'appelation de la macro workbook_open fait qu'elle se déclenche au démarrage.
Si vous avez un doute
placez un msgbox, msgbox "TEST", rien de plus simple comme test.
La macro a-t-elle été placée dans this workbook?
Point2:
Oula.. cela présume non plus de faire une macro excel mais placer une macro dans outlook.
C'est un peu hardos j'ai jamais testé ...
PAr contre je peux regarder pour chaque ligne ayant un X si un rendez vous outlook existe selon nom tache on laisse si n'existe plus on met un X dans la colonne OUI
Ps : mon dernier code il faut modifier les "I" par des "X" donc !
Cdt,
re
Je viens de contrôler la macro se trouve dans thisworkbook et dans module1 !?
Je suis trop novice, je n'est pas compris la solution pour tester le démarrage de la macro : "placez un msgbox, msgbox "TEST", rien de plus simple comme test".
Je suis preneur de votre solution en se qui concerne votre solution de contrôle des X
Vraiment merci
Xavier
xshbl a écrit :re
Je viens de contrôler la macro se trouve dans thisworkbook et dans module1 !?
Je suis trop novice, je n'est pas compris la solution pour tester le démarrage de la macro : "placez un msgbox, msgbox "TEST", rien de plus simple comme test".
Je suis preneur de votre solution en se qui concerne votre solution de contrôle des X
Vraiment merci
Xavier
Et la voici la solution, je viens de la finir :
voila le code :
Sub workbook_open()
MsgBox " Lancement de la macro !"
Dim MyOut As New Outlook.Application
Dim MyTassk As TaskItem
Dim debut
Dim Ol_App As New Outlook.Application
Dim Ol_Mapi As Outlook.Namespace
Dim Ol_Items As Outlook.Items
Dim Ol_Item As Outlook.TaskItem
Set Ol_Mapi = Ol_App.GetNamespace("MAPI")
Set Ol_Items = Ol_Mapi.GetDefaultFolder(olFolderTasks).Items
Dlg = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
der_lign = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
'Definition à la main de ton début
debut = 4
'analyse tâches inscrites sur outlook mais deja réalisés
For Each c In Sheets("Feuil1").Range("A" & debut & ":A" & der_lign)
If c.Offset(0, 7) = "X" Then 'tache envoyée sur outlook
i = 0
For Each Ol_Item In Ol_Items
If Ol_Item.Subject = c Then ' si el nom du rappel est une des lignes envoyées à Outlook alors
GoTo Passe2 'on ne fait rien si le rappel existe toujours
End If
i = i + 1
Next Ol_Item
If i = Ol_Items.Count Then
c.Offset(0, 8) = "X" 'on passe la colonne I à X car envoi deja fait - si on passe par la c'est que le rendez vous n'existe plus
End If
End If
Next
Passe2:
'on parcours chaque ligne de la colonne A
For Each c In Sheets("Feuil1").Range("A" & debut & ":A" & der_lign)
'on s'assure que la donnée n'est pas vide + colonne H différente de I
If c <> "" And c.Offset(0, 7) <> "X" And c.Offset(0, 5) = Date - 1 Then
'creation de tache imbrique dans boucle
Set mytask = MyOut.CreateItem(olTaskItem)
With mytask
.Subject = c
.Body = "Le décompte envoyé le " & c.Offset(0, 4) & _
" pour la maintenance effectuée sur la commune de " & c & _
" n'a toujours pas été validé par le client, merci de faire une relance"
.Save
End With
'mise a I de la colonne H
c.Offset(0, 7) = "X"
'mise a zero de mytask
Set mytask = Nothing
End If
Next
Set Ol_Item = Nothing
Set Ol_Items = Nothing
Set Ol_Mapi = Nothing
Set Ol_App = Nothing
Copiez ce code
coller le dans this workbook
supprimer ce qu'il y a dans module 1
Je viens de tester de mon côté c'est bon
Je suis vraiment désolé mais a l'ouverture du fichier j'ai une erreur d,execution 2147417851 la methode subject de l'objet taskitem à echoué.
Et j'ai la ligne : .Subject = c surlignée en jaune
Xavier
et si je laisse le fichier ouvert et que je lance la macro manuellement j'ai " erreur automation Le serveur à généré une exception