Macro Récapitulatif d'une feuille a une autre

Bonjour,

J'ai un fichier : https://docs.google.com/spreadsheets/d/1TaefeLjOZ9192gcDwY86enkWwwxXhvsKv515IHRLEEQ/edit?usp=sharing

avec une première feuille avec des infos à diffèrents endroit, je souhaiterai une fois les cellules rempli cliquer sur un bouton et tout ce retranscris sur la feuille 2 et que sur la feuille 2 cela ce mette à la suite, à chaque clique sur le bouton, une nouvelle ligne avec les info.

J'avais ce code que le forum m'avait gentiment fait, sur excel qui fonctionne mais je redemande votre aide pour google sheet ;-)

Sub RecapClient()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim LI As Integer 'déclare la variable LI (LIgne)

Set OS = Worksheets("Demande") 'définit l'onglet source OS
Set OD = Worksheets("Recap") 'définit l'onglet destination OS
LI = IIf(OD.Range("A1").Value = "", 1, OD.Cells(Application.Rows.Count, "A").End(xlUp).Row + 1) 'définit la ligne I
OD.Cells(LI, "A").Value = OS.Range("C1").Value 'récupère la valeur de B1 de l'onglet source dans la cellule Ligne LI colonne A de l'onglet OD
OD.Cells(LI, "B").Value = OS.Range("C14").Value 'récupère la valeur de E1 de l'onglet source dans la cellule Ligne LI colonne B de l'onglet OD
OD.Cells(LI, "C").Value = OS.Range("G14").Value 'récupère la valeur de C3 de l'onglet source dans la cellule Ligne LI colonne C de l'onglet OD
OD.Cells(LI, "D").Value = OS.Range("C8").Value 'récupère la valeur de D6 de l'onglet source dans la cellule Ligne LI colonne D de l'onglet OD
OD.Cells(LI, "E").Value = OS.Range("C24").Value
OD.Cells(LI, "F").Value = OS.Range("C27").Value
OD.Cells(LI, "G").Value = OS.Range("C26").Value
OD.Cells(LI, "H").Value = OS.Range("C35").Value
OD.Cells(LI, "I").Value = OS.Range("C37").Value
OD.Cells(LI, "K").Value = OS.Range("C43").Value
OD.Cells(LI, "J").Value = OS.Range("B48").Value
OD.Cells(LI, "S").Value = OS.Range("F2").Value
OD.Cells(LI, "T").Value = OS.Range("IY25").Value

MsgBox ("Données Enregistrées")
MsgBox ("Supprimer la ligne dans l'onglet Recap si vous souhaitez recommencer !")
End Sub

Merci de votre aide.

Bonjour,

ton fichier requiert une autorisation ... mets le lien en lecture a minima https://www.sheets-pratique.com/fr/cours/partage

voici un exemple (à revisiter sans doute) https://docs.google.com/spreadsheets/d/1tU3koMXsQjKwPj2uXNvcTgaPAUHDQ4hRIb9CfptWL0c/edit?usp=sharing

il y a notamment

  • le fait qu'une fois une cellule remplie, on passe à la cellule suivante du formulaire en automatique
  • une table de correspondance entre les zones de saisie et les colonnes de le BdD
  • un onglet de recherche (query)
function onEdit(event) {
  var f = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if (f.getName() == 'Saisie'){

    if (r.getA1Notation() == 'C11' || r.getA1Notation() == 'F11') {
      var val = event.value;
      if (!isNaN(val)) {
        var res = val.replace(".", ",");
        r.setValue(res);
      }
    }

    var adresses = ["C3","C5","F5","C7","F7","C9","F9","C11","F11","E13"];
    var valeurs = adresses.join().split(",");
    var item = valeurs.indexOf(r.getA1Notation());
    if (item < adresses.length - 1){ // sauf le dernier
      f.setActiveSelection(adresses[item + 1]);
    }

  }
}

function saisir(){
  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var f1 = SpreadsheetApp.getActive();
  var n = f1.getRange('F13').getValue();
  var origine = ["C3","C5","F5","C7","F7","C9","F9","C11","F11","C13"];
  if (n == 7) {
    var destination = ["A","B","C","D","E","F","H","I","J","G"];
    var f2 = doc.getSheetByName('BdD');
    var derL = f2.getLastRow() + 1;
    f1.getRange('C13').setValue(f2.getRange('G' + (derL - 1)).getValue() + 1);
    for (var i = 0; i < origine.length; i++){
      f2.getRange(destination[i] + derL).setValue(f1.getRange(origine[i]).getValue());
    }
    f1.getRangeList(origine).clearContent();
    //f1.setActiveSelection(origine[0]);
  } else {
    Browser.msgBox('Merci de renseigner tous les champs !');
    f1.setActiveSelection(origine[0]);
  }
}

Il y a aussi plus simple : un formulaire en sidebar que nous avait fait Sébastien ...

https://www.sheets-pratique.com/fr/codes/sidebar

dernière solution : utiliser le formulaire google associé à une sheet , solution hyper simple.

Merci pour vos retours, je vais tester ton code.

Pour l'utilisation du formulaire, j'avais bien pensé, mais je n'aime pas du tout l'apparence, car l'idée est que ce formulaire soit rempli par un opérateur, puis envoyé propre et avec toutes les infos au fournisseurs pour information. (demande de transport)

D'ailleurs, si vous avez la solution pour lorsque l'on a fait le formulaire, pouvoir faire envoyer et que cela donc ce copie sur la feuille, ok mais surtout que cela créer un fichier PDF vers un dossier spécifique, et que cela ouvre mail pour un envoie du fichier pDF.

Merci.

Bonjour,

pour un envoi en pdf d'une feuille connaissant son id & gid, tu trouveras ici une solution

https://forum.excel-pratique.com/sheets/generer-pdf-depuis-un-script-150217#p929796

comme je n'ai pas accès à ton projet, je ne peux pas en dire plus.

Merci pour ton lien, je vais regarder.

Et désolé, j'avais zappé de modifier les accès, c'est chose faite : mis en lecture pour les personnes ayant le lien ! ;-)

Encore merci à toi pour l'aide.

Le code PDF, fonctionne à merveille, MERCI.

Est ce qu'il pourrai par contre, reprendre le texte d'une cellule , et en définir le nom du PDF ?

Voir même, créer un dossier, puis le PDF à l'intérieur ! ;-)

Créer un dossier, je ne sais pas, mais pour ce qui est du nom, oui on peut le définir à partir de la valeur d'une cellule en changeant cette ligne

const fichier = '____nom___du___fichier____suivi_ici_de_sa_date____________' + "_" + d + ".pdf"

par

const fichier = SpreadsheetApp.getActive().getActiveSheet().getRange("XX").getValue().toString()

Bonjour,

voilà un code pour créer un dossier

//Créer un nouveau dossier dans une racine Google Drive

function createNewFolderInGoogleDrive(folderName) {
  return DriveApp.createFolder(folderName);
}

function lancement(){
 var newFolder = createNewFolderInGoogleDrive('Test folder');
 // identifiant de sortie du nouveau dossier à consigner
Logger.log(newFolder.getId()); 

}

ou encore comme ceci

function getFolderId(){
  const name = 'Paul'
var id;
var folders = DriveApp.getFoldersByName(name);
if (folders.hasNext()) {
  var folder = folders.next();
  id = folder.getId(); }
else {
   var folder = DriveApp.createFolder(name);
   id = folder.getId();
}
return id;
}

Merci à vous 2 pour les codes, j'ai tout maintenant pour arriver à faire ce que j'ai besoin, encore MERCI.

Rechercher des sujets similaires à "macro recapitulatif feuille"