Boite de dialogue pour saisir des données et les recopier dans une cellule

Bonjour !

Un expert pourrait-il me donner un coup de main SVP ?

J'aimerais créer une boite de dialogue, nommée "Saisir les données manquantes" qui propose à l'utilisateur de "Saisir l'adresse mail du client" ainsi que de "Saisir l'adresse de l'installation", avec un bouton "OK" et un bouton "annuler". J'aimerais que l'adresse mail du client arrive ensuite en Q10 dans ma feuille de calcul 2 ("DEVIS"), et l'adresse de l'installation en Q12 (aussi dans la feuille "DEVIS").

Si l'utilisateur ne remplit pas les champs, j'aimerais qu'il ne se passe rien et que Q10 conserve sa formule initiale qui est "=SI(ESTTEXTE('Ne-pas-toucher'!N1);'Ne-pas-toucher'!N1;SI(ESTTEXTE('Ne-pas-toucher'!N2);'Ne-pas-toucher'!N2;SI(ESTTEXTE('Ne-pas-toucher'!N3);'Ne-pas-toucher'!N3;SI(ESTTEXTE('Ne-pas-toucher'!N4);'Ne-pas-toucher'!N4;SI(ESTTEXTE('Ne-pas-toucher'!N5);'Ne-pas-toucher'!N5)))))". Mais si l'utilisateur remplit une adresse mail, j'aimerais que cette même formule arrive en Q11, et qu'en Q10 soit inscrit l'adresse mail.

Pour ce qui est de l'adresse de l'installation, j'aimerais juste que Q12 reste vide si l'utilisateur n'entre rien dans le champs.

Idéalement, j'aimerais ensuite que google sheet affiche une seconde boite de dialogue pour demander à l'utilisateur si il souhaite enregistrer la feuille de calcul "DEVIS" (en format PDF dans un dossier précis sur mon drive), avec comme bouton "Ok", "vérifier le devis avant d'enregistrer" et "annuler". Pensez vous que ce soit possible ?

Je vous remercie pour votre aide !!

Une nocive

Bonjour,

as-tu un fichier simplifié vers lequel tu pourrais mettre un lien

ci-après un tuto pour réaliser la boite de dialogue https://www.sheets-pratique.com/fr/codes/sidebar

Bonsoir et merci pour votre réponse !

Finalement, j'ai opté pour une autre méthode que la boite de dialogue : j'ai juste créé une nouvelle feuille de calcul, et se sera à l'utilisateur de remplir les infos manquantes à partir de cette feuille (feuille 2).

Par contre, je ne sais toujours pas comment résoudre le reste de mon problème.

Voici le lien de mon fichier (n'hésitez pas à demander l'accès et à le modifier (j'ai une autre version sauvegardée) : https://docs.google.com/spreadsheets/d/1KwEVwbnX_qXDvEv6SBYQJPnlmpyUQgFNES81bxR33Mo/edit?usp=sharing . (J'ai veillé à retirer toutes les données personnelles du document au préalable)

Voilà ce que j'aimerais faire précisément :

1 - Remplir de manière automatique le n° de devis (feuille de calcul 3 "DEVIS", en G9) : Idéalement, j'aimerais commencer avec le n° 1010 et ajouter +1 dès qu'un devis est enregistré

2- Créer un bouton ou n'importe quoi d'autre de cohérent qui proposerait à l'utilisateur d'enregistrer le devis (la feuille de calcul 3) en format PDF (=> et donc à chaque fois que qqn cliquerait sur le bouton (ou autre), le numéro de devis s'actualiserait (=numéro du dernier devis enregistré + 1)). Idéalement, j'aimerais que le devis s'enregistre avec le nom : DEV-"date du devis avec le format "année/mois/jour" - "n° du devis" (par exemple, le nom du devis n°1011 en date du 29 mars s'enregistrerait sous le nom "DEV-2021/03/29-1011")

3- Remplir automatiquement le tableau dans la feuille de calcul 4 ("suivi-des-devis") à chaque fois qu'un devis est enregistré :

capture d ecran 2021 03 29 a 22 18 44

Les données n° du devis / date / montant HT / montant TTC sont présentes dans la feuille de calcul n°3 (DEVIS), par contre, la commission est inscrite dans la feuille de calcul 5 (Ne-pas-toucher) en K4.

Voilà ^^, après ça, j'en aurait ENFIN fini avec l'automatisation de mes devis !!

Pour les curieux qui se demandent comment fonctionne mon fichier (oui je suis débutante donc j'ai bidouillé comme je pouvais lol), je vous explique la situation. Je vais recevoir des devis de la part de l'un de nos partenaires. Ces devis sont reçus en format PDF (impossible de les recevoir en format excel). Une fois les devis convertis en format excel (merci internet), il faut le copier et le coller dans la feuille de calcul 1 ("Coller-ici-devis-ISIOHM") et cela générera automatiquement le devis dans la feuille de calcul 3. Aussi, si l'on souhaite ajouter l'email du client ou modifier ses coordonnées, on pourra le faire à partir de la feuille de calcul 2. Malheureusement, les devis ne se présenteront JAMAIS de la même manière : le tableau correspondant au devis ou la ligne comprenant les coordonnées du client ne commence pas tjrs à la même ligne, il ne comprend jamais le même nombre de ligne, le prix n'est parfois pas inséré à la même ligne que l'article correspondant, parfois une ligne du devis = une ligne dans google sheet, d'autres fois toutes les lignes du devis sont dans une seule cellule, ETC ...

En somme, je me suis littéralement cassée la tête pour prévoir chacune des possibilités, c'est pour ça que mon fichier ressemble à une usine à gaz. Mais bon, après des heures et des heures de travail, il fonctionne !

Merci infiniment à la personne qui acceptera de m'aider pour enfin finir ce fichier ! Et promis, après je ne demande plus d'aide ^^.

Lauriane

Lauriane,

je t'ai demandé l'accès à ton fichier, sinon mets le a minima en lecture https://www.sheets-pratique.com/fr/cours/partage

Bonjour, merci pour votre réponse. C'est bon, je vous ai accordé l'accès et j'ai donné la possibilité à tout le monde de visionner le fichier.

Je vous remercie ! ^^

ok, merci

je m'en suis pris une copie pour regarder/tester sans gêner (je ne te promets pas une réponse dans la journée)

Pour le point 1 et 2

Tu as à renseigner 3 IDs :

  1. ID du fichier
  2. ID de la feuille DEVIS
  3. ID du dossier de ton Drive dans lequel tu vas stocker les devis
function onInstall(e) {
  onOpen(e); 
}
function onOpen(e) {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('**ACTIONS sur DEVIS**')
  .addItem("Incrémenter le n° de devis ↓ ","numDevis")
  .addItem("Enregistrer le PDF ↓ ","savePDF")
  .addToUi();
}
function numDevis(){
  const doc = SpreadsheetApp.getActive();
  const feuille = doc.getSheetByName('DEVIS');
  feuille.getRange("G9").setValue(feuille.getRange("G9").getValue()+1)
}
function savePDF(){
  // Création du fichier pdf
  const doc = SpreadsheetApp.getActive();
  const feuille = doc.getSheetByName('DEVIS');
  const docID = '________________id du fichier________________';
  const feuilleID = '_________id de la feuille DEVIS_____________';
  const dossier = DriveApp.getFolderById('___________________id du dossier de stockage_________________');
  const d = Utilities.formatDate(new Date(), "GMT+1", "yyyy-MM-dd")
  const fichier = 'DEV_' + d + '_' + feuille.getRange("G9").getValue().toString() + ".pdf"
  const url = 'https://docs.google.com/spreadsheets/d/' + docID + '/export?';
  const exportOptions =
    'exportFormat=pdf&format=pdf' + 
    '&size=A4' + 
    '&portrait=true' +                     // orientation portrait, false pour paysage
    '&fitw=false' +                        // pas d'ajustement en largeur
    '&sheetnames=false&printtitle=false' + // pas de nom ni de titre à l'impression
    '&pagenumbers=false&gridlines=false' + // pas de numérotation, pas de grille
    '&fzr=false' +                         // frozen rows = pas de répétition de l'en-tête
    '&gid=' + feuilleID;
  var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
  var reponse = UrlFetchApp.fetch(url + exportOptions, params).getBlob();
  // Sauvegarde du fichier. 
  dossier.createFile(reponse.setName(fichier));
}

Merci Steelson

un complément pour le suivi des devis

function suivi(){
  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var f1 = doc.getSheetByName('DEVIS');
  var f2 = doc.getSheetByName('Suivi-des-devis');
  var adresses = ["G9","G10","V42","V44"];
  var destination = ["A2","B2","C2","D2"];
  f2.insertRowBefore(2);
  for (var i = 0; i < adresses.length; i++){
    f2.getRange(destination[i]).setValue(f1.getRange(adresses[i]).getValue());
  }
}

tu peux l'ajouter au menu spécifique devis, ou bien appeler cette fonction à la fin du pdf

réduis le nombre de lignes du suivi car de toute façon la ligne s'insère toujours en haut du tableau

Merci à vous deux, c'est tellement gentil de votre part !!!!

Je vais voir si ça fonctionne et je reviens vers vous !

OMG CA FONCTIONNE MERCI !!!! Vous êtes trop fort !!! Merci bcp !!!

J'ai juste un petit problème de marge, dans le PDF enregistré, il manque la dernière colonne, qui se retrouve sur la page suivante.

Est-ce qu'il est possible de paramétrer dans la macro ces marges là :

capture d ecran 2021 03 31 a 15 36 55

Aussi (dsl j'en demande encore), est-ce qu'il est possible d'avoir un petit message du genre "le devis a bien été enregistré", une fois que la macro d'enregistrement à été lancée avec succès ?

Je vous remercie !

Aussi, il manque la commission dans la feuille "suivi de devis" :/, elle se trouve en Q5 dans la feuille "Ne-pas-toucher".

capture d ecran 2021 03 31 a 16 23 27

Serait-il possible que l'un de vous deux rajoute la ligne svp ? Merci bcp ^^

Pour la commission, je ne savais pas où la trouver

function suivi(){
  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var f1 = doc.getSheetByName('DEVIS');
  var f2 = doc.getSheetByName('Suivi-des-devis');
  var f3 = doc.getSheetByName('Ne-pas-toucher');
  var adresses = ["G9","G10","V42","V44"];
  var destination = ["A2","B2","C2","D2"];
  f2.insertRowBefore(2);
  for (var i = 0; i < adresses.length; i++){
    f2.getRange(destination[i]).setValue(f1.getRange(adresses[i]).getValue());
  }
  f2.getRange('E2').setValue(f3.getRange('Q5').getValue());
}

pour la mise en page, change cette ligne

    '&fitw=true' +                        // ajustement en largeur

Bonjour Lauriane

si tout est ok, n'oublie pas de clore ce fil de discussion en cliquant sur

Hello ! Tout fonctionne très bien, j'ai juste encore un petit souci de marge, mais cette fois ci au nv de l'ajustement en hauteur

capture d ecran 2021 04 10 a 10 54 00

Est ce que l'un d'entre vous pourrait me dire comment régler ce pb svp ?

Merci !

A tout hasard, essaie de remplacer

  '&fitw=false' +  // ajustement en largeur

par

  '&scale=4' +  // 1 = Normal 100% -- 2 = Fit to width -- 3 = Fit to height -- 4 = Fit to Page

(je n'ai pas testé)

Bonjour, merci pour votre aide !

Malheureusement, c'est pas encore ça, il y a trop de marge en haut, en bas et à gauche

capture d ecran 2021 04 13 a 12 17 23

Avez vous une autre idée ?

Essaie de diminuer les marges en faisant un simulacre d'impression. Je pense sans avoir essayé que les marges seront conservés pour le document en question.

image

Je viens d'essayer toutes les possibilités et combos possibles et rien ne fonctionne

Le seul moyen d'obtenir une bonne mise en page c'est avec des marges personnalisées

Je ne sais pas comment faire ! poste un nouveau sujet si besoin spécifiquement sur les marges.

A moins de régler la taille des cellules et la taille des caractères ?

C'est bon j'ai trouvé la solution !!!! C'était :

const exportOptions =
'exportFormat=pdf&format=pdf' +
'&size=A4' +
'&portrait=true' + // orientation portrait, false pour paysage
'&fitw=true' +
'&sheetnames=false&printtitle=false' + // pas de nom ni de titre à l'impression
'&pagenumbers=false&gridlines=false' + // pas de numérotation, pas de grille
'&fzr=false' + // frozen rows = pas de répétition de l'en-tête
'&top_margin=0.35' +
'&left_margin=0.58' +
'&right_margin=0' +
'&bottom_margin=0' +
'&gid=' + feuilleID;

Merci infiniment pour votre aide dans tous les cas !!

Bonne soirée à vous

Rechercher des sujets similaires à "boite dialogue saisir donnees recopier"