Problème pour modifier le script d'un formulaire google qui remplit un agenda google

bonjour,

j’ai eu des difficultés à vous envoyer ce message alors milles excuses si vous l’avez reçu en doublons ou triplette (aucun message qui m’indique que le message est parti alors …

bonjour à toutes et à tous !

par avance un grand merci pour ceux et celles qui auront la sympathie de bien vouloir m’aider… et mes excuses pour les futures fautes d’othographes…

bon voilà, je me lance,

j’ai créée un mini site (google site) dans lequel j’ai intégré un agenda (crée spécialement à cet effet) et puis un formulaire qui permet de compléter l’agenda.

j’ai suivi un tuto (d’ailleurs très bien expliqué) que je joints ici -->

espacemultimedia.cc-canton-rocheserviere.fr…

J’ai suivi ce tuto a la lettre et il fonctionne à merveille… si le formulaire indiqué convient pour la personne…

bon me direz-vous ou est le problème alors ? eh bien il résulte dans la modification du formulaire. je m’explique : dans le formulaire du tuto il y une “date et heure de début” et “date et heure de fin”. ça c’est très bien pour certaines choses mais pour ma part j’aurais apprécié pouvoir inscrire uniquement sur le formulaire une date et heure seulement pas de début ni de fin… alors sur le formulaire c’est possible de le faire d’accord mais après c’est au niveau du script que ca coince…

en fait j’aimerais que le script ne prenne que l’heure et la date de début puis indique une durée horaire convenu par défaut exemple : au lieu que la personne indique sur le formulaire une date de début et de fin ainsi qu’une heure de début et de fin, elle indique simplement la date et l’heure du rdv puis le script le rajoute sur l’agenda avec une durée défini comme par exemple un rdv de 1 heure (ce serai moi qui défini la durée) le 13/05/2014 à 14:00:00

donc, faire un nouveau formulaire, une nouvelle feuille de calcul ok, copier le script et le modifier comme expliqué dans le tuto ok, mais c’est juste après ! la ligne 38 dans mon cas que ca bloque … je ne suis pas doué dans ce domaine, je ne connais pas le language employé d’ailleurs dans ce script et je ne sais pas si il faut un nouveau script (et comment et ou le prendre car l’anglais et mois…) ou comment faire … pour que le script s’execute avec une date et heure unique et que je puisse en choisir la durée … ex : dans le formulaire la personne choisi la date de son rdv et l’heure qu’elle souhaite (par ex : le 13/05/2014 à 14:00:00), une fois le formulaire envoyé, celui-ci s’inscriera et remplira le créneau souhaité avec par exemple une durée configurée par défaut ( 1 heure par ex)

voici ce que me dit le script quand je suis dans la feuille de calcul google puis outils éditeur de script, puis exécuter et enfin je clique sur import calendar

L’heure de début de l’événement doit être antérieure à celle de fin. (ligne 38, fichier “Code”)Ignorer

si je clique sur ignorer ca fait rien…

voici pour info le script complet

var EVENT_IMPORTED = “AJOUTE”; // Ajoutera le texte “AJOUTE” dans la colonne L
var ss = SpreadsheetApp.getActiveSpreadsheet();

function onOpen() {
var menuEntries = [{name: “Ajouter les événements à l’agenda”, functionName: “importCalendar”}];
ss.addMenu(“Agenda”, menuEntries); // Pour ajouter une menu Agenda et un sous-menu “ajouter les événements” dans la feuille de calcul. Cela permettra de tester manuellement la liaison entre la feuille de calcul et l’agenda
}

function importCalendar() {
var sheet = SpreadsheetApp.getActiveSheet();
var startcolumn = 2; // Première colonne de prise en compte des données, soit la colonne B (Je souahite)
var numcolumns = 30; // Nombre de colonne
var dataRange = sheet.getRange(startcolumn, 1, numcolumns, 12) // Nombre de colonne contenant des données
var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
var column = data[i];
var titre = column[2]; // Colonne B - Titre de l’événement dans l’agenda - Je souhaite
var DateDebut = column[3]; // Colonne C - Date d’arrivéé
var DateFin = column[4]; // Colonne D - Date de départ
var Nom = column[5]; // Colonne E - Nom
var Adresse = column[6]; // Colonne F - Adresse
var CP = column[7]; // Colonne G - Code postal
var Ville = column[8]; // Colonne H - Ville
var Email = column[9]; // Colonne I - e-mail
var NumTel = column[10]; // Colonne J - Numéro de téléphone
var Renseignement = column[11] // Colonne K - Renseignements complémentaires
var description = "Nom du contact : “+ Nom +” // Adresse : “+ Adresse +” // Code postal : “+ CP +” // Ville : “+ Ville +” // Numéro de téléphone : “+ NumTel +” // Motifs du rendez-vous : "+ Renseignement // concatenation des champs des colonnes E à J destinée à la zone Description de l’agenda
var eventImported = column[10];// Colonne K - Statut de l’importation - colonne AJOUTE A L’AGENDA

var setupInfo = ss.getSheetByName("agenda"); // Nom de la feuille de calcul contenant la nom de l'agenda
var calendarName = setupInfo.getRange("A1").getValue(); // Référence de la cellule contenant le nom de l'agenda

if (eventImported  != EVENT_IMPORTED && titre != "") {  // Evite les doublons dans l'agenda, si le texte AJOUTE est présent en K, l'événement n'est pas ajouté
var cal = CalendarApp.openByName(calendarName);
      
  
 cal.createEvent(titre, new Date(DateDebut), new Date(DateFin), {description : description}); // Création de l'événement dans l'agenda avec le titre, la date de début, la date de fin et la description complète

  
  sheet.getRange(startcolumn + i, 11).setValue(EVENT_IMPORTED); // Nombre de colonne contenant des données

  SpreadsheetApp.flush();  
}

}
}

C’est vraiment important pour moi

alors avis aux experts de problèmes complexes (en tous cas pour moi…)

soyez sympa svp aidez-moi c’est vraiment important et urgent pour moi

dites moi quoi faire ou alors je peux vous fournir le formulaire, la feuille de calcul que j’ai complétée … si cela peut aider…

j’espère en tout cas que vous aurez compris ma difficulté… en espérant avoir décrit au mieux mon problème

un grand merci d’avance

Thématique sélectionnée : Google

Essaie de remplacer la ligne de date de fin
var DateFin = column[4]; // Colonne D - Date de départ
par une valeur calculée
var DateFin = column[3] + 1/24 ; // là on rajoute une heure

Si ça marche, il ne te restera plus qu’à la faire disparaitre du formulaire

Tu peux même remplacer la date de fin par la durée (en heures) dans le formulaire en question
var DateFin = column[3] + column[3]/24 ;

bonjour

tout d’abord merci beaucoup de répondre et de m’aider !!!

c’est vraiment sympa !

pour la ligne j’ai fait la modif demandée mais j’ai un message d’erreur quand le script bloque sur la 3éme ligne en partant du bas (cal.createEvent…) il me met :

L’heure de début de l’événement doit être antérieure à celle de fin. (ligne 37, fichier “Code”)Ignorer

a t-on avis ?

RE-bonjour,

je viens de faire la même chose avec la deuxième solution

var DateFin = column[3] + column[3]/24 ;

mais j’ai toujours la même erreur qui s’affiche (3ème ligne du bas cal.creatEvent…)

pour info je l’ai recommencé avec un nouveau formulaire et script originel (depuis le début …)

le voici :

var EVENT_IMPORTED = “AJOUTE”; // Ajoutera le texte “AJOUTE” dans la colonne K
var ss = SpreadsheetApp.getActiveSpreadsheet();

function onOpen() {
var menuEntries = [{name: “Ajouter les événements à l’agenda”, functionName: “importCalendar”}];
ss.addMenu(“Agenda”, menuEntries); // Pour ajouter une menu Agenda et un sous-menu “ajouter les événements” dans la feuille de calcul. Cela permettra de tester manuellement la liaison entre la feuille de calcul et l’agenda
}

function importCalendar() {
var sheet = SpreadsheetApp.getActiveSheet();
var startcolumn = 2; // Première colonne de prise en compte des données, soit la colonne B (titre du rendez-vous)
var numcolumns = 30; // Nombre de colonne
var dataRange = sheet.getRange(startcolumn, 1, numcolumns, 11) // Nombre de colonne contenant des données
var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
var column = data[i];
var titre = column[1]; // Colonne B - Titre de l’événement dans l’agenda - Titre du rendez-vous
var DateDebut = column[2]; // Colonne C - date et heure de début de l’événement
var DateFin = column[2] +1/24 ; // Colonne D - là on rajoute une heure
var Nom = column[4]; // Colonne E - Nom du contact
var Adresse = column[5]; // Colonne F - Adresse
var CP = column[6]; // Colonne G - Code postal
var Ville = column[7]; // Colonne H - Ville
var NumTel = column[8]; // Colonne I - Numéro de téléphone
var Motif = column[9]; // Colonne J - Motif du rendez-vous
var description = "Nom du contact : “+ Nom +” // Adresse : “+ Adresse +” // Code postal : “+ CP +” // Ville : “+ Ville +” // Numéro de téléphone : “+ NumTel +” // Motifs du rendez-vous : "+ Motif // concatenation des champs des colonnes E à J destinée à la zone Description de l’agenda
var eventImported = column[10];// Colonne K - Statut de l’importation - colonne AJOUTE A L’AGENDA

var setupInfo = ss.getSheetByName("agenda"); // Nom de la feuille de calcul contenant la nom de l'agenda
var calendarName = setupInfo.getRange("A1").getValue(); // Référence de la cellule contenant le nom de l'agenda

if (eventImported  != EVENT_IMPORTED && titre != "") {  // Evite les doublons dans l'agenda, si le texte AJOUTE est présent en K, l'événement n'est pas ajouté
var cal = CalendarApp.openByName(calendarName);
      
  
 cal.createEvent(titre, new Date(DateDebut), new Date(DateFin), {description : description}); // Création de l'événement dans l'agenda avec le titre, la date de début, la date de fin et la description complète

  
  sheet.getRange(startcolumn + i, 11).setValue(EVENT_IMPORTED); // Nombre de colonne contenant des données

  SpreadsheetApp.flush();  
}

}
}

au fait de quel type de langage s’agit il a-t-on avis ?

PS : si cela peut aider je peux transmettre la feuille de calcul ou autre ?

merci en tout cas !

RE-bonjour,

bon j’ai essayer d’autres solutions… j’avoue que je m’aventure je ne sais trop ou la …

bon bref, c’est important pour moi voici ce que j’ai fait :

j’ai enlever vette fameuse ligne (cal.creatEvent…) et je l’ai remplacée par

/**

  • Crée un objet de Date unique à partir des cellules distinctes de date et de temps.
  • @param {Date} date - Un objet Date à partir de laquelle extraire la date.
  • @param {Date} time - Un objet Date à partir de laquelle extraire le temps.
  • @return {Date} - Un objet Date représentant la date et l’heure combiné.
    */
    function joinDateAndTime_(date, time) {
    date = new Date(date);
    date.setHours(time.getHours());
    date.setMinutes(time.getMinutes());
    return date;
    }

alors du coup quand je clique sur executer puis importCalendar et bien la ca bloque pas et ca met bien AJOUT dans la colonne “ajout à l’agenda” de la feuille de calcul. En revanche, aucun rendez-vous est noté dans l’agenda en question…

j’ai alors réintégré cette fameuse ligne (createEvent…) puis collé à la fin du script originel la formule inscrite ci-dessus (je sais pas si on dit formule alors sorry pour les mots…) et la pareil, birarement ca fonctionne enfin ca bloque pas et ca met pareil AJOUT dans cette colonne…

des suggestions ?

ce que je comprends pas du coup c’est que quand le script est seul (pas ce que je viens de rajouter en plus) il marque une erreur sur la ligne cal.creatEvent… et puis quand je rajoute autre chose, on dirait qu’il survol cette ligne…

si cela peut aider…

merci d’avance

bon,

visiblement c’est la “function createEvents(e) dans le script pour créer les événements dans un agenda” qui est peut-être deconnante et qu’il faudrait peut-être réadapter pour moi …

j’emet une hypothèse…

un avis ?

bonjour !!!

nuit blanche alors suis un peu grognon (cela m’ennuie de bloquer sur ce type de fait surtout quand je n’y connais rien…

quelqu’un peu m’aider svp

c’est vraiment important pour moi !!!

merci d’avance si une âme charitable veuille bien m’aider…

Effectivement, ça ne peut pas fonctionner : en y regardant de plus près, le contenu de column[2] et column[3] n’est pas directement manipulable comme une date.

C’est assez difficile de s’y retrouver dans cette macro (surtout d’interpréter les commentaires), donc en essayant de la modifier au minimum, tu peux déjà tester ça :

1- dans le formulaire
tu remplaces la Date de Fin par Durée, avec un champ d’entrée de type texte
Tu y mettras la durée en heures et fractions d’heures (ex 2,5 pour 2h30)
Par contre, je ne sais pas le remplir avec une valeur par défaut comme tu le demandes

2- dans le code
var DateDebut = column[2]; // Colonne C - date et heure de début de l’événement
var Duree = column[3]; // Colonne D - durée de l’événement en heures sous forme décimale
var Nom = column[4]; // Colonne E - Nom du contact

if (eventImported != EVENT_IMPORTED && titre != “”) { // Evite les doublons dans l’agenda, si le texte AJOUTE est présent en K, l’événement n’est pas ajouté
var DFin = new Date(); // Date de fin
DFin.setTime(DateDebut.getTime() + Duree * 3600 * 1000); // rajout de la durée (en ms) à la date de début

var cal = CalendarApp.openByName(calendarName);
cal.createEvent(titre, new Date(DateDebut), DFin, {description : description}); // Création de l’événement dans l’agenda avec le titre, la date de début, la date de fin et la description complète
sheet.getRange(startcolumn + i, 11).setValue(EVENT_IMPORTED); // Nombre de colonne contenant des données

après tu ajustes en fonction de tes besoins

Salut, je ne sais pas si les solutions proposée ont marché.
Écris dans la case C3 =(C2*1,1) tape entrée fait glisser la case C3 en cliquant sur le petit carré en bas à droite de celle-ci pour attribuer la formule aux nombres de cases souhaitées et logiquement une heure de fin sera automatiquement calculée en fonction de l’heure de début entrée.
Si ça ne marche pas tu peux me contacter. J’ai utilisé le même script que toi et j’ai réussi à le contourner.

Maintenant je cherche à pouvoir modifier l’heure de mes rdv sans créer de doublons dans mon agenda et ça à l’air un peu plus compliqué…

Bonjour Micke85 est ce que tu as trouvé comment régler ton soucis de doublon ? J’ai le même problème que toi et je bloque depuis quelque jour.


Salut je ne sais pas si ton problème a été résolu, j'avais le même soucis que toi, pour ma part j'ai remplace la DateFin par DateDébut ce qui donne :

cal.createEvent(titre, new Date(DateDebut), new Date(DateDebut), {description : description}); // Création de l’événement dans l’agenda avec le titre, la date de début, la date de fin et la description complète

Ensuite tu peux supprimer la date de fin dans ton formulaire.