Gestions données clients (macro et mise à jour en fonction de la date)

Bonjour,

Après beaucoup de recherches sans résultats je poste pour la 1ère fois une question donc j'espère réussir à bien expliquer.

Je créer pour une société une base de données qui va s'incrémenter via un google form.

Ensuite il y la partie fiche client qui la sera modifié par une personne afin d'ajouter ou modifier des données comme le statut, le type d'abonnement...

Mon souhait est de copier ces données dans l'onglet "suivi modif fiche client" afin de garder une trace des modifications peut-être avec une macro ?? (Je n'en ai jamais fait) si jamais quelqu'un a une piste

Une fois ces données copiés j'ai besoin que l'onglet "Homme admin" se mette à jour avec les données les plus récentes. Pour l'instant j'utilise un Index-Equiv pour me ramener les infos mais cela ne prend pas en compte les mises à jour.

Le lien du fichier simplifié : https://docs.google.com/spreadsheets/d/1m7B0T8p4r81Md_RvjN16ckZazzuMQM2hdR9m67PyUjo/edit?usp=sharing

J'ai regardé beaucoup d'article mais je ne vois rien qui corresponde.

Merci d'avance à tous

Bonjour,

Mon souhait est de copier ces données dans l'onglet "suivi modif fiche client" afin de garder une trace des modifications peut-être avec une macro ?? (Je n'en ai jamais fait) si jamais quelqu'un a une piste

  • est-ce que tu veux que ceci se fasse automatiquement ? ou par une action volontaire ? est-ce que tu veux une trace de toutes les évolutions ?
  • en automatique c'est possible bien que cela risque de ralentir un peu (car les scripts sont pris en change côté serveur), et pour que cela se fasse quelque soit la zone sans multiplier les lignes, il faudrait convenir que toutes modifications dans un intervalle de temps (par exemple 5mn) sont jumelées
  • comment se fait l'affichage des données dans la fiche client ?

Une fois ces données copiés j'ai besoin que l'onglet "Homme admin" se mette à jour avec les données les plus récentes. Pour l'instant j'utilise un Index-Equiv pour me ramener les infos mais cela ne prend pas en compte les mises à jour.

pourquoi pas ... une solution simple est alors de trier par date décroissante l'onglet

Une proposition assez complète :

function onEdit(event){
  var feuille = event.source.getActiveSheet();
  var cellule = event.source.getActiveRange();
  // paramètres regroupant les dates et n° de ligne relatives au choix effectué
  var param = SpreadsheetApp.getActiveSpreadsheet().getRange('param').getValues()

  // on réactualise les données si le choix dans le menu déroulant a changé
  if (feuille.getName()=='Fiche Client' && cellule.getA1Notation()=='B1'){
    var admin = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Homme Admin')
    var ligne = param[1][1]
    feuille.getRange('B3:B8').setValues(transpose(admin.getRange('E'+ligne+':J'+ligne).getValues()))
  }

  // on traite ici les changement des données
  if (feuille.getName()=='Fiche Client' && cellule.getColumn()==2 && cellule.getRow()>=3 && cellule.getRow()<=8){
    var admin = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Homme Admin')
    var ligne = param[1][1]
    admin.getRange('E'+ligne+':J'+ligne).setValues(transpose(feuille.getRange('B3:B8').getValues()))

    var histo = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Suivi modif fiche client')
    // pas de modif enregistrée
    if (param[3][0]==0){
      histo.insertRowBefore(2)
      var ligne = 2
    }
    // s'il existe au moins une modif enregistrée
    else {
      var delai = ((new Date()) - param[3][1])/1000/60 // minutes
      // il existe une modif datant de plus de 5 mn
      if (delai>5){
        histo.insertRowBefore(2)
        var ligne = 2
      }
      // sinon on cumule les modifications sur la même ligne
      else{
        var ligne = param[3][0]
      }
    }
    histo.getRange('A'+ligne).setValue(new Date())
    histo.getRange('B'+ligne).setValue(feuille.getRange('B1').getValue())
    histo.getRange('C'+ligne+':H'+ligne).setValues(transpose(feuille.getRange('B3:B8').getValues()))
  }
}
function transpose(a){
  return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}

elle s'appuie notamment sur des données en fin de feuille Fiche Client que j'ai ajoutées.

https://docs.google.com/spreadsheets/d/102OQZgEVVldX9EKZjzTD-ZaXbAPJ8mb6L91u1tluYOc/copy

Bonjour,

Je te remercie pour ta réponse.

J'ai mis du temps a te répondre car vu mon niveau de connaissance en macro proche de 0 je ne comprends pas bien comment l'adapter sur mon fichier. J'essaye depuis un moment et je vais persévérer car je pense que c'est la bonne solution.

Merci beaucoup pour ta réactivité

A ta disposition si besoin, en mp si nécessaire.

Bonjour,

J'ai réussi a appliquer la macro pour la gestion des données (merci encore !!) je me retrouve avec un nouveau problème.

Je souhaite qu'avant de modifier les données clients, les données déjà enregistrées apparaissent. Je me sers d'une formule INDEX(Equiv) pour les récupérer mais cela ne prend en compte que la 1ère ligne trouvée et donc pas les données les plus récentes. Je ne vois pas comment ajouter une recherche en fonction de la date.

Je met un exemple en pièce jointe :

Les onglets sont :

- Fiche client pour les modifications de données

- Suivi administration fiche client ou la macro viens stocker les données

- Suivi client ou je souhaite conserver les dernières données (les plus à jour)

https://docs.google.com/spreadsheets/d/1m7B0T8p4r81Md_RvjN16ckZazzuMQM2hdR9m67PyUjo/edit?usp=sharing

Merci d'avance

Bonjour,

en E4, tu mets

=query('Suivi administration fiche client'!A2:H;"select * where B='"&D4&"' order by A DESC limit 1 ";0)

ce qui remplace les formules en E, F, G, H, I et J

Super merci !

Encore une petite question : j'ai des cases vides si les infos ne sont pas mise à jour. Comment récupérer les données entrées précédemment ?

Le but est d'avoir toute les infos du client à jour à tout moment.

En E4,

=query({'Suivi administration fiche client'!$A$2:$B\'Suivi administration fiche client'!C$2:C};"select Col3 where Col3 is not null and Col2='"&$D4&"' order by Col1 DESC limit 1 ";0)

mais cette fois-ci c'est à tirer à droite, puis recopier en haut et en bas pour les vrais clients

vérifie l'ordre aussi des en-têtes, qu'elles soient les mêmes entre les onglets

Je te remercie vraiment je suis super contente j'ai réussi a adapter ta formule a mon fichier !!

merci pour ton temps et ta réactivité !!

Je me pensais plutôt douée en formule mais je vois que j'ai encore à apprendre lol !

Rechercher des sujets similaires à "gestions donnees clients macro mise jour fonction date"