ALL Apps Scripts Google Sheets

GScript : un journal pour le suivi des modifications

Ecrit par Thierry

Besoin de connaître qui a modifié quelle cellule dans Google Sheets ? gilbert ROINEL vous a préparé un petit script qui vous permet dans un onglet « Journal » d’avoir tout le détail (cellule modifiée, date de modif, utilisateur  et modif réalisée).

Voici l’aperçu de cet onglet.

Voici le lien du script de Gilbert ROINEL que vous pouvez copier coller et installer dans votre feuille de calcul. Vous pouvez aussi dans le tableur récupéré le script. Attention à ne pas le modifier sur ce fichier.

Je vous invite à tester ce fichier et écrire dans la feuille 1 ou 3.

Le script :

function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var Sousmenu = [];
Sousmenu.push({name:  » effacer le journal « , functionName: « efface »});
Sousmenu.push({name:  » Test Utilisateur « , functionName: « utilisateurtest »});
ss.addMenu( » 🔔 Mon Menu 🔔 « , Sousmenu);

}
function efface(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var journal = ss.getSheetByName(« journal »);
var derligne = journal.getLastRow()-1;
var effcol =journal.deleteRows(1, derligne); //getRange(« a1:a »).clearContent();
}

//Script pour actualiser les données après une modif
function onEdit(e){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet =ss.getActiveSheet();
var nSh = sheet.getName();
if (nSh== »journal »){}else{
var journal = ss.getSheetByName(« journal »);
var derligne = journal.getLastRow()+1;
var jrange = journal.getRange(derligne,1);
// ajoute une ligne dans la feuille journal pour indiquer quand la feuille 1 a été modifiée et par qui.
var addr = sheet.getActiveCell().getA1Notation();
var Oldvalue =e.oldValue;
var myValue = e.value; //sheet.getActiveCell().getValue();
var userName
if (getUserEmail()== »gilbert@gmail.com »){ userName = getUserEmail()} //à modifier suivant le propriétaire
else{ userName = getUserEmail()}
if (userName == «  »){ userName = « inconnu »}
// var userName = Session.getActiveUser().getUsername();
userName=userName.split(« @ »,1);
//Browser.msgBox(Oldvalue)
if (Oldvalue == undefined){Oldvalue =  » cellule vide « }
jrange.setValue(‘La cellule ‘ + addr + ‘ de la feuille ‘ +nSh +’ a été modifiée le : ‘ + Utilities.formatDate(new Date(), « GMT+2 », « EEE dd/MM/YYYY à HH:mm:ss »)+ » par « + userName +  » elle est passée de  » + Oldvalue +  » à  » + myValue);
}
}

function utilisateurtest()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var user
if (getUserEmail()== »gilbert@gmail.com »){ user = ‘du propriétaire ‘}
else{ user = « de l’utilisateur »}
//SpreadsheetApp.getUi().alert(« Le courrier électronique  » + user +  » est :  » + getUserEmail());
var userName = getUserEmail();
userName = userName.split(« @ »,1)
ss.toast(« Le nom  » + user +  » est :  » + userName, »Test »);
}

function getUserEmail() {
var userEmail = PropertiesService.getUserProperties().getProperty(« userEmail »);
if(!userEmail) {
var protection = SpreadsheetApp.getActive().getRange(« A1 »).protect();
// truc: le propriétaire et l’utilisateur ne peuvent pas être visibles ensembles
protection.removeEditors(protection.getEditors());
var editors = protection.getEditors();
if(editors.length === 2) {
var owner = SpreadsheetApp.getActive().getOwner();
editors.splice(editors.indexOf(owner),1); // Supprimer le propriétaire, prendre l’utilisateur

}
userEmail = editors[0];
protection.remove();
// sauvegarde pour une meilleure performance
PropertiesService.getUserProperties().setProperty(« userEmail »,userEmail);

}
return userEmail;
}

 

A propos de l'auteur

Thierry

Thierry VANOFFE, consultant, formateur, coach G Suite.
Passionné et fasciné par Google, ce blog me permet de partager cette passion et distiller tutos, trucs, astuces, guides sur les outils Google.
N'hésitez pas à me solliciter pour vos formations en ligne ou en présentiel.

2 commentaires

  • Bonjour.
    Ce script est vraiment très sympa et optimise efficacement le suivi des modifications en collaboration.
    Je n’ai pas vraiment compris ce que fait la fonction ‘test utilisateur’ ?
    Dans le cas de multiples onglets, il pourrait être très intéressant que le script puisse cibler l’onglet ou les onglets pour lesquels le suivi des modifications est applicable. Peut-être une amélioration de +Gilbert ROINEL ?

  • Bonjour,

    Merci pour le partage.

    Pourriez vous expliquer comment l’intégrer , quelles sont les modif à faire sur le script.

    Pour info: lorsque je fait des modifs cela mets toujours le nom du propriétaire du document.

    Encore merci.

Laisser un commentaire