Rappel Outlook via Excel MSOffice 2016

Fermé
AuroreD67 Messages postés 15 Date d'inscription jeudi 6 juillet 2017 Statut Membre Dernière intervention 11 juillet 2017 - 6 juil. 2017 à 15:48
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 11 juil. 2017 à 11:29
Bonjour,

Je souhaite faire un rappel dans Outlook via des dates de relance contenues dans un tableau Excel. J'ai repris une macro qui fonctionne parfaitement mais je souhaite la modifier : elle crée un rappel pour chaque cellule contenant une date -> Par exemple, J'ai 8 relances à faire le 1er août, elle me place 8 RDV dans Outlook. Ce que je veux faire : n'avoir qu'un RDV créé par date -> J'ai 8 relances à faire le 1er août, elle me crée un seul RDV "Relance".

Merci d'avance pour l'aide apportée !

N'hésitez pas si vous avez besoin de précisions.

Aurore

Pour info, le code :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MaPlage As Range
'ici on détermine la plage dont les modifications déclencheront la procédure :
Set MaPlage = Range("M2:M500") '***** A ADAPTER ******
'si la cellule modifiée n'est pas dans notre plage on quitte la procédure sans rien faire
If Intersect(MaPlage, Target) Is Nothing Then Exit Sub
'sort également de la procédure si tu effaces le contenu d'une cellule date
If Target.Value = "" Then Exit Sub
'déclaration des variables
Dim strSujet As String, strDescription As String, strLocation As String, datDate As Date, IntDuree As Integer, strCategorie As String
'Attribution des valeurs aux variables
'il est possible de remplacer les valeurs "en dur" par des valeurs contenues dans les cellules
'pour cela, se baser sur Target (= la cellule date modifiée) et faire varier l'Offset pour cibler la bonne cellule
'dans cet exemple, Target est en colonne E.
'Pour cibler la cellule située en colonne A de la même ligne, il convient d'utiliser : Target.Offset(0, -4).Value
'Pour cibler la cellule située en colonne G de la même ligne, il convient d'utiliser : Target.Offset(0, 2).Value
strSujet = "Relance"
strDescription = "....Description...."
strLocation = ""
datDate = CDate(Target.Offset(0, 1).Value)
'petit test. Si ta cellule date ne contient pas l'heure, l'heure par défaut sera 08:00:00
'inutile de changer le format de la date, la saisir au format jj/mm/aaaa
If InStr(datDate, ":") = 0 Then datDate = CDate(datDate & " 08:00:00")
IntDuree = 30
strCategorie = "Travail"
'Appel de la procédure
Call NouveauRDV_Calendrier(strSujet, strDescription, strLocation, datDate, IntDuree, strCategorie)
End Sub

Sub NouveauRDV_Calendrier(Sujet As String, Description As String, Locat As String, maDate As Date, duree As Integer, Cat As String)
'Nécessite d'activer la référence "Microsoft Outlook xx.x Object Library"
Dim OkApp As New Outlook.Application
Dim Rdv As Outlook.AppointmentItem

Set Rdv = OkApp.CreateItem(olAppointmentItem)

With Rdv
.MeetingStatus = olMeeting
.Subject = Sujet
.Body = Description
.Location = Locat
.Start = maDate
.Duration = duree
.Categories = Cat
.Save
End With

Set OkApp = Nothing
End Sub
A voir également:

4 réponses

yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
7 juil. 2017 à 14:28
voilà, je suggère de remplacer
Call NouveauRDV_Calendrier(strSujet, strDescription, strLocation, datDate, IntDuree, strCategorie)

par
sadate = CLng(datDate)
saligne = Target.Row
trouve = False
nlig = Cells(Rows.Count, "N").End(xlUp).Row
For i = 2 To nlig
    If (CLng(CDate(Cells(i, "N"))) = sadate) And (i <> saligne) Then
        trouve = True
        Exit For
    End If
Next i
If trouve Then
    Call NouveauRDV_Calendrier(strSujet, strDescription, strLocation, datDate, IntDuree, strCategorie)
End If 
 

et d'ajouter ceci juste après tes autres lignes "Dim":
Dim nlig As Long, i As Long
Dim sadate As Date
Dim saligne As Long
Dim trouve As Boolean
1
AuroreD67 Messages postés 15 Date d'inscription jeudi 6 juillet 2017 Statut Membre Dernière intervention 11 juillet 2017
7 juil. 2017 à 15:48
Merci.

Après modif, il y aurait une erreur à ce niveau :
If (CLng(CDate(Cells(i, "N"))) = sadate) And (i <> saligne) Then
Avec l'erreur : "Run-time error '13': Type mismatch
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > AuroreD67 Messages postés 15 Date d'inscription jeudi 6 juillet 2017 Statut Membre Dernière intervention 11 juillet 2017
7 juil. 2017 à 16:01
j'ai supposé qu'il n'y avait que des dates en colonne N (ou bien des cellules vides). ceci va tenir compte des lignes avec autre chose qu'une date.
remplace
    If (CLng(CDate(Cells(i, "N"))) = sadate) And (i <> saligne) Then
        trouve = True
        Exit For
    End If

par
    If IsDate(Cells(i, "N")) And (i <> saligne) Then
        If (CLng(CDate(Cells(i, "N"))) = sadate)  Then
            trouve = True
            Exit For
        End If
    End If
0
AuroreD67 Messages postés 15 Date d'inscription jeudi 6 juillet 2017 Statut Membre Dernière intervention 11 juillet 2017 > yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024
Modifié le 7 juil. 2017 à 16:09
Merci, ça fonctionne comme ça. Dans la colonne N ce sont des dates ou des cellules vides mais avec une formule (du type IF(M1="";"";M1+30)). Par contre je viens de tester en remettant à jour 2 lignes (envoi : 07/07, relance le 07/08), il m'a créé 2 RDV dans mon calendrier.

PS : comme c'est pour le travail, je ne pourrai pas te donner plus d'infos avant Lundi ou même tester les modifs du code. Merci de ton aide et bon weekend !
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > AuroreD67 Messages postés 15 Date d'inscription jeudi 6 juillet 2017 Statut Membre Dernière intervention 11 juillet 2017
7 juil. 2017 à 16:22
je n'ai pas tenu compte qu'il s'agissait de formules!
il faut remplacer
    If IsDate(Cells(i, "N")) And (i <> saligne) Then
        If (CLng(CDate(Cells(i, "N"))) = sadate)  Then

par
    If IsDate(Cells(i, "N").Value) And (i <> saligne) Then
        If (CLng(CDate(Cells(i, "N").Value)) = sadate)  Then

bon week-end!
0
AuroreD67 Messages postés 15 Date d'inscription jeudi 6 juillet 2017 Statut Membre Dernière intervention 11 juillet 2017 > yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024
10 juil. 2017 à 08:22
Bonjour,
Merci, ça fonctionne pour la colonne N avec les dates calculées. Par contre, dès que je rentre plusieurs fois la même date (par exemple 10/07) dans la colonne d'envoi (donc deux relances au 10/08), la macro me crée toujours deux RDV..
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
6 juil. 2017 à 21:33
bonsoir, peux-tu préciser comment tu vas traiter les information spécifiques à chaque relance (strSujet, strDescription, strLocation, IntDuree, strCategorie), quand tu ne fais qu'une relance par jour?
0
AuroreD67 Messages postés 15 Date d'inscription jeudi 6 juillet 2017 Statut Membre Dernière intervention 11 juillet 2017
6 juil. 2017 à 22:38
En fait le sujet c'est juste relance, il n'y a pas vraiment de description, location, durée, etc. C'est juste pour me faire un pense-bête (d'ouvrir mon fichier pour faire les relances téléphoniques). Il n'y a pas de traitement d'information derrière.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
7 juil. 2017 à 09:31
il me semble que ta macro ne fait pas ce que tu décris: je pense qu'elle crée un rappel à chaque modification dans la colonne M. donc la macro n'a pas une vue d'ensemble de tous les rappels qu'elle va créer.
sur base de quoi souhaites-tu que la macro décide de créer le rappel ou pas?
souhaites-tu simplement que la macro mémorise les rappels crées depuis que le fichier excel est ouvert, pour ne pas créer deux fois le même rappel pendant que le fichier est ouvert?
0
AuroreD67 Messages postés 15 Date d'inscription jeudi 6 juillet 2017 Statut Membre Dernière intervention 11 juillet 2017
7 juil. 2017 à 13:01
Effectivement, je l'ai prise sur CCM mais sans la modifier (ne sachant pas coder en VBA). En fait j'ai une colonne "date envoi" (colonne M) et une colonne "date relance" (colonne N) qui calcule automatiquement (date envoi + 30 jours). Il faudrait que la macro me fasse un rappel Outlook à partir de la colonne relance mais qu'une seule fois par date qui apparaît (comme dit précédemment, j'ai 8 relances à faire le 1er aout mais je veux qu'elle me mette qu'un seul rappel).
Après, comme j'ouvre et je ferme plusieurs fois mon fichier dans la journée, il faudrait que dès qu'une nouvelle date apparait dans la colonne relance (N) elle crée un rappel si cette date ne possède pas encore de rappel.
Je ne sais pas si je suis claire sur la demande, n'hésites pas si tu as besoin de plus d'infos ou de mon fichier pour exemple.
Merci pour ton aide en tout cas !
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > AuroreD67 Messages postés 15 Date d'inscription jeudi 6 juillet 2017 Statut Membre Dernière intervention 11 juillet 2017
7 juil. 2017 à 13:09
Il suffit donc d'adapter ta macro, afin de n’appeler NouveauRDV_Calendrier que si la date n'est pas présente sur une autre ligne de la colonne N.
c'est bien cela?
0
AuroreD67 Messages postés 15 Date d'inscription jeudi 6 juillet 2017 Statut Membre Dernière intervention 11 juillet 2017
7 juil. 2017 à 13:18
Oui c'est ça.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
8 juil. 2017 à 22:55
Bonjour,

Tu veux avec Outlook à tout prix ?
Tu peux demander à excel d'ouvrir le fichier aux dates-heures voulues.
A tester : https://mon-partage.fr/f/nGNKaKqX/
eric
0
AuroreD67 Messages postés 15 Date d'inscription jeudi 6 juillet 2017 Statut Membre Dernière intervention 11 juillet 2017
10 juil. 2017 à 08:27
Bonjour,
Merci pour ton idée. Oui c'est avec Outlook forcément (vu que c'est ma boite mail + agenda, etc.). Par contre je ne vois pas ce que fait exactement la macro...
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
10 juil. 2017 à 09:00
Bonjour,

lorsque tu saisis une date (en M) excel enregistre le fait qu'il faut ouvrir le fichier à la date de relance (en N) à 8:00.
Aux jours dits il s'ouvre automatiquement s'il y a un rappel (même si l'heure ou la date sont dépassés car PC éteint) et t'affiche une boite de dialogue avec le nombre de relances du jour, son icone de la barre de tâches clignote s'il était déjà ouvert en arrière plan.
eric
0
AuroreD67 Messages postés 15 Date d'inscription jeudi 6 juillet 2017 Statut Membre Dernière intervention 11 juillet 2017
10 juil. 2017 à 09:19
Excel arrive à ouvrir le fichier même s'il n'est pas lancé ? Je veux dire, par exemple j'arrive le matin, j'allume le PC et dès que je suis sur ma session Excel se lance ?
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
10 juil. 2017 à 11:58
Oui s'il y a eu un rappel, c'est ça le principe.
Change l'heure dans la macro et met-toi un rappel bidon pour aujourd'hui dans 2 min et ferme excel, tu verras.
0
AuroreD67 Messages postés 15 Date d'inscription jeudi 6 juillet 2017 Statut Membre Dernière intervention 11 juillet 2017
10 juil. 2017 à 16:11
Je viens de tester en modifiant l'heure dans le code et en ajoutant une date d'envoi de façon à avoir aujourd'hui dans la colonne relance. Excel ne se lance pas du tout...
0