Appel procédure
Bonjour
Je cherche à simplifier du code en appelant une procédure mais je n'y arrive pas
Pourriez-vous m'aide svp?
Je vous serais trés reconnaissant
Voici mon code qui me permet de recupérer les évenements d'outlook entre 2 dates contenant le texte "(m" ou "(s" et le texte "caro"
Sub testcaloutlook()
Dim OutlApp As New Outlook.Application
Dim OutlMapi As Outlook.Namespace
Dim OutlFolder As Outlook.MAPIFolder
Dim OutlItems As Outlook.Items
Dim OutlAppointment As Outlook.AppointmentItem
'
Dim datedebut As String
Dim datefin As String
Dim sujet As String
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
ActiveSheet.DisplayPageBreaks = False
Application.EnableEvents = False
Application.DisplayAlerts = False
' informe de la date de début et de fin des événemets du calendrier à rechercher
datedebut = Date - 10
datefin = Date + 90
'
Set OutlMapi = OutlApp.GetNamespace("MAPI")
Set OutlFolder = OutlMapi.GetDefaultFolder(olFolderCalendar)
Set OutlItems = OutlFolder.Items
Set OutlAppointment = OutlItems.Find("[Start] >= '" & datedebut & "'")
' boucle sur calendrier outlook entre date debut et date fin
While TypeName(OutlAppointment) <> "Nothing"
If OutlAppointment.Start > datedebut And OutlAppointment.Start < datefin Then
' recherche événements du calendrier commencant par *
ddd1 = Format(OutlAppointment.Start, "dd/mm/yyyy")
' recherche colonne de la date
For Each Cell In plage2
If Cell.Value = CDate(ddd1) Then
col1 = Cell.Column
col = Mid(Cell.Address, 2, InStr(2, Cell.Address, "$") - 2)
End If
Next Cell
sujet = OutlAppointment.Subject
If LCase(sujet) Like "*(m*" Or LCase(sujet) Like "*(s*" Then
If LCase(sujet) Like "*(m*" then nb = 6
If LCase(sujet) Like "*(s*" then nb = 7
dep = InStr(1, sujet, "(m-") + 3
Fin = InStr(dep, sujet, ")")
texte = Trim(Mid(sujet, dep, Fin - dep))
If LCase(sujet) Like "*caro*" Then
Nom = "ARRAMBIDE"
Date1 = ddd1
End If
Call enreg (texte, Nom, Date1, nb)
End If
Set OutlAppointment = OutlItems.FindNext
Wend
Application.ScreenUpdating = True
ActiveSheet.DisplayPageBreaks = True
Application.EnableEvents = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
End SubJe voudrais appeler ensuite la procédure "enreg" avec les arguments texte, nom et date
Voici mon code
Sub enreg(Nom, Date1, texte, nb)
Set Plage = ThisWorkbook.Worksheets("Stats repas").Range("b56:b280")
For Each Cell In Plage
If Cell.Value = Nom Then ' si = au nom de la liste
lig = Cell.Row ' lig = au numéro de ligne de la feuil1
End If
Next Cell
' recherche date dans ligne 4
Set plage1 = ThisWorkbook.Worksheets("Stats repas").Range("f55:NR55")
For Each Cell In plage1
If Cell.Value = CDate(Date1) Then
lettre = Mid(Cell.Address, 2, InStr(2, Cell.Address, "$") - 2)
' lettre du numéro de colonne
End If
Next Cell
sDatam = ""
Range(lettre & lig + nb).Value = texte
Range(lettre & lig).ClearComments
If Range(lettre & lig + 6).Value <> "" Then sDatam = LCase(Range(lettre & lig + 6).Value)
If Range(lettre & lig + 6).Value <> "" Or Range(lettre & lig + 7).Value <> "" Then sDatam = sDatam & "-"
If Range(lettre & lig + 7).Value <> "" Then sDatam = sDatam & UCase(Range(lettre & lig + 7).Value)
If Not Range(lettre & lig).Comment Is Nothing Then sDatam = sDatam & IIf(sDatam = "", "*", " *")
If sDatam <> "" Then
With Range(lettre & lig)
.AddComment
.Comment.Text sDatam
.Comment.Shape.TextFrame.AutoSize = True
.Comment.Visible = True
End With
End If
End SubJe comprends pas comment passer les arguments d'une procédure à l'autre
Les 2 procédures sont dans un m^me module
Je vous remercie beaucoup de votre aide
Cordialement
Bonjour,
A première vue la méthode est bonne :
Call enreg(texte, Nom, Date)Par contre, la procédure "enreg" comporte à priori 4 arguments non optionnels (Nom, Date1, texte, nb).
Sinon, tu peux aussi déclarer tes variables hors procédure (en début de module). La valeur inscrite dans une procédure peut ainsi être réutilisée dans une autre.
Merci de votre réponse
J'ai un bug sur cette ligne
Range(lettre & lig + nb).Value = textesi je remplace nb par 6, j'ai la même erreur
J'ai noté :
Call enreg(Nom, Date1, texte, nb)et
Sub enreg(Nom, Date1, texte, nb)J'ai fait en début de procedure enreg
MsgBox Nom & " - " & Date1 & " - " & texte & " - " & nble résultat est " - - KFK - 6"
Avez vous une solution svp ?
Merci
Sans fichier, c'est pas évident. Je vous conseille de faire une exécution pas à pas et de placer des espions sur vos variables pour voir les valeurs qu'elles prennent et comprendre l'origine de l'erreur.
En épluchant votre code, j'ai constaté un soucis à ce niveau :
For Each Cell In plage1
If Cell.Value = CDate(Date1) Then
lettre = Mid(Cell.Address, 2, InStr(2, Cell.Address, "$") - 2)
' lettre du numéro de colonne
End If
Next CellVu que vous fermer votre boucle à cet endroit, la variable lettre contiendra seulement la dernière lettre de colonne de la plage.
A votre place, je remplacerai également cette ligne :
lettre = Mid(Cell.Address, 2, InStr(2, Cell.Address, "$") - 2)Par celle-ci :
lettre = Split(Cell.Address, "$")(1)pour info je viens de modifier mon message précédent
pour info je viens de modifier mon message précédent
C'est la valeur des variables lettre et lig juste avant l'erreur qui seraient plus intéressantes.
Tout fonctionne
Merci beaucoup pour votre aide précieuse
bonne soirée