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 .

Notez cette information
[Total: 0 Average: 0]
Thierry

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.

14 comments

  1. 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 ?

  2. 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.

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

    Merci

    1. 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. 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. 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. Désolé, mais je n’arrive pas.
            Pouvez-vous m’écrire le script en entier ?

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

  4. 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. Yes il faudrait que je remette le code dans un doc pour que ça soit plus propre que dans WordPress…

      1. 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,

  5. 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

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.

Share This

Rapport de faute d’orthographe

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