@Xavier
je suis très content que la version 2 te plaise aussi.
-------------------------------------------------------------------------------------------------------------------
tu as écrit : « Comme tu as pu le voir au niveau de la feuille de calcul "Recettes",
il y en a d'autres avec plus d'ingrédients, est-ce que cela fonctionnera tout pareil ? ».
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1) je ne me suis pas du tout occupé de la feuille "Recettes", mais j'ai vu que :
a) sur "MO Savons", en G14, il y a : =INDIRECT($E$18) ; d'où : copie des
données de Recettes!A4:D8 en 'MO Savons'!G14.
b) sur "MO Cosmét.", en G12, il y a : =INDIRECT($E$14) ; d'où : copie des
données de Recettes!F4:i10 en 'MO Cosmét.'!G12.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2) la sub PCN() de Module2 regarde quel est le nom de la feuille active, puis
s'occupe de cette feuille seulement si c'est "MO Savons" ou "MO Cosmét.".
a) sur ces 2 feuilles, le tableau des ingrédients est en colonnes G à L, mais la sub
n'a pas besoin des données des colonnes i et J : elle s'occupe des données des
colonnes G:H et K:L : Ingrédients (juste pour vérifier si c'est ni une ligne TOTAL,
ni une ligne avec une cellule ingrédient vide) ; Réf. Int. (dont le 1er chiffre sert
pour trouver la bonne feuille d'ingrédient) ; Pesée réelle (en g) ; Lot/DLU.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
b) la 1ère ligne d'ingrédient est la ligne 14 sur "MO Savons", et la ligne 12 sur
"MO Cosmét." ; la sub contient le code nécessaire pour déterminer quelle est
la bonne 1ère ligne, selon le nom de la feuille "MO Savons" ou "MO Cosmét.".
c) la dernière ligne d'ingrédient est déterminée selon le dernier nombre noté
en colonne K "Pesée réelle (en g)" ; sur "MO Savons" : c'est la ligne 17 car
en K17, il y a le nombre 140 (d'où lignes 14 à 17) ; sur "MO Cosmét." : c'est
la ligne 17 car en K17, il y a le nombre 5 (d'où lignes 12 à 17).
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
d) de ce qui précède concernant les lignes, on peut comprendre que la sub PCN()
s'occupera de toutes les lignes d'ingrédients, quelque soit leur nombre ; donc oui,
s'il y a plus d'ingrédients (10, 100, ou plus), ça fonctionnera pareil. :)
attention toutefois : par rapport à la dernière ligne d'ingrédients qui contient un
nombre en colonne K, les lignes d'ingrédients situées dessous seront ignorées
si la cellule de la colonne K est vide (pas de pesée réelle) ; or n'oublie pas que
si une cellule est vide en colonne K (déjà vide ou suite à un appui sur la touche
Suppression), ça permet d'effacer 2 données précédentes en K:L (sur une des
feuilles d'ingrédients) ; alors ça sera possible de corriger seulement si la ligne
est au-dessus de la dernière ligne d'ingrédients qui contient une pesée réelle ?
non, car le remède est très simple : pour la dernière ligne d'ingrédients, si c'est une
ligne de correction : au lieu de mettre une cellule K vide (via Suppression), saisir 0 ;
ainsi, la dernière ligne détectée de la colonne K sera la dernière ligne pour laquelle
il y a le nombre 0 en colonne K.
supposons que tu ajoutes en fin de liste d'ingrédients 5 lignes de correction (pour
effacer K:L sur les feuilles d'ingrédients adéquates) : pour les 4 lignes 18 à 21,
ça peut être vide en colonne K ; mais pour la 5ème ligne, il faut 0 en K22.
les lignes d'ingrédients seront donc 14 à 22 (sur "MO Savons") ; ou 12 à 22 (sur
"MO Cosmet.").
dans le code VBA, ce qui détecte la dernière ligne utilisée selon la colonne K,
c'est : « b = Cells(m, "K").End(3).Row » ; ce qui permet d'effacer les cellules K:L
d'une feuille d'ingrédient si la cellule K d'une feuille MO est vide ou contient 0,
c'est : « If prg = 0 Then .Resize(, 2).ClearContents ».
-------------------------------------------------------------------------------------------------------------------
3) dans mes codes VBA, il y a déjà quelques commentaires (c'est écrit en vert) ;
tu avais écrit : « si tu pouvais détailler un peu plus les lignes VBA que tu écris,
cela me permettrait de comprendre ce que tu as fait et de pouvoir l'adapter
au besoin de nouvelles recettes. ».
commenter tout le code VBA serait très long à faire, et inutile pour les parties
de code VBA que tu comprends déjà bien ; alors dis-moi plutôt quelles sont les
instructions VBA que tu ne comprends pas, et je te donnerai des précisions
dessus ; d'autre part, n'hésite pas à voir l'aide VBA : place ton curseur de texte
au milieu d'un mot-clé que tu ne comprends pas et appuie sur la touche F1 :
ça affiche l'aide pour ce mot-clé (mais il faut être connecté à internet).
-------------------------------------------------------------------------------------------------------------------
4) tu avais écrit : « Comment cela se passera lorsqu'elle saisira une nouvelle recette :
les quantités devront être insérées dans les lignes dessous la 1ère ligne jusqu'à ce
que la quantité restante soit égale à 0 ? » : oui, mais comme tu l'avais écrit, c'est
mieux de mettre un seuil d'alerte : « Comment faire pour mettre un seuil d'alerte
sur chaque ingrédient ? ».
-------------------------------------------------------------------------------------------------------------------
5) tu avais écrit : « Sachant qu'elle peut avoir 2 numéros de lot dans une recette
si la quantité d'un ingrédient d'un lot n'est pas suffisante pour ladite recette » ;
là, il faudrait mieux préciser, en donnant un exemple concret et chiffré.
-------------------------------------------------------------------------------------------------------------------
6) tu avais écrit « archiver la recette saisie sous forme d'un document » : j'ai vu ton
document Word joint (avec plusieurs tableaux), mais là, désolé : ça ne me dit rien
de le faire, car ça serait à la fois trop long et compliqué (de plus, il faudrait utiliser
aussi le VBA Word, en plus du VBA Excel).
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
d'un autre côté, si c'est juste pour faire de l'archivage, on peut le faire simplement :
sauvegarder uniquement les données nécessaires, sans aucune mise en forme ;
car ensuite, c'est le code VBA de lecture de ces données qui se chargera de les
montrer avec une mise en forme enjolivée.
quand j'ai écrit ci-dessus « uniquement les données nécessaires », je veux dire :
les données qui ont été saisies par l'utilisateur ; toutes les données calculées :
inutile de les sauvegarder, car là encore, c'est le code VBA de lecture qui se
chargera de faire tous les calculs voulus.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ainsi le code VBA de lecture se charge à la fois : de la lecture, des calculs,
et de la présentation ; là, je parle d'Excel uniquement, sans utiliser Word.
même en utilisant seulement Excel, la sauvegarde des données peut se
faire très facilement dans un simple fichier texte, extension « .txt ».
-------------------------------------------------------------------------------------------------------------------
7) tu avais écrit : « Il faudrait aussi qu'elle puisse assurer la gestion de ses stocks de
matières premières (= Ingrédients). Comment faire pour mettre un seuil d'alerte sur
chaque ingrédient et que ce stock soit visible sur une sorte de tableau de bord ? »
désolé, ça devient trop compliqué ; ça reviendrait à faire toute une application de
gestion de stocks ! alors non merci. ;)
sur un forum Excel (celui-ci ou un autre), on aide pour des choses ponctuelles, pas
pour créer une application entière ! pour ça, soit tu achètes un logiciel tout fait, soit
tu demandes à une société de services informatiques de créer une application
entière (en lui fournissant bien sûr un cahier des charges qui indique tous les
besoins et caractéristiques) ; d'autre part :
pour faire une gestion de stocks pas trop compliquée, ça serait plus avec un logiciel
de base de données (comme par exemple Microsoft Access) plutôt qu'avec Excel.
-------------------------------------------------------------------------------------------------------------------
ce que j'ai écrit en 6) et 7) ne veut pas dire que je ne veux plus t'aider : si c'est
pas trop compliqué et dans mes compétences, je le ferai avec plaisir. :)
-------------------------------------------------------------------------------------------------------------------
y'a pas d'fichier Excel joint dans ce post ; c'est normal : ce n'est pas un oubli.
à plus tard pour la suite. :)
rhodo