Erreur exécution 9 - VBA

Bonjour,

Avec l’aide d’internet et quelques heures à comprendre le rouage, j’ai fait une fonction pour exporter un fichier XSL en ICS pour mon système de calendrier.

Malheureusement, je ne comprend pas l’erreur d’exécution 9 « Indice n’appartient pas à la sélection ».

La ligne d’erreur en en jaune sur l’image ci-joint:

Ci-dessous le script:

Function deux(tps)
deux = Right(« 00 » & tps, 2)
End Function
Sub RDV_ICS()
Dim ICS As String
ligne = ActiveCell.Row
Sheets(« iCal »).Range(« A » & ligne).Select
Dt = Split(ActiveCell.Offset(0, 1).Value, « / ») 'Date du RDV. (Split et « / ») sert à séparer les valeurs
LPEC = ActiveCell.Offset(0, 2).Value 'Lieu PEC
HPEC = ActiveCell.Offset(0, 3).Value 'Heure PEC
CIV = ActiveCell.Offset(0, 4).Value 'Civilité
NP = ActiveCell.Offset(0, 5).Value 'Nom et prénom
Note = ActiveCell.Offset(0, 6).Value 'Note ou remarque avec autre informations utiles
Titre = ActiveCell.Offset(0, 7).Value 'Title ou Summary est un petit résumé du rdv
fichier = ThisWorkbook.Path & «  » & « calendrier.ics » 'Le chemin d’enregistrement et le nom à donner
DTSTART = Dt(2) & Dt(1) & Dt(0) & « T » & deux(Hour(HPEC)) & deux(Minute(HPEC)) & « 00 » 'Date et heure de début du PEC
DTEND = Dt(2) & Dt(1) & Dt(0) & « T » & deux(Hour(HPEC)) & deux(Minute(HPEC)) & « 00 » 'Date et heure du transprot (prendre en compte l’heure du RDV)

Set f = CreateObject("ADODB.Stream") 'Le flux d'enregistrement des données
With f
    .Charset = "utf-8" 'Permet de prendre les caractères comme les "é,à, etc."
    .Open 'Ouverture du flux
    .WritText "BEGIN:VCALENDAR" & vbCrLf 'Début de la structure. (vbCrlf) est une fonctione de retour à la ligne
    .WritText "VERSION:2.0" & vbCrLf 'La version
    .WritText "PRODID:-//PARVESH.C//FR" & vbCrLf 'Par quel logiciel ou personne ça été créé
    .WritText "BEGIN:VEVENT" & vbCrLf 'Début des événements
    .WritText "DTSTART" & DTSTART & vbCrLf 'Date de l'événement
    .WritText "DTEND" & DTEND & vbCrLf 'Date de fin de l'événement
    .WritText "SUMMARY" & Dt & "" & Titre & vbCrLf 'Titre de l'événement avec ajout de la date
    .WritText "DESCRIPTION" & Note & vbCrLf 'Information compémentaire des remarques ou notes
    .WritText "LOCATION" & LPEC & vbCrLf 'Lieu, dans ce cas c'est le lieu de PEC
    .WritText "END:VEVENT" & vbCrLf 'Fin des événements
    .WritText "END:VCALENDAR" & vbCrLf
    .WritText "End:CALENDAR" 'Fin de la structure
    .SaveToFile ICS, 2  'Sauvegarde du fichier
    .Close 'Fermeture du flux
End With

End Sub

Avez-vous une idée ?

Merci d’avance pour votre aide.

Bonjour
Je pense que cette partie n est pas correct :
deux(Hour(HPEC)
Je mettrais ainsi
&deux&Format (HPEC,« hh »)
Et aussi cette partie dans le même esprit
deux(Minute(HPEC)
Je mettrais ainsi
&deux&Format(HPEC,« mm »)
Ce qui donnerais ceci:
DTSTART = Dt(2) & Dt(1) & Dt(0) & « T » & deux & Format (HPEC,« hh ») & deux & Format(HPEC,« mm ») & « 00 »
A essayer

Je vois aussi cette ligne incorrect :
Dt = Split(ActiveCell.Offset(0, 1).Value, « / »)
Un split doit se terminer par une constante qui détermine la donnée à utiliser dans son fractionnement écrit comme ceci (constante)
Dt = Split(ActiveCell.Offset(0, 1).Value, « / »)(constante)
Si j utilisé cette donnée morcelée ainsi :
1/2/3/4
Et que je souhaite cible le chiffre 3 je dois mettre ainsi :
Dt = Split(ActiveCell.Offset(0, 1).Value, « / »)(2)
Sachant que le premier morcellement est ciblé avec la constante 0
Pour la constante 0 je cible la donnée 1
Pour la constante 1 je cible la donnée 2
Jusqu à la constante 3 dans cet exemple qui cible la donnée 4
C est peut être à ce niveau l origine du Bug
A essayer aussi

Je viens de relire et en fait la constante dont je parle tu la définis dans la ligne de code qui Bug donc je pense que cela doit convenir
Maintenant à savoir si toutes celles listées correspondent bien à un morceau de la donnée
Dt(2) & Dt(1) & Dt(0)
tel que tu mets ces morceaux avec leur constante ((0) (1 )( 2)) la donnée Dt doit avoir 3 morceaux séparés par le séparateur défini dans le Split correspondant « / » :
Split(ActiveCell.Offset(0, 1).Value, « / »)
A vérifier donc cette cohérence car si la donnée à moins de morceaux le Bug s’expliquerait

Bonjour FFO,

Merci de ton retour et de ton aide.

J’ai ajouté les paramètres selon tes information, mais il y a eu aucun changement.

J’ai donc remanier le script qui fini par créer mon fichier .ics
Par contre lors de l’import de ce fichier, aucune information si trouve.

Voici le fichier excel: Formulaire_version_1_5.xlsm (72,1 Ko)

Saurais-tu la raison ?

Voici le script mise à jour:

Function deux(tps)
deux = Right(« 00 » & tps, 2)
End Function
Sub RDV_ICS()
Dim fichier As String
ligne = ActiveCell.Row
Range(« A » & ligne).Select
Dt = ActiveCell.Offset(0, 1).Value 'Date du RDV. (Split et « / ») sert à séparer les valeurs
LPEC = ActiveCell.Offset(0, 2).Value 'Lieu PEC
HPEC = ActiveCell.Offset(0, 3).Value 'Heure PEC
CIV = ActiveCell.Offset(0, 4).Value 'Civilité
NP = ActiveCell.Offset(0, 5).Value 'Nom et prénom
Note = ActiveCell.Offset(0, 6).Value 'Note ou remarque avec autre informations utiles
Titre = ActiveCell.Offset(0, 7).Value 'Title ou Summary est un petit résumé du rdv
fichier = ThisWorkbook.Path & «  » & « calendrier.ics » 'Le chemin d’enregistrement et le nom à donner
DTSTART = Month(Dt) & Day(Dt) & Year(Dt) & « T » & Hour(HPEC) & Minute(HPEC) & « 00 » 'Date et heure de début du PEC
DTEND = Month(Dt) & Day(Dt) & Year(Dt) & « T » & Hour(HPEC) & Minute(HPEC) & « 00 » 'Date et heure du transprot (prendre en compte l’heure du RDV)

Set f = CreateObject("ADODB.Stream") 'Le flux d'enregistrement des données
With f
    .Charset = "utf-8" 'Permet de prendre les caractères comme les "é,à, etc."
    .Open 'Ouverture du flux
    .WriteText "BEGIN:VCALENDAR" & vbCrLf 'Début de la structure. (vbCrlf) est une fonctione de retour à la ligne
    .WriteText "VERSION:2.0" & vbCrLf 'La version
    .WriteText "PRODID:-//PARVESH.C//FR" & vbCrLf 'Par quel logiciel ou personne ça été créé
    .WriteText "BEGIN:VEVENT" & vbCrLf 'Début des événements
    .WriteText "DTSTART" & DTSTART & vbCrLf 'Date de l'événement
    .WriteText "DTEND" & DTEND & vbCrLf 'Date de fin de l'événement
    .WriteText "SUMMARY" & Dt & "" & Titre & vbCrLf 'Titre de l'événement avec ajout de la date
    .WriteText "DESCRIPTION" & Note & vbCrLf 'Information compémentaire des remarques ou notes
    .WriteText "LOCATION" & LPEC & vbCrLf 'Lieu, dans ce cas c'est le lieu de PEC
    .WriteText "END:VEVENT" & vbCrLf 'Fin des événements
    .WriteText "End:VCALENDAR" 'Fin de la structure
    .SaveToFile fichier, 2  'Sauvegarde du fichier
    .Close 'Fermeture du flux
End With

End Sub

Je n’ai jamais utilisé ce genre de fichier je ne le connaissais même pas
J’ai un peu fouiné sur internet en recherchant pour VBA des discussion sur ce sujet je n’ai rien trouvé non plus
Je ne sais pas si c’est faisable et de quelle manière
Le code fonctionne mais peut être la méthode pour créer et alimenter ce fichier n’est pas bonne
J’avoue avoir du mal à t’aider sur ce point
Si je trouve quelque chose je t’en informe
J’ai gardé ton fichier pour faire des test

J’ai demandé à mon hébergeur d’agenda.
Peut-être qu’il y a encore des paramètres à ajouter.

Je te redirai aussi.

Merci encore.

J’ai fini par réussir
Ci-joint ton fichier modifié
J’ai laissé tes lignes de code corrigé avec une petite cote devant pour les inhiber
J’ai mis en dessous de chacune d’elle la ligne de code qui fonctionne
J’ai testé et le résultat est la

Essaies et dis moi

Formulaire_version_1_5.xlsm (61,8 Ko)

Hello,
Malgré les changements que tu as apporté, il est impossible d’importer ce document dans :

  • outlook Calendar (message: Nous n’avons pas pu ouvrir l’événement. Il est possible que le fichier de calendrier soit endommagé)

  • google Calendar (0 événement sur 0 importé.
    Impossible de traiter votre fichier iCal/CSV.)

Chez mon hébergeur, il importe le fichier, mais 0 information se trouve dans le calendrier.
Je leur ai mis un ticket, peut-être qu’ils pourront me dire le problème.

Je mettrai leur réponse ici.

Bonne fin de soirée

Je suis surpris de ce que tu obtiens car moi après traitement j ouvre sans soucis le fichier créé ics avec la date et l heure intégrés j ai un cadre où je peux saisir des observations
Donc je n obtiens pas le même résultat que toi bizarre

J’ai glané quelques info sur internet et donc modifié ces lignes en conséquence :

.WriteText « SUMMARY: » & Dt & " " & Titre & vbCrLf ‹ Titre de l ›?v?nement avec ajout de la date
.WriteText « DESCRIPTION: » & Note & vbCrLf 'Information comp?mentaire des remarques ou notes
.WriteText « LOCATION: » & LPEC & vbCrLf 'Lieu, dans ce cas c’est le lieu de PEC

J’ai rajouté « : » à la fin de l’item traité :
« SUMMARY: »
« DESCRIPTION: »
« LOCATION: »

Suite à cet ajout dans le fichier ics ces informations sont maintenant présentes et peut être indispensables pour son intégration dans Outlook Calandar

Fais des essais en apportant cette correction et dis moi

Bonjour,

Finalement, le fichier .ics s’importe bien dans le Outlook Calendar (sans passer ouvrir avec, qui ne fonctionne pas).

J’ai bien les informations que je souhaites, sauf au niveau de l’heure et de la date.

L’importation du fichier ICS se fait par rapport à la date et l’heure ou je l’importe et ne prend pas en compte la date et l’heure du RDV que j’ai inscrit.

Exemple:
Dans mon fichier j’ai mis un rdv pour le 10 avril 2020 à 10h00.

Une fois le fichier .ics créé, j’importe le fichier dans outlook, mais il met le rdv au 5 avril à 17h50 (c’est le moment ou j’écris ce post).

Je cherche encore l’erreur.

Voici le fichier uniquement avec le système du calendrier: FichierTest-iCal.xlsm (24,6 Ko)

L’intégration dans Outlook Calendar se fait, mais j’ai toujours le problème du placement du RDV à la bonne date et heure qui ne se fait pas.

pour moi comme je te l’avais déjà signalé ces lignes ne sont pas correct :

DTSTART = Year(DT) & Month(DT) & Day(DT) & « T » & HDEBUT & Z 'Date et heure du d?but RDV (exemple:20200410T1000)
DTEND = Year(DT) & Month(DT) & Day(DT) & « T » & HFIN & Z 'Date de fin (DT) et heure de fin

Avec ces lignes dans le fichier ics je n’ai pu intégrer aucune date

Je les ai modifié à ma sauce ainsi :

DTSTART = Format(Dt, « yyyy ») & Format(Dt, « mm ») & Format(Dt, « dd ») & « T » & Format(HPEC, « hh ») & Mid(Format(HPEC, « hhmm »), 3) & « 00 »
DTEND = Format(Dt, « yyyy ») & Format(Dt, « mm ») & Format(Dt, « dd ») & « T » & Format(HPEC, « hh ») & Mid(Format(HPEC, « hhmm »), 3) & « 00 »

Et là dans le fichier je les ai bien retrouvé :

image

Tu devrais regardé de ce côté là j’insiste !!!

Oui effectivement, j’ai repris l’ancienne version pour ce fichier pour séparer du fichier original.
Désolé, je n’avais pas fait attention.

En mettant tes paramètres pour DTSTART:

DTSTART = Format(DT, « yyyy ») & Format(DT, « mm ») & Format(DT, « dd ») & « T » & Format(HPEC, « hh ») & Mid(Format(HPEC, « hhmm »), 3) & « 00 »

DTEND = Format(DT, « yyyy ») & Format(DT, « mm ») & Format(DT, « dd ») & « T » & Format(HPEC, « hh ») & Mid(Format(HPEC, « hhmm »), 3) & « 00 »

Le RDV va à la bonne date avec la bonne heure du début.
Image avec les lignes précédente:

Mais pour la ligne « DTEND », si je change « HPEC » en « HRDV » que je prend pour l’heure de fin.
La date de fin est correct puisqu’il reprend la même date que « DTSTART », mais il me change l’heure de début avec mon heure de fin « HRDV » et rajoute +1h pour l’heure de fin.

Voici l’image de cette situation:
test_non_correct

As tu déjà consulté le fichier ics en l’ouvrant lui directement pour savoir ce qu’il a intégré
Ainsi de cerner l’origine soit la procédure pour le réaliser est en cause soit l’intégration de celui-ci dans Outlook Calandar est à incriminé
Peux tu aussi me transmettre la ligne de code de la variable HRDV peut être une erreur

Voici en image le script VBA:

Voici en image l’ouverture direct du fichier .ics ave le HRDV pour l’heure de fin (qui ne fonctionne pas):

Je viens de trouver l’erreur:

C’est ces lignes là qui posaient problème (partie du With f):
UID et le TZID=EUROPE/Zurich pour DTSTART et DTEND.

Ravi de ta trouvaille
J’espère que maintenant tout va fonctionner
Dis le moi

Bon ça avance gentiment, mais surement :grinning: !

Problème 1:
Comment faire pour que les informations de ma DESCRIPTION (REMARQUE) se trouve tous dans la description une fois que le fichier ICS est importé dans l’Agenda ?

Voici des images

Information du fichier excel (Voir MOTIF REMARQUE):

Vu dans le calendrier (dans la description seul mon HEURE RDV s’y trouve et pas le reste):

Voici le fichier script pour l’export en .ICS:
Function deux(tps)
deux = Right(« 00 » & tps, 2)
End Function
Sub ICS_CREATE()
On Error GoTo Erreur
Dim fichier As String 'Chaine de caractère la variable « fichier »
ligne = ActiveCell.Row
Range(« A » & ligne).Select
DT = ActiveCell.Offset(0, 1).Value 'Date du transport
HPEC = ActiveCell.Offset(0, 4).Value 'Heure PEC en décimale
LPEC = ActiveCell.Offset(0, 3).Value 'Lieu PEC

  REMARQUE = ActiveCell.Offset(0, 5).Value 'Description, note, remarque et autre information
  Titre = ActiveCell.Offset(0, 2).Value 'Titre (SUMMARY) résumé rapide du RDV du jour
  
  DTSTART = Format(DT, "yyyy") & Format(DT, "mm") & Format(DT, "dd") & "T" & Format(HPEC, "hh") & Mid(Format(HPEC, "hhmm"), 3) & "00" & Z 'Date et heure du début RDV (exemple:20200410T1000)
  DTEND = Format(DT, "yyyy") & Format(DT, "mm") & Format(DT, "dd") & "T" & Format(HPEC, "hh") & Mid(Format(HPEC, "hhmm"), 3) & "00" & Z 'Date de fin (DT) et heure de fin
  
  fichier = ThisWorkbook.Path & "\" & Titre & ".ics" 'Emplacement du fichier avec le nom du client qui fini ".ics"
  Set f = CreateObject("ADODB.Stream") 'Flux
  With f
    .Charset = "utf-8" 'Caractères spéciaux (é,à,ö,etc.)
    .Open 'Ouverture du flux
    .WriteText "BEGIN:VCALENDAR" & vbCrLf 'Début de la structure du fichier .ics
    .WriteText "VERSION:2.0" & vbCrLf 'Version du fichier
    .WriteText "PRODID:-//PEACHBIRD.COM" & vbCrLf 'Créateur du fichier
    .WriteText "BEGIN:VEVENT" & vbCrLf 'Début des événements à mettre dans le calendrier
    .WriteText "DTSTART:" & DTSTART & vbCrLf 'Date et heure de la prise en charge (PEC)"
    .WriteText "DTEND:" & DTEND & vbCrLf 'Date et heure de fin du transport"
    .WriteText "SUMMARY:" & Titre & vbCrLf 'Résumé rapide du transport
    .WriteText "DESCRIPTION:" & REMARQUE & vbCrLf
    .WriteText "LOCATION:" & LPEC & vbCrLf
    .WriteText "END:VEVENT" & vbCrLf
    .WriteText "END:VCALENDAR"
    .SaveToFile fichier, 2
    .Close
  End With 'Fermeture "WITH"
  MsgBox "Le fichier iCal à bien été créé !"
  Exit Sub 'Fermeture du Message en cas d'erreur
  
Erreur:
MsgBox "Un problème a été détecté !"
End Sub

Ensuite après plusieurs utilisation, le fait que j’ai mis l’export selon la ligne ou il se trouve est complètement idiot. Car s’il y a des 20,30,50 etc de RDV, je devrai faire x export et import de fichier ICS à mettre dans l’Agenda.

Je cherche le moyen de pouvoir exporter toutes le dates se trouvant dans mon fichier excel ou aussi que les dates selon un filtre mensuel.

Une idée ?