Fonction & BDD : Comment geler/figer une formule ?

Bonjour,

Actuellement j'utilise une base de données produits pour remplir des devis (menu déroulant) et la tarification s'applique via une fonction RECHERCHEV (qui compare la désignation à une tarification).
Ma facturation se complète par le devis édité (fonction Duplication ex: Devis!A1).

Mon problème est le suivant : Ma base de données est en perpétuelle évolution, modification de mes lignes produits et tarification, le devis envoyé à l'instant T peut ne plus être en adéquation au moment de la facturation ou de la réédition d'un devis.

Je recherche un moyen de "figer/casser le lien" de ma fiche DEVIS une fois édité et envoyé au client, ceci me permettra donc de ne plus avoir des erreurs de type "Non valide :la valeur d'entrée doit être comprise dans la plage spécifiée" et des erreurs "N/A" sur ma tarification.

Merci pour votre lecture
ScoubX

Ok, je fais suite à ma demande, je viens de trouver sur ce site une solution que j'aimerai personnaliser.

voici le lien : https://www.sheets-pratique.com/fr/codes/figer-valeurs

Merci pour ce travail réalisé au passage, cependant la fonction génère une erreur lorsqu'une image rentre dans le champs d'action de la macro.
"Exception: Erreur liée à un service : Feuilles de calcul",
peut-on contourner cette erreur sans avoir à sélectionner chaque partie du tableau (en admettant qu'une image se trouve au centre par exemple). Dans l'idéal j'aimerai sélectionner la cellule dans le coin à gauche ("sélectionner tout mon tableur") puis figer l'ensemble après avoir édité mon devis.

Une modification de la macro ? Insérer une case à cocher qui chargera la macro sur une plage nommée ? Modifier la macro pour qu'elle fige d'un simple clic mes cellules (B9:J40) ?

Merci pour votre aide.
ScoubX

Bonjour,

voici un script de @Gibert qui fonctionne dans les 2 sens grâce au "MON MENU" créé.

tu cliques sur la cellule à figer, puis sur "MON MENU" et tu figes ou non.

figer cellule
function onOpen() {
  SpreadsheetApp.getUi().createMenu('🌟 Mon Menu 🌟')
    .addItem('👉 Figer la cellule', 'figer')
    .addSeparator()
    .addItem('👉 MàJ de la cellule', 'Maj')
    .addToUi();
}

function figer() {
  let r = SpreadsheetApp.getActiveSheet().getActiveRange();
  r.setValues(r.getValues());
}

function Maj() {
  let r = SpreadsheetApp.getActiveSheet().getActiveRange();
  r.setFormula('=today()');
}

Cdt

Alex

Encore mieux merci beaucoup Alex, ton information est top! Cela donnera plus de maniabilité à la gestion des devis.

Et si je souhaitais définir une zone bien précise, serait-ce compliqué de modifié la macro ? L'idée est que chaque fois que qq'un bosse sur un devis, il n'à qu'à cliquer sur le bouton (de la macro) pour qu'automatiquement cela fixe les données de la zone (B9:J40) par exemple.

Merci.
ScoubX

L'idée est que chaque fois que qq'un bosse sur un devis, il n'à qu'à cliquer sur le bouton (de la macro) pour qu'automatiquement cela fixe les données de la zone (B9:J40) par exemple.

J'y connais pas grand chose en script mais si tu sélectionnes la plage B9 à J40 puis "MON MENU" puis "Figer la cellule" ça fonctionne, enfin pour moi.

Et esthétiquement tu peux modifier :

.addItem('👉 Figer la cellule', 'figer')

Par :

.addItem('👉 Fige cellule', 'figer')

Idem pour MàJ

Ok, oui bien sûr manuellement cela fonctionne sans problème pour "FIGER" par contre la "MAJ" ne fonctionne pas du tout il me remplace toutes mes formules par une fonction "=AUJOURD'HUI" , mais ce n'est pas très grave dans mon cas.

Sinon je suis dans le même cas que toi, je n'ai pas de connaissance pour modifier des scripts en JavaScript, je vais devoir m'y coller 1 de ces 4...

Je laisse le post "ouvert" quelques jours ou cas ou si qq'un me trouve la solution.

Merci à toi.

A oui en effet, je n'ai jamais utilisé MàJ mais ça doit être dû à cette ligne

r.setFormula('=today()'

Bon voila j'ai trouvé, en reprenant le code de base :
il faut modifier la fonction Java :

.getActiveRange(); "ca indique la sélection de la zone en cours/active"

par

.getRange('B9:J40'); "ca indique une zone définie"

.getRange('B9:J40')
function onOpen() {
  SpreadsheetApp.getUi().createMenu('🌟 Mon Menu 🌟')
    .addItem('👉 Figer la cellule', 'figer')
    .addSeparator()
    .addItem('👉 MàJ de la cellule', 'Maj')
    .addToUi();
}

function figer() {
  let r = SpreadsheetApp.getActiveSheet().getRange('B9:J40');
  r.setValues(r.getValues());
}

function Maj() {
  let r = SpreadsheetApp.getActiveSheet().getActiveRange();
  r.setFormula('=today()');
}

Merci encore pour ton aide Alex.

Bravo à toi et merci pour ton mini apprentissage.

N'oublie pas de clore le sujet.

Rechercher des sujets similaires à "fonction bdd comment geler figer formule"