[VB.NET -> VBA]VBA - Outlook - Calendrier - Insertion de rendez-vous à partir d'

Signaler
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour à tous,

Je suis un débutant en VBA (et en programmation)et je sollicite votre aide sur deux points.

Contexte : Je suis en train de créer une macro qui s'active à partir d'Outlook, ouvre un fichier excel prédéfini, récupère des dates dans la colonne A de la 1ère feuille du classeur que l'on vient d'ouvrir. Elle créé ensuite un rendez vous dans le calendrier Outlook à la date en question.
Elle vérifie également qu'il n'existe pas déjà un rendez vous qui porte le même nom à la date donnée, elle ne créé pas de rendez vous et passe à la date suivante dans ce cas.

Question 1 : Lorsque j'active ma macro pas à pas grâce à F8, la vérification qu'il n'existe pas déjà de rendez vous à la date en question fonctionne parfaitement. La vérification ne s'applique cependant pas lorsque j'active ma macro de manière normale (exécuter sub). Auriez vous une idée de la raison ?

Question 2 : Je cherche à boucler de la cellule A1 jusqu'à la dernière date
de la colonne Excel. Je souhaite pour cela utiliser y = exl.Workbooks.Range("A1").End(xlDown).Column
Cela ne marche hélas pas, sauriez vous quelle est mon erreur ? Dans le cas contraire avez vous une solution alternative

Merci d'avance à tous ceux qui prendront le temps de me lire

William


P.S Pour tester la macro, il faut créer un fichier Excel nommé Test, insérer des dates dans la colonne A et changer le chemin d'accès au niveau de la macro.
Il faut également remplace la valeur de y qui représente le nombre de valeurs dans la colonne A. (y = exl.Workbooks.Range("A1").End(xlDown).Column ne marchant pas)

La voici :




Sub OptionsReminder()

Dim OlApp As Outlook.Application
Dim OlApt As Object
Dim x, y As Integer
Dim z As Date
Dim t As String

Set OlApp = New Outlook.Application

'Chemin du Fichier Excel contenant les dates
Nom = "L:\Test.xls"
Set exl = CreateObject("excel.application")
exl.Visible = True
exl.Workbooks.Open (Nom)

y = 3

For x = 1 To y

Set OlApt = OlApp.CreateItem(olAppointmentItem)

' Récupère la date
z = exl.Sheets("Sheet1").Range("A" & x).Value

Dim objSch As Outlook.Search
Dim rsts As Outlook.Results
Dim i As Integer
Dim strS As String
Dim strF As Variant

'recherche si un rendez vous possède déjà le même objet
strS = "Calendar"
strF "urn:schemas:httpmail:subject " & "'" & "Options arrivant à échéance" & " " & z & "'"
Set sch = Application.AdvancedSearch(strS, strF, , "Search1")

Set rsts = sch.Results

If Not rsts.Count > 0 Then

'créé le rendez vous
With OlApt
.Start = z + TimeValue("12:00:00")
.End = .Start + TimeValue("00:30:00")
.Subject = "Options arrivant à échéance" & " " & z
.Body = "Don't forget to take an apple for the teacher"
.BusyStatus = olFree
.ReminderMinutesBeforeStart = 30
.ReminderSet = True
.Save
End With

Else

End If

Next

Set OlApt = Nothing
Set OlApp = Nothing

End Sub

2 réponses

Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
bonsoir

le nombre de valeur dans la colonne
ce n'est pas plutot (avec Row)
y = exl.Workbooks.Range("A1").End(xlDown).Row
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bonjour,
Déjà :
y = exl.Workbooks.Range("A1")
Workbooks est une collection (celle des classeurs ouverts)
Une collection de classeur n'a pas de plage, elle. Une plage (un objet Range) ne peut qu'être un membre d'une Feuille (pas d'une collection de classeurs)

Mais ma réponse concerne la connaissance de VBA/Excel et non celle de VB.Net.
Et je n'aurais jamais du la donner ici, car les genres ne sont pas à mélanger.
Pour bien comprendre cette remarque, je t'invite à voir ma réponse d'il y a à peine quelques minutes dans Cette discussion

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.