Remplacement des valeurs d'une colonne dans plusieurs feuilles de calcul

Bonjour

Je dispose de 40 feuilles de calcul dans lesquelles je souhaite modifier des valeurs dans une colonne (a priori toujours la D) de la façon suivante: la valeur A16051964 doit être remplacée par B16051964 et la valeur A16051967 doit être remplacée par la valeur B16051967 par exemple. Je peux passer par édition/ rechercher et remplacer partout dans les 40 feuilles de calcul mais peut être y a -t-il une méthode plus rapide. Avez-vous une idée? Merci

image

Bonjour,

active le service Google Sheets API

image image

ensuite, teste ceci

function replacements() {
  const ar = [
    { text: "A16051964", newText: 'B16051964' },
    { text: "A16051967", newText: 'B16051967' },
  ];
  const requests = ar.map(({ text, newText }) => ({ findReplace: { allSheets: true, find: text, replacement: newText, matchEntireCell: true, matchCase: true } }));
  Sheets.Spreadsheets.batchUpdate({ requests }, SpreadsheetApp.getActive().getId());
}

fais d'abord une copie de ton fichier

Merci

J'ai activé le service et j'ai fait une copie de mon fichier. Je voudrais en savoir plus sur le point suivant: est-ce que la formule va s'exécuter sur le seul fichier dans lequel je vais copier ce script (ce que je souhaite dans un premier temps au stade du test ) ou dans les fichiers (dans mon exemple 40 fichiers) car le lis dans la formule "allSheets"

oui, allSheets veut dire toutes les feuilles mais pas tous les fichiers

si tu as des craintes, fais 2 fichiers bidons identiques avec des textes abracadabrantesques identiques

edit

il y a quelque chose que j'interprète mal peut-être, s'agit-il de 40 feuilles ou de 40 fichiers

Je dispose de 40 feuilles de calcul dans lesquelles

(dans mon exemple 40 fichiers)

s'il s'agit de 40 fichiers, il faut que je complète

Merci. En effet il s'agit de 40 fichiers distincts

est-ce qu'ils sont regroupés sur un dossier ?

ou peut-on les cibler par un nom particulier ?

Les deux: ils sont regroupés dans un même dossier mais chaque fichier a aussi un nom particulier par ex IDCG3

Je ne sais pas du tout combien de temps cela peut prendre, cela dépend de tes fichiers.

Je propose donc de faire d'abord la liste des fichiers et retrouver leur identifiant, ensuite de cocher les cases, d'abord une, puis 5 à la fois ... selon le temps mis par le script, et lancer le remplacement.

Ouvre un nouveau fichier, active le service google Sheets API, copie le script.

Indique dans le script (première ligne) le nom du dossier

lance onOpen qui fera apparaître un menu (et te demandera aussi les autorisations)

var dossier = 'test';

function onOpen() {
  SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
    .addItem('👉 Rechercher les ID des fichiers', 'listeFichiersUnDossier')
    .addItem('👉 Remplacer pour les fichiers cochés', 'remplacer')
    .addToUi();
}

function listeFichiersUnDossier() {
  var feuille = SpreadsheetApp.getActiveSheet();
  feuille.clear();
  feuille.appendRow(["nom", "ID"]);
  var n = 0
  var folders = DriveApp.getFoldersByName(dossier);
  var foldersnext = folders.next();
  var data = [];
  var fichiers = foldersnext.getFiles();
  while (fichiers.hasNext()) {
    n++
    var fichier = fichiers.next();
    if (fichier.getMimeType = 'application/vnd.google-apps.spreadsheet') {
      data = [
        fichier.getName(),
        fichier.getId()
      ];
      feuille.appendRow(data);
    }
  }
  var rule = SpreadsheetApp.newDataValidation()
    .setAllowInvalid(false)
    .requireCheckbox()
    .build()
  SpreadsheetApp.getActive().getRange('C2:C' + (n + 1)).setDataValidation(rule);
}
function remplacer() {
  var liste = SpreadsheetApp.getActiveSheet()
  var data = liste.getRange(2, 1, liste.getLastRow() - 1, 4).getValues()
  for (var i = 0; i < data.length; i++) {
    if (data[i][2] && data[i][3] != 'ok' && data[i][1] != '') {
      replacements(data[i][1])
      liste.getRange(i + 2, 3).setValue(false)
      liste.getRange(i + 2, 4).setValue('ok')
    }
  }
}
function replacements(id) {
  const ar = [
    { text: "A16051964", newText: 'B16051964' },
    { text: "A16051967", newText: 'B16051967' },
  ];
  const requests = ar.map(({ text, newText }) => ({ findReplace: { allSheets: true, find: text, replacement: newText, matchEntireCell: true, matchCase: true } }));
  Sheets.Spreadsheets.batchUpdate({ requests }, id);
}

Bonjour

Génial ça marche !

Merci beaucoup Steelson

Je suppose que:

  • si ce sont de nouveaux N° qui sont concernés, il suffit de remplacer aux lignes 49 et 50
  • le remplacement se fait "en dur" cad pas de risque de voir réapparaitre l'ancien numéro car pas de recours à une "conversion" dans le fichier concerné
image

Merci pour ce retour.

On pourrait aussi mettre une table de conversion, mais si c'est uniquement pour quelques fois, autant laisser les paramètres en "dur" dans le script. Sauf si tu en avais réellement besoin.

C'est parfait comme ça.

Merci encore Steelson

Bonne semaine

Rechercher des sujets similaires à "remplacement valeurs colonne feuilles calcul"