Créer un rdv Outlook pour chaque date d'une colonne Excel

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
M
Mix2timon
Nouveau venu
Nouveau venu
Messages : 6
Inscrit le : 4 août 2012
Version d'Excel : 2007/2010

Message par Mix2timon » 4 août 2012, 04:06

Bonjour,

Après des semaines de recherches, je ne trouve qu'une partie de mes réponses.
Mon niveau en VBA ne me permet pas de finaliser ma macro.

Fonction recherchée :
Création d'un RDV Outlook pour toutes les dates présentent dans une colonne sur Excel (Relance client).
Colonne A : Noms du client
Colonne B : Date de la relance
Colonne C : Raison de la relance

Points de blocages :
- Créer une boucle permettant de récupérer toutes les dates contenues entre B3 et B500 (cellules non vides uniquement) et créer un rdv en y associant les Noms de client et Raison de la relance correspondants (même ligne, mais colonne A et C).
- Eviter qu'à chaque redémarrage du classeur, les rdv déjà rentrées le soient de nouveau sur Outlook (tester si un rdv contenant le même objet existe déjà, si oui ne rien faire)

Voici ce que j'ai pour le moment :
Sub AjoutRV()
Dim outobj As Outlook.Application
Dim outappt As Outlook.AppointmentItem
Set outobj = CreateObject("outlook.application")
Dim Cell As Range
Dim DateRdv As Date



For Each Cell In Sheets("Feuil2").Range("B3:B" & Range("B10").End(xlUp).Row)
    DateRdv = ActveCell

Set outappt = outobj.CreateItem(olAppointmentItem)

With outappt
.Subject = "Rappeler " & Range("a3") & " pour " & Range("c3")
.Start = DateRdv
.Duration = 60
.ReminderSet = True
.Save

End With

Set outappt = Nothing

Next Cell
End Sub
RÉSULTAT : 7 fois le même rappel, programmé en 1899.

Pouvez-vous m'aider svp ??
Avatar du membre
BrunoM45
Modérateur
Modérateur
Messages : 3'448
Appréciations reçues : 142
Inscrit le : 29 octobre 2011
Version d'Excel : 2016 FR, O365 FR
Contact :

Message par BrunoM45 » 4 août 2012, 11:22

Bonjour Mix2timon,

Voici un fichier avec les éléments que tu as donné et le code quelque peu modifié ;)

Fichier supprimé car bug, voir discussion suivante :wink:

A+
Modifié en dernier par BrunoM45 le 12 février 2016, 19:08, modifié 1 fois.
[F1] est une touche qui appelle l'aide : Essayez, c'est assez performant et on trouve plein de choses

Il n'y a ni bon ni mauvais usage de la liberté d'expression, il n'en existe qu'un usage insuffisant.
M
Mix2timon
Nouveau venu
Nouveau venu
Messages : 6
Inscrit le : 4 août 2012
Version d'Excel : 2007/2010

Message par Mix2timon » 4 août 2012, 12:05

Bonjour Bruno,

Merci de ta réactivité.
Finalement, lorsque je l'applique à mon classeur, parfois ça marche et parfois ça me met une erreur 13 : "Incompatibilité de type" à la ligne suivante : .Start = DateRdv & " 09:00"
Lorsque j'enlève le " 09:00", Ça me créé des rappels non stop en 1899 !
Dans ton code, le fait de ne créer des rappels qu'aux lignes contenants une date de relance, ne se fait pas.
En effet, la macro se déroule et créé des rappels pour TOUTES les lignes, et non pas uniquement pour les cellules contenants une date.

As-tu une idée ?

Merci beaucoup pour ton aide.
Avatar du membre
BrunoM45
Modérateur
Modérateur
Messages : 3'448
Appréciations reçues : 142
Inscrit le : 29 octobre 2011
Version d'Excel : 2016 FR, O365 FR
Contact :

Message par BrunoM45 » 4 août 2012, 17:35

Re,

Pour la date de RDV, qu'elle version d'Outlook utilises-tu ?

Désolé, j'ai oublié un test ;)

Voici le fichier modifié, chez moi le RDV est bien créé à la bonne date et bonne heure

A+
Mix2timon_Exemple1.xlsm
(19.01 Kio) Téléchargé 1755 fois
[F1] est une touche qui appelle l'aide : Essayez, c'est assez performant et on trouve plein de choses

Il n'y a ni bon ni mauvais usage de la liberté d'expression, il n'en existe qu'un usage insuffisant.
M
Mix2timon
Nouveau venu
Nouveau venu
Messages : 6
Inscrit le : 4 août 2012
Version d'Excel : 2007/2010

Message par Mix2timon » 4 août 2012, 20:22

Re,

Merci pour l'ajout du test des cellules non vides.
J'utilise Outlook 2010 et 2007 sur mon PC pro.

Ça fonctionne encore moyennement.
Une fois tous les RDV créés, lorsque je relance la macro j'ai une erreur d'execution '91' : "Variable objet ou variable de bloc With non définie" --> Ligne If .Range("V" & Lig).Comment.Text <> .Range("U" & Lig).Value Then
Mais les RDV sont bien créés !

Il serait pas mal aussi que la macro se lance automatiquement à la fermeture du fichier, 'est-ce que c'est possible ?

Merci !!
s
synthese
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 21 mars 2013
Version d'Excel : 2010 FR

Message par synthese » 22 mars 2013, 10:41

BrunoM45 a écrit :Re,

Pour la date de RDV, qu'elle version d'Outlook utilises-tu ?

Désolé, j'ai oublié un test ;)

Voici le fichier modifié, chez moi le RDV est bien créé à la bonne date et bonne heure

A+
j'ai téléchargé votre fichier Mix2timon_Exemple1.xlsm : c'est génial MAIS si je l'intègre dans mon fichier excel (en recopiant la macro ) : j'ai un mess d'erreur : "erreur de compilation : type défini par l'utilisateur non défini"... c'est dommage car du coup, j'ai dû recopier mes données dans votre classeur ce qui n'est pas très pratique si vous pouviez me dire quoi faire pour corriger cette erreur, ce serait cool
Comment pouvoir utiliser votre macro dans MON classeur (ça ça marche) mais sans obtenir ce message d'erreur ?

et AUSSI
si par chance vous pouviez rajouter un code pour dire que si il y a plusieurs RV, il les décale d'1/2 h (car là, quand j'ai 4 RV dans la journée, ils se collent tous à 8 h)....

merci encore : c'est déjà super
Avatar du membre
BrunoM45
Modérateur
Modérateur
Messages : 3'448
Appréciations reçues : 142
Inscrit le : 29 octobre 2011
Version d'Excel : 2016 FR, O365 FR
Contact :

Message par BrunoM45 » 22 mars 2013, 11:24

Bonjour Synthese

Le problème avec la première version c'est qu'il faut déclarer : Microsoft Outlook 14 Object Library
dans Outils -> Références , si tu veux que cela fonctionne ;)

Mais il y a la possibilité de déclarer les objets en "Late Binding" et du coup plus besoin de déclarer quoique ce soit
juste à faire un copier/coller du code ci-dessous
Sub AjoutRV()
  Dim DLig As Long, Lig As Long
  Dim OutObj As Object, OutAppt As Object
  Dim DateRdv As Date, FlgRdv As Boolean

  ' Créer une instance d'Outlook
  Set OutObj = CreateObject("outlook.application")
  ' Avec la feuille
  With Sheets("Suivi")
    DLig = .Range("A" & Rows.Count).End(xlUp).Row
    ' Pour chaque ligne
    For Lig = 2 To DLig
      ' Si une date de relance existe
      If .Range("B" & Lig) <> "" Then
        ' Si un RDV n'a pas déjà été créé
        If .Range("D" & Lig) <> "" Then
          ' Si le commentaire à changé
          If .Range("D" & Lig).Comment.Text <> .Range("C" & Lig).Value Then
            FlgRdv = True
          Else
            ' Sinon le commentaire n'a pas changé = pas de RDV
            FlgRdv = False
          End If
        Else
          ' Sinon, pas de RDV déjà créé
          FlgRdv = True
        End If
      Else
        ' Sinon, pas de date de relance
        FlgRdv = False
      End If
      ' Si le FLAG est à vrai on créé le RDV
      If FlgRdv Then
        DateRdv = Range("B" & Lig)
        Set OutAppt = OutObj.CreateItem(1)
        With OutAppt
          .Subject = "Rappeler " & Sheets("Suivi").Range("A" & Lig) & " pour " & Sheets("Suivi").Range("C" & Lig)
          .Start = DateRdv & " 08:00"
          .Duration = 60
          .ReminderSet = True
          .Save
        End With
        ' Créer le commentaire et inscrire Oui
        On Error Resume Next
        .Range("D" & Lig).Comment.Delete
        .Range("D" & Lig).AddComment Text:=.Range("C" & Lig).Value
        .Range("D" & Lig) = "Oui"
        On Error GoTo 0
      End If
    Next Lig
  End With
  Set OutAppt = Nothing
End Sub
A+
[F1] est une touche qui appelle l'aide : Essayez, c'est assez performant et on trouve plein de choses

Il n'y a ni bon ni mauvais usage de la liberté d'expression, il n'en existe qu'un usage insuffisant.
s
synthese
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 21 mars 2013
Version d'Excel : 2010 FR

Message par synthese » 22 mars 2013, 11:40

Merci !
ça fonctionne bien

juste 2 questions au cas où :
- quand il n'y a pas de rappel, pouvez-vous écrire dans le script qu'il passe à la ligne suivante, car là, il me met une date en 1900 , et ça s'arrête... il faudrait que si la ligne de date est vide, il passe simplement à la suivante

- et aussi, comment peut-on incrémenter les heures, car il met tous les RV de la journée à la même heure dans outlook
si c'était possible de dire qu'il incrémenter chaque RV de 30 minutes par ex, ce serait plus lisible

merci c'est déjà bien
et excusez-moi si mes 2 demandes sont trop compliquées
s
synthese
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 21 mars 2013
Version d'Excel : 2010 FR

Message par synthese » 23 mars 2013, 08:57

bonjour

Pouvez-vous me dire si mes 2 questions pourront avoir une réponse ou si c'est trop compliqué à faire ?

merci mille fois de votre aide !
bien cordialement
Avatar du membre
BrunoM45
Modérateur
Modérateur
Messages : 3'448
Appréciations reçues : 142
Inscrit le : 29 octobre 2011
Version d'Excel : 2016 FR, O365 FR
Contact :

Message par BrunoM45 » 23 mars 2013, 10:18

Bonjour

Tout est expliqué dans le code, il suffit de lire :?
[F1] est une touche qui appelle l'aide : Essayez, c'est assez performant et on trouve plein de choses

Il n'y a ni bon ni mauvais usage de la liberté d'expression, il n'en existe qu'un usage insuffisant.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message