GScript : un journal pour le suivi des modifications

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;
}

 

Si vous avez trouvé une faute d’orthographe, veuillez nous en informer en sélectionnant le texte en question et en appuyant sur Ctrl + Entrée .

Thierry

Thierry

Thierry VANOFFE, consultant, formateur, coach G Suite. CEO de Numericoach, leader de la formation G Suite en France. Passionné 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 projets de formation.

15 commentaires

  1. Avatar

    Bonjour,
    comment faire fonctionner ce code ? Comment ce code se traduit-il dans le classeur sheet ? Y a t’il une feuille qui se créé avec l’ensemble des modification au fur et à mesure ?

    Je teste depuis 3h et je n’arrive pas à le faire fonctionner …

    Merci

  2. Avatar

    Bonjour
    J’ai copié le code et ajouté d’autres lignes (pour une autre fonction d’envoie par mail ciblé la modification de cellule), mais j’ai 2 « bugs »: Le texte s’écrit 2 fois et a chaque fois c’est le nom du propriétaire qui s’inscrit..
    Des idées? Merci
    PS: fil actif sur la communauté également
    Patrice

    1. Thierry

      Yes il faudrait que je remette le code dans un doc pour que ça soit plus propre que dans WordPress…

      1. Avatar

        Bonjour,

        Merci beaucoup pour ce script très intéressant mais j’ai sensiblement le même problème, à savoir que c’est toujours le nom du propriétaire qui s’affiche alors que le fichier est partagé avec modifications avec 3 collaborateurs.

        Merci de me donner une piste.

        Cordialement,

        1. Avatar

          J’ai le même problème… Quelque soit l’utilisateur, c’est toujours le propriétaire qui est noté.
          Est il possible d’avoir le nom de l’utilisateur au lieu de celui du propriétaire ?

  3. Avatar

    Est-il possible de suivre seulement quelques cellules (exemple de A16 à U215) de toutes les feuilles.

    Merci

    1. Avatar

      Bonjour,

      oui c’est faisable, il suffit d’ajouter ces conditions dans le programme
      comme var addr = sheet.getActiveCell().getA1Notation();
      si addr = « A16 » ou si addr = « u215 » alors j’execute sinon je ne fais rien

      1. Avatar

        Bonjour,

        Je me bas depuis ce midi mais cela ne marche pas où dois-je mettre la formule ?
        (je veux suivre seulement les cellules de A16 à U215, le reste, je ne veux pas de suivi)

        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

        1. Avatar

          a la suite de var addr…………
          mettre cette condition
          if ((addr === »A16″)||(addr=== »U215″)){ici mettre le code dans le cas ou c’est juste et entre les accolades sinon ERREUR }

          tout simple non ;-)))))

          1. Avatar

            Désolé, mais je n’arrive pas.
            Pouvez-vous m’écrire le script en entier ?

          2. Thierry

            Sebastien, je vais remettre tous les scripts au propre cet été sur ce blog.

  4. Avatar

    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.

  5. Avatar

    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 ?

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Rapport de faute d’orthographe

Le texte suivant sera envoyé à nos rédacteurs :