Reecrire une macro pour la rendre compatible toute versions (latebinding)
Hello à tous,
je reviens à la charge avec mon code, (bruno si tu es là j'ai besoin de ton talent)
j'ai transferet mon fichié qui etait ok sur ma version 2016, sur un pc en version 2013, passé ok la macro marche apres grosse modifs sur le code,
quand ca à enfin marché, je transfert ce fichier avec le nouveau code sur un autre poste en 2013, mais la probleme, erreur 1004, sur l'objet de l heure, puis une fois supprimé meme erreur sur le sujet du rendez vous,
j'ai fais mes recherches et j'ai trouvé que pour rendre la macro lisible sur toute les version, il serait judicieux de passer sur du latebinding,
donc voila ma demande, quelqu un peut il m'orienté sur comment faire cette modif sur cette partie de code svp (peur de bousiller la coherence de l'ensemble si je me lance dans du bidouillage perso)
merci d avance
voici le code (crée par bruno) on voit une partie deja en latebinding sur la crea du rdv dans outlook, il me la faudrait sur l ensemble de la fonction
CréerAlerte(sNom As String, sFormation As String, MaDate As Date)
Dim OutObj As Object, OutAppt As Object
Dim Heure As String, HTemp As String, Sujet As String
Dim Delai As Integer, Rappel As Single
' Récupérer les paramètres pour OUTLOOK
Delai = [OutlookDélaiRDV]
Rappel = [OutlookRappel]
Heure = Format([OutlookHeureR], "HH:MM:SS")
' Ligne sur la feuille
Sujet = "Rappel formation : " & sFormation & " pour " & sNom & " le " & Format(MaDate, "dd/mm/yyyy")
' Créer l'instance OUTLOOK
Set OutObj = CreateObject("outlook.application")
' Créer l'instance pour le RDV
Set OutAppt = OutObj.CreateItem(1) ' olAppointmentItem
' Si tout est OK, on créé un RDV
With OutAppt
.Start = MaDate & " " & Heure
.Duration = Delai
.Location = "ORGANISME de FORMATION"
.ReminderMinutesBeforeStart = Rappel * 60 ' rappeler 8 heure avant
.ReminderSet = True
.Subject = Sujet
'.Body =
'.MeetingStatus = olMeeting
'.OptionalAttendees = "titi@adm.co.ma" 'participants optionnel à la réunion
' Participant(s) obligatoire(s)
'.RequiredAttendees = "DestOutlook"
'.Send
.Save
End With
' Libérez la variable objet Outlook.
Set OutObj = Nothing
Set OutAppt = Nothing
End SubBonjour,
En attendant que BrunoM45 intervienne, je tente quand même un essai.
Je dirais que le problème réside dans le manque de précision quant aux objets (range) ciblés. En rajoutant la feuille à laquelle appartiennent ces cellules, ça devrait être mieux...
CréerAlerte(sNom As String, sFormation As String, MaDate As Date)
Dim OutObj As Object, OutAppt As Object
' Récupérer les paramètres pour OUTLOOK
with sheets("feuilleconcernee") '<<<<<<<<<<< ADAPTER NOM
Delai = .[OutlookDélaiRDV]
Rappel = .[OutlookRappel]
Heure = Format(.[OutlookHeureR], "HH:MM:SS")
end with
' Ligne sur la feuille
Sujet = "Rappel formation : " & sFormation & " pour " & sNom & " le " & Format(MaDate, "dd/mm/yyyy")
' Créer l'instance OUTLOOK
Set OutObj = CreateObject("outlook.application")
' Créer l'instance pour le RDV
Set OutAppt = OutObj.CreateItem(1) ' olAppointmentItem
' Si tout est OK, on créé un RDV
With OutAppt
.Start = MaDate & " " & Heure
.Duration = Delai
.Location = "ORGANISME de FORMATION"
.ReminderMinutesBeforeStart = Rappel * 60 ' rappeler 8 heure avant
.ReminderSet = True
.Subject = Sujet
'.Body =
'.MeetingStatus = olMeeting
'.OptionalAttendees = "titi@adm.co.ma" 'participants optionnel à la réunion
' Participant(s) obligatoire(s)
'.RequiredAttendees = "DestOutlook"
'.Send
.Save
End With
' Libérez la variable objet Outlook.
Set OutObj = Nothing
Set OutAppt = Nothing
End SubCdlt,
Delai = .[OutlookDélaiRDV]
Rappel = .[OutlookRappel]
Heure = Format(.[OutlookHeureR], "HH:MM:SS")le "." a t il une importance dans le code?
je precise que ce code est le code excel 2016 est quil fonctionne parfaitement,
c'est lors des migrations sur 2013 que ca pose probleme, j'avais changé les [ ]par des " " et ajouté des .value et Range ( ) là où ca posait probleme,
et lors du transfert d'un poste 2013 où ca marchait à un autres, la ligne "heure = range("outlookHeureR"). value m'a fait une erreur 1004
Puis une fois la ligne supprimée, la ligne
Sujet = "Rappel formation : " & sFormation & " pour " & sNom & " le " & Format(MaDate, "dd/mm/yyyy"
meme soucis avec range sur _objet incompatible... un truc comme ca
En principe, si ces plages nommées portent sur le classeur et pas sur la feuille, le "." n'est pas nécessaire et ça ne doit pas poser problème. Mais il arrive qu'on copie une feuille avec des noms portant sur le classeur. Ensuite les noms de la nouvelle feuille porte uniquement sur la feuille je crois... Enfin, ça peut créer des conflits.
Ici, si mon intuition est bonne, il ne s'agit pas de version mais de fichier qui a subi des modifs ayant altéré le fonctionnement. C'est un problème de plage nommée qui n'est pas trouvée sur la bonne feuille.
Je vous conseille de regarder dans le gestionnaire de noms, ça sera plus clair.
Par ailleurs, avec le code, je ne peux pas m'avancer sur les variables entrées en paramètres de la macro...
Cdlt,
quels sont les elements qu ils vous faudrait pour pouvoir avoir un avis plus eclairé?
Soit il faudrait que vous postiez votre fichier, soit que vous regardiez dans le gestionnaire de noms pour y regarder les noms "OutlookRappel", etc... et leur étendue.
Mais, pourquoi ne pas tester le code posté au premier commentaire en adaptant juste le nom de feuille ?
Bonjour,
Pour ce qui est du latebinding, le code est déjà adapté. Le seul point qui pourrait poser problème de ce point de vue c'est olmeeting (si tu réactives cette instruction qui est en commentaire dans ton code). Cette variable n'est pas définie lorsque l'on fait du latebinding, il faut la remplacer par sa valeur 1.
Comme l'indique 3GB(que je salue !), les problèmes que tu rencontres proviennent très probablement de mauvaises définitions dans le gestionnaire de nom.
et bien bravo,
ca fonctionne,
apres je ne sais pas si c est ca ou le fait d avoir decoché la bibliotheque de ref 0.16 outlook et coché la 0.15 qui a joué aussi,
mais en tous cas ca a fonctionné,
merci ;)
bonjour,
il serrait judicieux de nous préciser quel est le message d'erreur et sur quelle instruction il ce produit !
il n'y a pas que des applications externes qui peuvent poser problème mais également la version de Visuel Basic For Application {VBA}!
Regardes dans VBA Menu=>Outils=>Références si il existe des librairies manquantes!