Macro dans gestion stock

Bonjour a tous,

j'essai de faire un outil simple de gestion des stocks mais les macro que j'ai fais sur sheets ne marchent pas, j'ai soit un message d'erreur soir un résultats erroné.

Ne comprenant pas pourquoi cela ne fonctionne pas, j'ai pris le même fichier avec excel et refais les macro et cela fonctionne très bien

le message d'erreur est le suivant

Exception: La première colonne de la plage est trop petite.

le déroulement macro est le suivant:

Pour faire une entrée de stock, la colonne "i" additionne le stock existant avec la nouvelle entrée en colonne "D".

je fais donc une copie de cette colonne en "J" pour garder uniquement les valeurs et non les formules de "i".

après cela je fais le même collage de valeurs de "J" dans la colonne "C" qui représente l'état des stock.

Je supprime ensuite les valeurs saisie dans les colonnes "D" et "J" et je fais un classement de la colonne "C" de Z à A.

Il y a p-etre plus simple mais c'est de cette façon que j'y suis arriver sur excel et je ne comprend pas pourquoi cela ne fonctionne pas sur google sheets.

si qqun peux éclairer ma lanterne sa serais super sympa

lien sheets

je met également le fichier excel qui marche

108stock.xlsx (22.96 Ko)

ps: est ce que quand cela fonctionnera il sera possible d'utiliser ces boutons macros sur un appareil mobile type smartphone ou tablette via l'app Sheets?

Bonjour,

Une copie de votre script de sheets serait utile pour vous aider...

Et oui, les macros fonctionnent sur mobile avec sheets. Cool non ?

A bientôt

Merci pour ta réponse

oui effectivement c'est cool c'est le but recherché, j'ai hate de pouvoir l'utiliser du coup

Voila le code de la macro, il y a un script pour le bouton vert et un pour le bouton rouge

merci d'avance pour ton aide

function stockin() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  sheet.getRange(1, spreadsheet.getCurrentCell().getColumn() + 6, sheet.getMaxRows(), 1).activate();
  sheet = spreadsheet.getActiveSheet();
  sheet.getRange(1, spreadsheet.getCurrentCell().getColumn() - 1, sheet.getMaxRows(), 1).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  sheet = spreadsheet.getActiveSheet();
  sheet.getRange(1, spreadsheet.getCurrentCell().getColumn() - 7, sheet.getMaxRows(), 1).activate();
  spreadsheet.getCurrentCell().offset(0, 7, 199, 1).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  sheet = spreadsheet.getActiveSheet();
  sheet.getRange(1, spreadsheet.getCurrentCell().getColumn() + 1, sheet.getMaxRows(), 1).activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  sheet = spreadsheet.getActiveSheet();
  sheet.getRange(1, spreadsheet.getCurrentCell().getColumn() - 1, sheet.getMaxRows(), 1).activate();
  spreadsheet.getActiveSheet().sort(spreadsheet.getActiveRange().getColumn(), false);
  sheet = spreadsheet.getActiveSheet();
  sheet.getRange(1, spreadsheet.getCurrentCell().getColumn() + 7, sheet.getMaxRows(), 1).activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};

function stockout() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  sheet.getRange(1, spreadsheet.getCurrentCell().getColumn() + 2, sheet.getMaxRows(), 1).activate();
  sheet = spreadsheet.getActiveSheet();
  sheet.getRange(1, spreadsheet.getCurrentCell().getColumn() - 1, sheet.getMaxRows(), 1).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  sheet = spreadsheet.getActiveSheet();
  sheet.getRange(1, spreadsheet.getCurrentCell().getColumn() - 9, sheet.getMaxRows(), 1).activate();
  spreadsheet.getCurrentCell().offset(0, 9, 199, 1).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  sheet = spreadsheet.getActiveSheet();
  sheet.getRange(1, spreadsheet.getCurrentCell().getColumn() + 1, sheet.getMaxRows(), 1).activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  sheet = spreadsheet.getActiveSheet();
  sheet.getRange(1, spreadsheet.getCurrentCell().getColumn() - 1, sheet.getMaxRows(), 1).activate();
  spreadsheet.getActiveSheet().sort(spreadsheet.getActiveRange().getColumn(), false);
  sheet = spreadsheet.getActiveSheet();
  sheet.getRange(1, spreadsheet.getCurrentCell().getColumn() + 9, sheet.getMaxRows(), 1).activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};

Bonjour piresrem,

Ton script ne fonctionnait pas car tu utlisais la fonction getCurrentCell qui varie en fonction de la cellule sélectionnée au moment présent.

Je te propose un tableau de ce style :

Colonne B / Colonne C / Colonne D

Dernier stock / Nouveau stock / Nouvelles entrées

1 / 2 / +1

Les cellules de la colonne C sont dotées d'une formule de somme classique qui additionne les données de B et de D.

Quand tu as de nouvelles entrées, tu actives une macro qui va :

  • transférer uniquement les valeurs de la colonne C vers la colonne B (en écrasant les données précédentes de la colonne B)
  • supprimer les données de la colonne D (puisque de nouvelles données doivent être apportées)

macro dont voici le code :

function EssaiStockin() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  sheet.getRange (2, 3, sheet.getMaxRows(), 1). copyTo (sheet.getRange (2, 2, sheet.getMaxRows(), 1), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  sheet.getRange (2, 4, sheet.getMaxRows(), 1).clear({contentsOnly: true, skipFilteredRows: true});
};

Attention : le script est basé sur des références de cellules absolues. A part le nombre de lignes qui peut changer librement, si tu changes les colonnes, il faudra modifier le script. Pour ce faire, je te conseille d'étudier sur internet la fonction getRange (X,X,X,X) car c'est elle que tu devras modifier manuellement.

Pour les sorties, reprendre le même principe.

Je pense que tu as tous les éléments... Bon courage

bonjour Porto77

Merci bcp pour ton aide sa fonctionne nickel

Par contre sa ne marche pas sur telephone et tablette

les boutons fonctionnent sur l'ordinateur mais sur le telephone et la tablette android via l appli sheets quand je clic sur le bouton sa le sélectionne mais sa n'active pas les macro

Sais-tu si il faut activer qqch pour que sa devienne compatible ?

merci d'avance

Bonjour piresrem,

Effectivement il semble que le déclenchement des macros par un bouton ne puisse pas se faire sur mobile.

Toutefois tu peux contourner le problème en utilisant une fonction onEdit et des cases à cocher, qui elles vont pouvoir être utilisées sur mobile. En gros tu remplace tes boutons par des cases à cocher...

Il faut dans ce cas instaurer une condition dans la fonction.

Je ne l'ai jamais fait mais il y a pas mal d'infos sur internet la dessus, par exemple :

À vérifier si le sujet n'a pas déjà été traité sur le forum. Sinon un nouveau sujet serait intéressant...

Bonne journée

Merci pour ta réponse,

je vais créer un nouveau sujet pour traiter cette question car je ne comprend pas du tout comment faire

j'ai créer les cases a cocher mais pour le reste je suis totalement perdu...

Rechercher des sujets similaires à "macro gestion stock"