IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

APIs Google Discussion :

Select d'un formulaire HTML dans un Sheet [Google Sheets]


Sujet :

APIs Google

  1. #1
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut Select d'un formulaire HTML dans un Sheet
    Bonjour.

    Sur un Sheet, j'ai un formulaire HTML d'envoi de mail.

    J'ai un script qui me récupère tous les contacts que j'ai sur Gmail que je voudrais mettre dans un <select> de mon formulaire HTML dans mon code.gs:
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    <!DOCTYPE html><html>
      <head>
        <base target="_top">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
        <script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
        <style>
          form {
            /* Pour le centrer dans la page */
            margin: 0 auto;
            width: 500px;
            /* Pour voir les limites du formulaire */
            padding: 1em;
            border: 1px solid #CCC;
            border-radius: 1em;
          }
          div + div {
            margin-top: 1em;
          }
          label {
            /* Afin de s'assurer que toutes les étiquettes aient la même dimension et soient alignées correctement */
            display: inline-block;
            width: 90px;
          } 
          input, textarea {
            /* Afin de s'assurer que tous les champs textuels utilisent la même police
               Par défaut, textarea utilise une police à espacement constant */
            font: 1em sans-serif;
            /* Pour donner la même dimension à tous les champs textuels */
            width: 300px;
            -moz-box-sizing: border-box;
                 box-sizing: border-box;
     
     
            /* Pour harmoniser l'apparence des bordures des champs textuels */
            border: 1px solid #999;
          }
          input:focus, textarea:focus {
            /* Afin de réhausser les éléments actifs */
            border-color: #000;
          }
          textarea {
            /* Pour aligner correctement les champs multilignes et leurs étiquettes */
            vertical-align: top;
            /* Pour donner assez d'espace pour entrer du texte */
            height: 5em;
            /* Pour permettre aux utilisateurs de redimensionner un champ textuel horizontalement
               Cela ne marche pas avec tous les navigateurs  */
            resize: vertical;
          }
          .button {
            /* Pour positionner les boutons de la même manière que les champs textuels */
            padding-left: 90px; /* même dimension que les étiquettes */
          }
          button {
            /* Cette marge représente approximativement le même espace
               que celui entre les étiquettes et les champs textuels */
            margin-left: .5em;
          }
          #alert_msg{
          text-align: center;
          }
        </style>
      </head>
      <body>
      <div id="alert_msg" class="alert alert-danger hidden" role="alert">
      Veuillez remplir les champs obligatoire.
      </div>
        <form id="form_email">
          <div class="form-group">
            <label for="contact">Contact :</label>
            <select class="form-control" id="contacts">
              <?!= getContactsUser(); ?>
            </select>
          </div>
          <div class="form-group">
            <label for="courriel">Courriel :</label>
            <input class="form-control" type="email" id="courriel" name="user_email" placeholder="Adresse e-mail" required>
          </div>
          <div class="form-group">
            <label for="objet">Objet :</label>
            <input class="form-control" type="text" id="objet" name="objet_email" placeholder="Objet du message" required autocomplete="off">
          </div>
          <div class="form-group">
            <label for="message">Message :</label>
            <textarea class="form-control" id="message" name="message_email" placeholder="Message" rows="6" required autocomplete="off"></textarea>
          </div>
          <div class="button">
            <button id="submit_form" class="btn btn-success" type="button">Envoyer le message</button>
          </div>
        </form>
      </body>
      <script type='text/javascript'>
     
     
    $(function() {
      $('#courriel').val('destinataireParDefaut@exemple.com');
      $('#submit_form').on('click', function(){
        var email = $('#courriel').val();
        var objet = $('#objet').val();
        var form = '<h1>Formulaire test</h1>' + 
        '<form id="test-form">' +
        '<label for="nom">Nom</label><br />' + 
        '<input type="text" name="nom" id="nom"/><br />' + 
        '<label for="prenom">Prénom</label><br />' + 
        '<input type="text" name="prenom" id="prenom"/><br />' + 
        '<label for="sujet">Sujet</label><br />' + 
        '<input type="text" name="sujet" id="sujet"/><br />' + 
        '<label for="message">Message : </label><br />' + 
        '<textarea name="message" id="message"></textarea><br />' + 
        '<button class="btn btn-success" type="submit" id="submit-form" name="envoyer" >Envoyer</button><br />';
        var msg = $('#message').val() + form;
        if(email != '' && objet != '' && msg != ''){
          google.script.run.sendMail(email, objet, msg);
          google.script.host.close();
          Browser.msgBox('Le mail de facturation a bien été envoyé à ' + email + '.')
        }else{
          $("#alert_msg").removeClass("hidden");
          if(email == ''){
            $('#courriel').css('border-color', 'red');
          }else{
            $('#courriel').css('border-color', '#ccc');
          }
          if(objet == ''){
            $('#objet').css('border-color', 'red');
          }else{
            $('#courriel').css('border-color', '#ccc');
          }
          if(msg == ''){
            $('#message').css('border-color', 'red');
          }else{
            $('#courriel').css('border-color', '#ccc');
          }
        }
      });
     
     
      $('#courriel').on('change', function(){
        if($('#courriel').val() != ''){
          $(this).css('border-color', '#ccc');
        }
      });
     
     
      $('#objet').on('change', function(){
        if($('#objet').val() != ''){
          $(this).css('border-color', '#ccc');
        }
      });
     
     
      $('#message').on('change', function(){
        if($('#message').val() != ''){
          $(this).css('border-color', '#ccc');
        }
      });
    });
     
     
      </script>
    </html>

    Le méthode getContactsUser() ligne 74, me remonte bien les infos que je veux (j'ai mon résultat voulu quand je ais un Browser.msg(getContactsUser()) !)mais impossible de les afficher dans mon <select> (voir ligne 74 de mon code HTML).
    Ça fais 3 jours que j'y suis dessus et je n'arrive à rien.

    Help pls

    Merci d'avance pour votre aide.

  2. #2
    Membre confirmé

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Points : 452
    Points
    452
    Par défaut
    Hum,

    mince, apparemment son pc a cramé avant qu'il ne termine sa question :-)

  3. #3
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut
    Oui désolé, mes doigts sont en gréves ^^

  4. #4
    Membre confirmé

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Points : 452
    Points
    452
    Par défaut
    Salut FCL31,

    Deux possibilités : soit "form.html" est complété avant d'être affiché, soit il faut négocier la communication entre le GS (coté serveur) et la page HTML/JS (coté navigateur).

    Dans le premier cas, un simple split sur la balise qui servira de repère devrait permettre d'injecter la liste d'options. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    => coté GS : 
    var pageForm = HtmlService.createHtmlOutputFromFile('form.html').getContent(); // devrait déjà exister, peut-être dans une méthode doGet ?
    function completeForm(pageForm) {
    	var flag = 'id="contacts">';
    	var frag = pageForm.split(flag);
    	var options = getContactsUser();
    	return frag[0] + flag + options + frag[1];
    }
    Dans le second cas (page déjà affichée qui doit aller chercher les données coté serveur), il est nécessaire d'utiliser "google.script.run.withSuccessHandler...". Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    => à placer coté HTML : 
    function useContacts(contacts) {
    	console.log('useContacts : ' + contacts + ' : ' + contacts.length);
    }
    function getContacts() {
    	var test = google.script.run.withSuccessHandler(useContacts).getContactsUser(); // Appel à la méthode GS getContactsUser, le résultat sera traité par "useContacts" coté client
    	console.log('testContact : ' + test); // test ne contient rien à ce niveau !
    }
    En espérant que cela aide...

  5. #5
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut
    Merci pour tes réponses.

    Mais sa n'a pas l'air de fonctionner (je vais y travailler un peut p lus dessus).

    J'ai surtout l'impression qu'il ne me reconnais pas Sur le navigateur, c'est directement écrit <?!= methodeDuGS(); comme du simple texte.

    J'ai essayé comme j'ai vu sur plusieurs tuto, de faire une méthode include(file) pour le css et le script mais c'est pareil, c'est afficher comme un simple texte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    => coté GS
    function include(file){ return HtmlService.createHtmlOutputFromFile(file).getContent(); 
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    => coté HTML
    <?!= include('style'); ?>
    avec un fichier style.html avec tout mon css dans des balise <style>

    J'ai tout fais comme j'ai vu sur des vidéos ou tuto mais rien ne fonctionne



    Edit
    Citation Envoyé par TIFéç Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    => coté GS : 
    var pageForm = HtmlService.createHtmlOutputFromFile('form.html').getContent(); // devrait déjà exister, peut-être dans une méthode doGet ?
    Dans mon doGet(), j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return HtmlService.createHtmlOutputFromFile('form');
    sans le getContent() car sinon, j'ai une erreur :
    Le script est terminé, mais la valeur obtenue n'est pas un type de réponse compatible.

  6. #6
    Membre confirmé

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Points : 452
    Points
    452
    Par défaut
    Alors,

    j'ai préféré mutualiser ma méthode "doGet" pour mieux isoler le contenu à injecter dans chaque page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function doGet(event) {
      // Génération d'une trame HTML de base qui sera remplacée
      var formHtml = HtmlService.createHtmlOutputFromFile('Accueil_HTML').setSandboxMode(HtmlService.SandboxMode.IFRAME); // A vérifier si le sandboxMode est nécessaire?
     
      // Appel à la méthode de la page pour obtenir le contenu à afficher
      var contentFormHTML = getMaPage();
     
      // Reinjection du flux dans son objet
      formHtml.setContent(contentFormHTML);
     
      // Enfin le flux HTML est retourné à l'utilisateur pour affichage
      return formHtml;
    }
    Ensuite dans "getMaPage" je peux travailler le contenu comme s'il s'agissait d'un très gros string. Par exemple, pour ré-injecter la gestion de style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    function getMaPage() {
      // D'abord génération de la trame de la page d'après le code HTML lié et transformation en string
      var pageAccueil = HtmlService.createHtmlOutputFromFile('MaPage_HTML').getContent();
     
      // Injection du style sur la balise <MonStyle>
      pageAccueil = util_injecterStyle(pageAccueil);
     
      return pageAccueil;
    }
     
    function util_injecterStyle(contentFormHTML) {
      // Flag sur '<MonStyle/>' pour injection des éléments de style (CSS)
      var TAG_STYLETOINCLUDE = '<MonStyle/>';
      var NOM_SRC = 'Style';
     
      // Identification des éléments à supprimer à l'aide du flag de debut et de celui de fin, attention il peut y avoir injection d'une balise de remplacement
      var elementsAvantEtApresFlag = contentFormHTML.split(TAG_STYLETOINCLUDE); // En théorie, il ne devrait y avoir qu'un seul...
     
      // Récupération du fichier partagé Style.html sous forme de String pour injection dans la page HTML
      var styleHtml = HtmlService.createHtmlOutputFromFile(NOM_SRC).getContent();
     
      return elementsAvantEtApresFlag[0] + styleHtml + elementsAvantEtApresFlag[1]; 
    }
    Sur cette base, tu devrai pouvoir injecter facilement la liste d'options dans le code HTML avant affichage comme proposé précédemment.
    Par contre, je ne saurai pas t'aider à utiliser le tag "<?!=". Je ne l'ai jamais utilisé... Il est décrit dans la doc Google Apps Script ?

  7. #7
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut
    Cool. Merci, je vais regarder çà.

    Faut voir si j'arrive à l'adapter car je voie que tu utilise 2 pages HTML : Accueil_HTML et MaPage_HTML alors que moi, j'en ai qu'une ^^.

    Si je comprends bien, tu fais un 'include' d'une page de style dans la balise <MonStyle/> que tu met dans ta page HTML.

    Faut que je vois plus en détail car je voudrais bien le faire pour pour le script (je trouve que tout est plus lisible).

    Et bien sur voir pour ajouter d'autres info comme mon <select>.

    Mais dans le doGet(), peut on faire en sorte de remplacer plusieurs balise HTML 'personnalisées' ?

    Je sais pas si je me suis bien fais compris ^^


    EDIT

    Bon, j'ai modifier un peux ton code pour pouvoir injecter du css et du script avec la même méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function getMaPage() {  // D'abord génération de la trame de la page d'après le code HTML lié et transformation en string
      var pageAccueil = HtmlService.createHtmlOutputFromFile('MaPage_HTML').getContent();
      // Injection du style sur la balise <MonStyle>
      pageAccueil = util_injecter(pageAccueil, '<MonStyle/>', 'style');
      pageAccueil = util_injecter(pageAccueil, '<MonScript/>', 'script');
      return pageAccueil;
    }
     
     
    function util_injecter(contentFormHTML, balise, file){
      var TAG_INCLUDE = balise;
      var NOM_SRC = file;
      // Identification des éléments à supprimer à l'aide du flag de debut et de celui de fin, attention il peut y avoir injection d'une balise de remplacement
      var elementsAvantEtApresFlag = contentFormHTML.split(TAG_INCLUDE); // En théorie, il ne devrait y avoir qu'un seul...
      // Récupération du fichier partagé html sous forme de String pour injection dans la page HTML
      var HtmlFile = HtmlService.createHtmlOutputFromFile(NOM_SRC).getContent();
      return elementsAvantEtApresFlag[0] + HtmlFile + elementsAvantEtApresFlag[1];
    }
    C'est peut-être optimisation. Je sais pas.

    Sa répond toujours pas à ma question originale mais je vais voir si je peux en faire quelque chose ^^

  8. #8
    Membre confirmé

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Points : 452
    Points
    452
    Par défaut
    En réalité, j'utilise plusieurs autres pages :-)

    En bidouillant sur cette base "doGet + fonction maison de navigation + couple GS/HTML par page", il est possible de développer de véritables "petites" applications web : doGet n'est appelé qu'à la connexion de l'utilisateur, par la suite les navigations sont "simulées" en manipulant le Dom de façon à remplacer l'intégralité de la page. La méthode de maj écran (à exploiter coté navigateur sur le "onSuccess" d'un appel au GS qui renvoi le contenu à afficher, par ex google.script.run.withSuccessHandler(miseAJourContenu).execEtNav() que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	function miseAJourContenu(contenuAAfficher) {
    	  // Injection du nouveau contenu
    	  var node = document.getElementById("bodyToSwitch");
    	  node.removeChild(document.getElementById("bodyToSwitch").firstChild);
    	  node.innerHTML = contenuAAfficher;
     
    	  // Déclenchement d'une possible action "onload"
    	  actionOnload();
    	}
    Comme chaque page est "générée" coté GS, j'ai mis en place quelques balises HTML maison pour injecter des composants d'affichage (<My_Label>, <My_Input>, etc...), et par dessus des méthode utilitaires de génération de code HTML correspondant à un libellé, un bouton, un champs de saisie, etc... Du coup, chaque page devient une composition, sur la base de son contenu HTML à l'aide de "createHtmlOutputFromFile", puis par parsing et injection des éléments HTML customisés.

    Pour exemple, la page d'accueil utilisée :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html id="bodyToSwitch">
    <head>
    	<My_JSClient/> <!-- Balise maison pour injection du js attendu coté client -->
    	<base target="_blank">
    	<title>Accueil</title>
    	<link href='/static/forms/client/css/3522161596-formview_st_ltr.css' type='text/css' rel='stylesheet'>
    	<link href='/static/forms/client/css/3145455273-mobile_formview_st_ltr.css' type='text/css' rel='stylesheet' media='screen and (max-device-width: 721px)'>
    </head>
    <body dir="ltr" class="ss-base-body">
    	<div itemscope itemtype="http://schema.org/CreativeWork/FormObject">
    		<div class="ss-form-container">
    			<div class="ss-header-image-container"><div class="topHeader"></div><div class="ss-header-image-image"><div class="ss-header-image-sizer"></div></div></div>
                <div class="top-menu"></div>
    			<div class="ss-top-of-page">
    				<div class="ss-form-heading">
    					<h1 class="ss-form-title" dir="ltr">Demande de contrat AT</h1>
    					<div class="ss-form-desc ss-no-ignore-whitespace" dir="ltr">Bonjour, vous êtes authentifié en tant que : userconnected<Br>Cette version de l'application a été mise à jour la dernière fois en : datemaj</div>
                        &nbsp;
                    </div>
    			</div>
    			<div class="ss-form">
    				<div class="ss-q-bigtitle ss-no-ignore-whitespace" dir="ltr">Sélectionner l'action à réaliser parmi les suivantes : </div>
    				<div class="ss-form-entry" style="display:inline-flex;width:100%;">
    					<My_Label>ACC_LIB_NOUVEAU_</My_Label>
    					<My_Button>NAV_NOUVEAU</My_Button>
    				</div>
    				<div class="ss-form-entry" style="display:inline-flex;width:100%;">
    					<My_Label>ACC_LIB_BROUILLONS_</My_Label>
                        <My_Select>LIST_ENCOURS</My_Select>
    					<My_Button>NAV_REPRISE</My_Button>
    					<My_Button>NAV_SUPPRESSION</My_Button>
    				</div>
    				<div class="ss-form-entry" style="display:inline-flex;width:100%;">
    					<My_Label>ACC_LIB_ARCHIVES_</My_Label>
                        <My_Select>LIST_ARCHIVES</My_Select>
    					<My_Button>NAV_SYNTHESE</My_Button>
    				</div>
    			</div>
    			<div class="ss-footer"></div>
    			<My_Input>INP_NUMDEMANDE_BROUILLON_</My_Input>
    			<My_Input>INP_NUMDEMANDE_ARCHIVE_</My_Input>
    		</div>
    	</div>
    </body>
    <My_Style/> <!-- Balise maison pour injection du style CSS-->
    </html>

    Ça fonctionne pas trop mal. J'en ferai peut-être un tuto à l'occasion car je n'ai pas trouvé beaucoup d'exemples présentant ce type de mécanisme...

  9. #9
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut
    Nikel, j'ai réussi a faire ce que je voulais .

    J'ai d'autres trucs a faire donc, je vais voir pour appliquer cette méthode qui me plait beaucoup.

    Si problème, je me permettrais de te recontacter.





    C'est super compliqué de trouver des bon tuto sur Google-Apps-Script.
    Si jamais tu as des liens, je suis fort intéressé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Reception formulaire html dans outlook
    Par phemme dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 04/12/2009, 14h28
  2. Affichage formulaire html dans webmail
    Par romann76 dans le forum Langage
    Réponses: 3
    Dernier message: 18/04/2009, 20h17
  3. Réponses: 3
    Dernier message: 08/01/2009, 14h44
  4. Affichage d'un formulaire HTML dans PHP
    Par super-java dans le forum Langage
    Réponses: 5
    Dernier message: 25/10/2007, 16h10
  5. Probleme avec mes formulaire html dans mes pages web
    Par foungnigue dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 28/12/2005, 19h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo