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

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 ??

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

A+

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.

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+

1'984mix2timon-exemple1.xlsm (19.01 Ko)

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 !!

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

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+

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

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

Bonjour

Tout est expliqué dans le code, il suffit de lire

Merci mille fois

Reste juste le problème quand il y a plusieurs RV le même jour :

tous les rappels se mettent à 8h dans outlook (donc deviennent illisibles)

Comment incrémenter les rappels (quand il y en a plus qu'un sur une même date) ?

dans le style :

if existe déjà un rappel à 08:00

then mets le rappel suivant à + 0:30

mais je ne connais pas la syntaxe...

merci si vous pouvez écrire cette amélioration !

Re,

As-tu une colonne ou tu saisis ton heure de RDV ou pas ?

Car dans le code l'heure se situe ici

.Start = DateRdv & " 08:00"

A+

1_ en fait, il n'y a aucune heure saisie dans ma colonne il y a seulement une date

et si cette date existe plusieurs fois, tous les rappels se collent à 8h

vous pouvez le voir sur votre propre exemple fourni si vous notez 3 fois la même date dans la colonne ça colle tout à 8H

2_de plus, je viens de m'apercevoir d'un autre souci (visible aussi sur votre feuille excel d'ex) :

si sur une des lignes il n'y a pas de date dans la colonne, la macro pose les 3 RV existants : parfait !

mais ensuite, je reprends la feuille et pose une date sur la dernière ligne (qui était vide), et donc où il n'y avait pas "oui" dans votre colonne D

là : la macro se bloque avec mess d'erreur

si j'efface tous les oui, et que je relance : tout va bien

donc en fait, si on ajoute un RV dans la feuille où la macro a déjà travaillé, donc a déjà des oui, ça le fait planter...

pourrais-je échanger en direct pour ne pas polluer le forum ? ou bien n'est-ce pas grave (je n'ai pas l'habitude, excusez moi si cela ne se fait pas)

et encore une fois, c'est déjà vraiment bien et je vous remercie

Bonjour Bruno,

J'ai testé votre petit fichier excel et tous semble fonctionner à merveille.

Par la suite j'ai copié votre macro dans mon fichier en prenant soin de modifier les variables qui ne sont pas identiques à mon fichier.

Malheureusement une erreur survient à la ligne Start = DateRdv.

voici le libellé de l'erreur:

type incorrect: impossible de contraindre les valeurs de paramètres. votre chaine ne peut être traduite.

J'ai contrôlé par deux fois les valeurs et le formats des champs appelé et concerné.

J'ai par la suite modifié un par un les paramètres pour voir ou cela pouvais bloquer, j'arrive toujours au même résultat.

D avance je vous remercie pour votre aide et support

Victor

Bonjour Victor

Ca fait plaisir de voir que le code peut servir à d'autres

Sais-tu qu'elle valeur prend "DateRdv" ?

As-tu mis un point d'arrêt (F9) sur la ligne

DateRdv = Range("B" & Lig)

A+

Re Bruno,

Alors concernant la valeur en voici le format: 12.02.2014 avec un format date de la cellule

Concernant le point d'arrêt (F9), de quoi parles-tu ? Je suis un novice en VBA

Par contre si je met l'instruction: On Error Resume Next

Le rendez-vous se crée mais aujourd'hui à l'heure actuelle !

Merci d'avance

Salutations Binaire

Victor

Re,

Victor_Troïka a écrit :

Alors concernant la valeur en voici le format: 12.02.2014 avec un format date de la cellule

Donc pour moi les dates ne sont pas saisie au format date mais au format Texte

Une date sur Excel doit être impérativement saisie avec des slash : 06/01/2014

Victor_Troïka a écrit :

Concernant le point d'arrêt (F9), de quoi parles-tu ? Je suis un novice en VBA

Un point d'arrêt, c'est lorsque tu es dans l'éditeur VBA tu appuies sur la touche F9 sur une ligne de code

pour Stopper l'exécution du code sur cette ligne et faire ce que l'on appelle du pas à pas grâce à F8

(ta ligne doit changer de couleur)

Dans ce mode, lorsque tu pointe ton curseur sur une variable, tu peux vois la valeur qu'elle contient

A+

Re Bruno,

Merci pour tous tes conseils. il semble que le format de la date me joue des tours et soit le problème.

J'ai essayer toutes les variantes possible. Pour l'instant le format de la date dans la macro reste: 00:00:00

Je vais encore essayer de trouver d’où vient le problème. Mais par expérience avec excel, le format de la date m a déjà jouer des tours.

Encore mille merci pour tous tes précieux conseils.

Ne peux malheureusement que te remercier par écrit.

Salutations binaire

Victor

Bonjour à tous,

J'essaye moi aussi d'utiliser la macro de BrunoM45 (merci beaucoup pour la production de ce code !) afin de creer des RDV depuis ma BD Excel vers Outlook.

J'ai recopié ma BD dans le fichier excel que Bruno avait joint le 04 Août 2012, 17:35 (je n'arrivais pas à l'appliquer à mon fichier directement ^^). Pour plus de faciliter je fais juste un " = " dans les cellules du tableau avec vers ma BD mais ca ne fonctionne pas si facilement..

Je rencontre, il me semble, le même probleme que Synthese :

synthese a écrit :

il me met une date en 1900

Cette date de 00/01/1900 vient du fait que dans ma BD, il n'y a pas de date de relance. Du coup lorsque je fait mon " = " depuis ma feuille de relance vers ma BD, par défaut il me met cette date. Je ne sais pas comment faire.

As tu trouvé la solution ? (code BVA à incrémenter ou solution pratique dans le tableur en lui même ?)

Je tiens à te remercier BrunoM45 pour le travail effectué qui me rend grandement service !

Thomas.

Bonjour,

Peux-tu joindre ton fichier ...?

Il ne s'agit très probablement que d'une question de format ...

Pour joindre un fichier ... la video youtube

EbNYLzTz5wM

Rechercher des sujets similaires à "creer rdv outlook chaque date colonne"