Saisies multiples

0

Bonjour,

J'ai besoin de vous tous pour l'application de gestion de la savonnerie de ma compagne.

Je souhaiterais pouvoir insérer dans la colonne "Quantité Utilisée (en g)" située dans les différentes feuilles de calcul entre 'Saisie Ingrédients' et 'Recettes', le chiffre saisi dans la "Pesée réelle (en g)", situé dans la feuille de calcul saisie dans la feuille MO Savons ou MO Cosmét., en fonction de l'ingrédient concerné.

Par exemple, si je saisis, comme dans le fichier joint, 805 dans la 'Pesée réelle', il faut que cette valeur apparaisse dans la colonne 'Quantité Utilisée' de la feuille de calcul 'Macérats'. De plus, il faut que le 'Code interne' et le 'Numéro de lot' (de la feuille de calcul 'MO Savons') soient concaténés dans la colonne 'Recette' de cette feuille de calcul 'Macérats'.

Je souhaiterais que les valeurs s'intègrent dans chaque feuille de calcul d'ingrédients grâce à la 'Référence Interne' = 'Réf. Int.' et au 'N° de Lot'='Lot/DLU'.

J'espère avoir été assez clair.

Merci pour votre aide précieuse.

Cordialement

Xavier

https://www.cjoint.com/c/OClruFs6QQh
    Xav33820 Posté le 11 mars, 18:21
    par Xav33820
    Répondre
    0

    Bonjour Xavier,

    ton fichier en retour : https://www.cjoint.com/c/OCmcLYaNYo0

    à l'ouverture du fichier, tu es sur la feuille "MO Savons" ; note que j'ai supprimé
    tes 4 données de K14:K17 ; c'est pour faciliter la démo qui va suivre.  :)

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    1) Saisie d'une pesée en colonne K

    * la cellule active est K14 ; tape 805 et appuie sur la touche Entrée ; va sur
    la feuille "Macérats" ; vérifie K4:L4.

    * va sur "MO Savons", en K15 ; saisis 205 ; vérifie sur "Huiles et BV".
    * va sur "MO Savons", en K16 ; saisis 295 ; vérifie sur "Additifs".
    * va sur "MO Savons", en K17 ; saisis 140 ; vérifie sur "Poudres Synthé.".

    2) Modification d'une pesée en colonne K

    va sur "MO Savons", en K16 ; tu avais saisis 295, mais en fait c'était une erreur,
    car la pesée réelle est 291 ; saisis 291 ou corrige juste le dernier chiffre ; vérifie
    sur "Additifs" qu'il y a bien 291 (au lieu du précédent 295).

    3) Suppression d'une pesée en colonne K

    va sur "MO Savons", en K17 ; tu avais saisis 140, mais c'était une donnée à
    saisir plus tard, par exemple fin mars ; appuie sur la touche Suppression ➯
    K17 est vide (normal) ; sur "Poudres Synthé.", vérifie que K4:L4 sont vides.

    ça sert aussi pour corriger une erreur de saisie : nombre entré alors qu'il ne
    fallait pas le saisir, ou nombre entré dans une cellule au lieu d'une autre.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    pour tout ce qu'on vient de voir sur "MO Savons", c'est pareil sur "MO Cosmét." ;
    seule différence : la 1ère ligne de données du tableau de droite est 12 au lieu
    de 14 ; à part ça : mode d'emploi identique.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    attention : pour le code VBA, les 7 feuilles "Macérats" à "Ajouts" doivent être
    TOUJOURS les feuilles n° 2 à 8 du classeur ; donc si on insère une feuille
    entre "Saisie Ingrédients" et "Macérats", il faudra adapter le code VBA ; idem
    si on ajoute une feuille à gauche de "Saisie Ingrédients".

    avec le classeur actuel (feuilles d'ingrédients n° 2 à 8) : si un jour il faudra ajouter
    une nouvelle feuille d'ingrédient, ça sera la feuille n° 9 du classeur ; il faudra donc
    adapter le code VBA ; pas seulement selon l'ajout d'une feuille, mais aussi : le 1er
    chiffre des codes de références internes pour cette feuille n° 9 devra être 7.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    attention : le code VBA est en 3 parties ; la macro PCN() de Module2 est appelée
    par la sub Worksheet_Change() du module de la feuille "MO Savons" ET par la
    sub Worksheet_Change() du module de la feuille "MO Cosmét.".

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    quand tu auras tout vu, petit bonus : va sur la feuille "Saisie Ingrédients", fais des
    tests (dont l'absence d'une donnée obligatoire en D3:D11) ; puis regarde toutes
    les modifications de Module1.  ;)

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    si besoin, tu peux demander une adaptation ;
    à te lire pour avoir ton avis.  :)

    rhodo

    rhodo Posté le 12 mars, 03:39
    par rhodo
    0

    Bonjour Rhodo,

    C'est parfaitement ce que je souhaitais.

    Je teste et reviens vers toi pour te dire.

    En tout cas, merci pour ce travail et pour tes explications.

    @ très vite

    Xavier

    Xav33820 Posté le 13 mars, 10:48
    par Xav33820
    0

    Bonsoir Rhodo,

    Je te remercie infiniment pour le travail effectué, c'est exactement ce que je voulais.

    Puis-je continuer à te solliciter pour la gestion de la savonnerie de ma compagne ?

    Je voudrais savoir si il est possible de valider l'ensemble du MO avec un bouton "Enregistrer" tout comme c'est le cas dans Saisie Ingrédients ?

    Également, est-ce possible que la "Quantité Restante" (en g) soit automatiquement renseignée sur la ligne concernée de chaque ingrédient (= Quantité Reçue - Quantité Utilisée) ?

    Comment cela se passera-t-il 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? 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

    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 ?

    Et enfin, comment faire pour archiver la recette saisie sous forme d'un document tel que joint en PJ ?

    https://www.cjoint.com/c/OCor0nbYwXh

    Je me rends compte que je demande énormément mais je suis totalement débutant dans cet exercice, je ne suis qu'un simple infirmier qui veut aider sa compagne artisan. A ce sujet, 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.

    Je te remercie infiniment pour tout ce que tu as fait et que tu pourras faire pour cette gestion de savonnerie artisanale.

    Bien chaleureusement

    Xavier

    Xav33820 Posté le 14 mars, 19:18
    par Xav33820
    0

    Bonjour Xavier,

    je suis bien content que la 1ère version de mon fichier t'a bien plu.  :)

    tu as demandé beaucoup de choses en même temps !  :(  j'ai fait ce qu'il faut
    pour tout ce qui est AVANT ton 5ème paragraphe (celui qui commence par :
    « Comment cela se passera-t-il lorsqu'elle saisira une nouvelle recette… »)
    .

    nouveau fichier, version v2https://www.cjoint.com/c/OCqdpoKCYY0

    ------------------------------------------------------------------------------------------------------------

    à l'ouverture du fichier, tu es sur la feuille "MO Savons" ; note qu'en K14:K17,
    j'ai remis tes 4 données initiales ; c'est pour faciliter la démo qui va suivre.  :)

    ------------------------------------------------------------------------------------------------------------

    fais Ctrl e ; lis le contenu de la boîte de dialogue (titre et message) ; sans avoir
    besoin de fermer la boîte de dialogue, note qu'en arrière-plan, tu peux voir en
    M14:M17 que chacune des 4 lignes d'ingrédients est cochée : ça signifie que
    chaque ingrédient a été écrit, comme indiqué dans le message.

    ferme la boîte de dialogue, et va vérifier sur chaque feuille d'ingrédients.

    pour ce qui va suivre ci-dessous, note bien que sur la feuille "Additifs",
    en K4:M4, il y a : 295 ; TO23 ; 9 705 ; retourne sur "MO Savons".

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    sélectionne K16 ; saisis 291 ou change juste le dernier chiffre en 1 ; Ctrl e ;
    même message ; sur "Additifs", en K4 : 291 au lieu du précédent 295 ;
    d'où en M4 : 9 709 au lieu du précédent 9 705 ; va sur "MO Savons".

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    en K16, appuie sur la touche Suppression ➯ 291 est effacé (normal)
    la cellule K16 est vide (normal) ; fais Ctrl e ; même message ; c'est
    correct car c'est dans le sens : l'ingrédient a été pris en compte ; il y a
    eu une écriture pour cet ingrédient ; regarde les modifs sur "Additifs" :

    les données précédentes de K4:L4 ont été effacées : y'a plus ni 291,
    ni TO23 ; bien sûr, en M4 : 10 000, comme en G4 : quantité du stock
    inchangée vu qu'aucune quantité n'a été utilisée.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    sur "MO Savons" : en K16, remet 295 ; en L16, mets (par exemple) :
    Test383 (on suppose que l'utilisateur a fait une erreur de saisie :
    Test383 au lieu de Test333)
    ; fais Ctrl e ; cette fois, le message est
    différent ; en arrière-plan, note qu'il n'y a pas de coche en M16.

    note bien que si on n'avait pas fait l'étape précédente d'effacer K16,
    alors sur "Additifs", il serait resté en K4:M4 : 291 ; TO23 ; 9 709 ;
    mais impossible d'y remédier vu que le n° de lot a changé : on ne
    peut pas savoir que le lot précédent était Test333 ; donc on ne
    peut pas aller sur "Additifs" pour corriger automatiquement ➯
    ce sera à  l'utilisateur d'être très prudent, et si besoin d'aller sur
    "Additifs" pour corriger manuellement.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    va sur la feuille "MO Cosmét." ; fais Ctrl e ; lis le contenu de la boîte
    de dialogue (nouveau titre et nouveau message) ; en arrière-plan,
    note qu'il n'y a aucune coche en M12:M17.

    bien sûr, tu comprendras facilement pourquoi aucun des ingrédients
    n'a pu être enregistré.  ;)

    ------------------------------------------------------------------------------------------------------------

    à propos du code VBA : j'ai commencé par supprimer tout le code VBA qui
    était dans le module de la feuille "MO Savons", ainsi que tout le code VBA
    qui était dans le module de la feuille "MO Cosmet." ; puis j'ai beaucoup
    changé le code VBA de la sub PCN().

    le code VBA est donc maintenant dans une seule partie, ce n'est plus
    en 3 parties.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    à propos de la 1ère sub EnregistrementDonnées() : aucune modif.

    ------------------------------------------------------------------------------------------------------------

    à te lire pour avoir ton avis.  :)

    rhodo

    rhodo Posté le 16 mars, 04:16
    par rhodo
    0

    Bonjour Rhodo,

    C'est super, tu es génial.

    Oui, je sais que j'ai demandé beaucoup de choses en même temps, j'ai tout écrit ce dont j'avais besoin, je m'en excuse.

    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 ?

    Merci pour ce travail, j'étudie ce que tu as fait et je reviens vers toi dans les plus brefs délais mais ce que j'ai vu me convient parfaitement pour le moment.

    @ très vite et encore merci

    Xavier

    Xav33820 Posté le 16 mars, 11:54
    par Xav33820
    0

    @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

    rhodo Posté le 16 mars, 15:42
    par rhodo
    0

    Bonjour Rhodo,

    Je me doute que c'est très fastidieux ce que je demande et je ne t'oblige en rien du tout, c'est très gentil de ta part tout ce que tu as fait et expliqué...

    Concernant tes points 1 et 2, j'ai vu avec ma compagne, il semblerait que le nombre maximum d'ingrédients dans une recette soit de 9, donc cela fonctionnerait très bien avec le code que tu as fait, si j'ai bien compris. Ou sinon, peut-on modifier MO Savons pour que les lignes d'ingrédients soient de 12 à 22 comme pour MO Cosmét. ?

    Concernant ton point 3, effectivement je ne savais pas que je pouvais avoir ce genre d'explications via la touche F1, je vais m'en servir plus.

    Concernant ton point 4, qui est repris dans ton point 7, je comprends tout à fait la complexité de la chose et j'entends très bien que ça ne sera pas possible pour faire de la gestion de stock, il faudra que je fasse autrement... Mais si on peut faire un système de seuil d'alerte à moindre "codage", je suis preneur ;-)

    Pour le point 5, elle a eu le cas dans la semaine passée, elle a dû prendre 2 lots différents d'un même produit pour faire une recette car elle n'avait pas assez avec le 1er lot : par exemple, dans la recette TO23, que tu utilises, pour le coco (en ligne 15), elle pourrait utiliser 150g du lot Test222 et 55g du lot Test223.

    Pour le point 6, je donnais l'exemple du document Word qu'elle utilisait, mais si ça peut être fait avec Excel et du VBA, il n'y a aucun souci. Pour elle, il faut qu'elle puisse archiver toutes les recettes faites et pouvoir les retrouver à l'occasion d'un contrôle.

    Encore merci pour tout et à bientôt de te lire.

    Sincèremenbt

    Xavier

    Xav33820 Posté le 16 mars, 18:34
    par Xav33820
    0

    Bonjour Xavier,

    tu as écrit : « peut-on modifier MO Savons pour que les lignes d'ingrédients soient
    de 12 à 22 comme pour MO Cosmét. ? » ; plus exactement, c'est : « à partir de la
    ligne 12 » ➯ 1ère ligne d'ingrédient = ligne n° 12 ; c'est mieux de faire ainsi, car
    c'est plus « homogène », et ça a permis de simplifier la macro : il n'y a plus de
    variable a, mais j'ai quand même laissé inchangé le nom de la variable b ; ça
    permettra de se rappeler que c'est de la ligne 12 à la ligne b.

    pour la dernière ligne d'ingrédient, ça ne peut pas être un nombre fixe comme par
    exemple 22 puisque le nombre de lignes est variable ; justement, à ce propos :

    dans ma version précédente v2, la dernière ligne est « calculée » selon la colonne K :
    « b = Cells(m, "K").End(3).Row » ; mais quand j'avais fait ça, c'était AVANT de décider
    qu'une pesée réelle vide permettrait d'effacer les cellules K:L d'une feuille d'ingrédient
    (pour correction éventuelle en cas d'erreur de saisie) ; or à cause de ça, ça a entraîné
    le schmilblick décrit dans mon post du 16 mars à 15:42, point 2) d), à partir du texte
    « attention toutefois » ; je parle ici d'une ligne d'ingrédient non prise en compte si la
    pesée réelle est vide, selon sa position par rapport à la dernière ligne d'ingrédient qui
    contient une pesée réelle non vide.

    pour éviter tout ce schmilblick, j'ai changé la colonne de détection : c'est maintenant
    selon la colonne L : « b = Cells(m, "L").End(3).Row » ; note bien que si une ligne
    d'ingrédient dont le lot est vide n'est pas prise en compte, ça ne gêne en rien vu qu'un
    lot correct est obligatoire pour pouvoir faire une affectation sur une des feuilles
    d'ingrédient ; juste pour info : si j'ai évité d'utiliser une des colonnes G à J pour faire
    la détection de la dernière ligne d'ingrédient, c'est pour éviter que ça « butte » contre
    une des données de la ligne TOTAL ; tu pourras dire : « oui, mais dans ce cas, il suffit
    de faire le n° de la ligne TOTAL - 1 et on a le n° de la dernière ligne d'ingrédient. » ;
    exact, c'est très juste ; sauf que c'est une sécurité au cas où tu oublierais de mettre
    une ligne TOTAL.  ;)

    grâce à ce changement qui évite le schmilblick, tu peux oublier de devoir mettre 0
    au lieu d'une cellule vide pour une pesée réelle afin d'effacer K:L sur une feuille
    d'ingrédient (selon sa position).

    comme avant, tu peux mettre autant de lignes d'ingrédient que tu veux : le code
    VBA de la macro les lira toutes (9, 20, 50, ou plus).

    j'ai aussi ajouté ce test de sécurité : « ne rien faire si le lot est vide » ➯ selon le
    contexte de la macro, c'est devenu : « faire la suite seulement si le lot n'est pas
    vide »
    : « If ltd <> "" Then .. End If » ; juste pour info : même dans la version v2
    où il n'y a pas ce test de sécurité, y'a aucun inconvénient si le lot d'une ligne
    d'ingrédient est vide (ni plantage, ni autre) ; c'est grâce à la concaténation du
    code de référence interne et de lot/DLU pour chercher la bonne ligne.

    version v3https://www.cjoint.com/c/OCraXB3nsU0

    rhodo

    rhodo Posté le 17 mars, 02:03
    par rhodo
    0

    Bonsoir Rhodo,

    Désolé, je n'ai pas pris le temps de te répondre depuis ton dernier message.

    La version 3 me convient parfaitement.

    Penses-tu pouvoir réussir à me faire quelque chose pour la partie archivage des recettes ou ce serait abusé de ma part ?

    En tout cas, je tiens à te remercier infiniment d'avoir passé autant de temps sur mon projet. Ma compagne t'est également reconnaissante.

    @ boentôt

    Xavier

    Xav33820 Posté le 19 mars, 18:51
    par Xav33820
    0

    Bonjour Xavier,

    pour la partie archivage, je n'ai rien fait du tout ; c'est normal, car ça sera à faire en dernier,
    après tout le reste ; sinon, ça serait comme de « mettre la charrue avant les bœufs » ! et y'a
    plein de choses à faire avant ! tellement que je ne cherche même pas à en mettre la liste
    dans ce post ! on verra tout au fur et à mesure, progressivement, dans plusieurs posts,
    et sur plusieurs jours ; commençons déjà par ce qui suit ci-dessous.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    tout à la fin de mon 1er post du 12 mars à 03:39, j'avais écrit ceci : « quand tu auras tout vu,
    petit bonus : va sur la feuille "Saisie Ingrédients", fais des tests (dont l'absence d'une donnée
    obligatoire en D3:D11)
     ; puis regarde toutes les modifications de Module1.  ;) »

    effectivement, j'avais fait plusieurs modifs dans ta sub EnregistrementDonnées(), et je pense
    que ces modifs t'ont plu ; cependant, il y a plusieurs lignes VBA que j'ai laissées telles quelles,
    même si ces lignes ne me plaisaient pas du tout.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    pourquoi ? à cause de ce très gros défaut sur plusieurs feuilles d'ingrédients : sur "Macérats",
    "Huiles et BV", "Additifs", et "Poudres Synthé." : la 1ère ligne de données est en ligne 4
    en ligne 3, la 1ère ligne du tableau structuré est vide, ce qui est tout à fait contraire aux
    règles d'utilisation des tableaux structurés ! en effet, dans ces tableaux, doit y'avoir aucune
    ligne vide ! exception : quand un tableau structuré est vide, il y a forcément une 1ère ligne
    vide qu'on ne peut pas supprimer, car elle sert pour la saisie des données de la 1ère ligne
    de données ; cependant, attention : cette 1ère ligne vide est comme une fausse ligne,
    car en VBA, si tu affiches via MsgBox la valeur de .ListRows.Count, ça sera 0 (et pas 1).

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    de toutes façons, entre la 1ère ligne de données (qui a été déjà saisie) et la dernière ligne de
    données : doit y'avoir aucune ligne vide (dans un tableau structuré, c'est impératif !).

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    pour ajouter une ligne dans un tableau structuré, le plus simple est de sélectionner la dernière
    cellule du tableau (sur la dernière ligne, et la dernière colonne à droite), puis d'appuyer sur Tab
    (Tabulation) ; tu peux aussi saisir sur la ligne qui est juste dessous la dernière ligne du tableau,
    mais j'aime moins car c'est en dehors du tableau structuré, et ça ne marchera pas si 2 options
    d'Excel ne sont pas cochées ; va dans Options, Vérification, Options de correction automatique ;
    sélectionne l'onglet "Mise en forme automatique au cours de la frappe" ; il faut ceci :

    Appliquer
    ☑ Inclure de nouvelles lignes et colonnes dans le tableau

    Automatiquement
    ☑ Formules de remplissage dans les colonnes pour créer des colonnes calculées

    c'est dans Excel 2007 à Excel 2021 ; je suppose que c'est pareil dans Excel 2024 ;
    à propos, quelle est la version d'Excel que tu utilises ? (moi c'est la version 2021)

    tu utilises peut-être Office 365 (avec abonnement) ? les 2 options mentionnées
    ci-dessus doivent y être aussi.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    pour supprimer une ligne dans un tableau structuré, il ne faut pas sélectionner une des lignes
    du tableur (tout contre le bord gauche de la fenêtre Excel) pour la supprimer ; ni sélectionner
    (par exemple) B5:M5 puis appuyer sur la touche Suppression (car ça ne fait qu'effacer les
    données de la ligne, ça ne supprime pas la ligne du TS)
    ; il faut faire comme ça :

    dans le TS, sélectionne une des cellules de la ligne à supprimer, par exemple G5, puis appuie
    en même temps sur les 2 touches Ctrl - (Ctrl moins du pavé numérique) ; sur la rangée haut
    du clavier central, tu vois que la touche 6 a un tiret (= moins) ; ça fait que tu peux faire aussi
    Ctrl 6 (sans avoir besoin d'appuyer sur Maj).

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    dans v4, j'ai corrigé les problèmes de 1ère ligne vide (avec des lignes de données dessous ;
    ou sans lignes de données dessous, mais dont la 1ère ligne était parfois une ligne dont toutes
    les données ont été effacées au lieu d'être la 1ère ligne normale d'un TS, c-à-d la fausse
    1ère ligne dont j'avais parlé plus haut ; celle qui fait que .ListRows.Count = 0)
     ; l'utilisateur
    aurait dû utiliser Ctrl - au lieu d'effacer toutes les données de la ligne !  ;)  pense à le dire
    à ta compagne (faudra pas qu'elle se vexe, hein ?).

    sur chaque feuille d'ingrédients : y'a aucune donnée ; chaque tableau a une seule ligne, qui
    est vide ; quand tu saisiras des ingrédients, ça s'inscrira d'abord en 1ère ligne du tableau,
    donc en ligne 3 ; puis ensuite en dessous.  :)

    fais plusieurs tests (et vérifications) ; après avoir saisi toutes les données, tu pourras (comme
    d'habitude)
    cliquer sur le bouton "Enregistrer", ou plus simplement : fais Ctrl d ; ça revient au
    même, mais c'est plus rapide au clavier qu'avec la souris ; les résultats seront identiques
    .

    après tes essais, regarde le nouveau code de Module1 ; c'est beaucoup plus simple,
    n'est-ce pas ?  ;)

    version v4https://www.transfernow.net/dl/20250321S1MGGfEg

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    en ce moment, avec cjoint.com, ça ne retourne pas de lien de téléchargement ➯ à la place,
    je suis passé par TransferNow ; mais le lien du fichier est valable 7 jours seulement.

    rhodo

    rhodo Posté le 21 mars, 04:32
    par rhodo
    0

    Bonsoir Rhodo,

    C'est vrai que le code du module 1 est mieux et que tout fonctionne très bien.je suis satisfait à 200%. Ta v4 est super avec toutes les modifications effectuées, et après avoir testé, je trouve ça génial.

    Merci encore et j'ai hâte d'avoir la suite sans te mettre la pression bien sûr...

    @ bientôt pour la suite de notre aventure

    Xavier

    Xav33820 Posté le 22 mars, 19:36
    par Xav33820
    0

    Bonjour Xavier,

    on va utiliser la version v4 ; sur la 2ème feuille "Macérats", le tableau est vide :
    y'a aucune ligne de données ; sur la 1ère feuille "Saisie Ingrédients", saisis ces
    données (à partir de D3 puis dessous) : Macérat olive ; Olea ; 0002 ; ACTIBIO ;
    Test111 ; 5000 ➯ 5 000 ; 31/12 ➯ 31/12/2025 ; 1/1 ➯ 01/01/2025 ; Non ; 1000
    ➯ 1 000 ;TO23 ; 200 ; fais Ctrl d ➯ Données enregistrées en feuille "Macérats".

    ferme la boîte de dialogue : bouton OK, croix de fermeture, ou touche Echap ;
    note que la plage D3:D14 a été effacée ; normal : c'est prêt pour une nouvelle
    saisie de données ; va sur la 2ème feuille ; note bien que toutes les données
    ont été écrites en B3:M3 ➯ c'est ok.  :)

    vérifie bien attentivement toutes les données de B3:M3 ; question : est-ce
    que ça te convient ? normalement, tu devrais répondre "non", car il y a un
    défaut ; peux-tu me dire lequel ?  ;)

    rhodo

    rhodo Posté le 23 mars, 18:50
    par rhodo
    0

    Bonjour Rhodo,

    Effectivement, ça ne me convient pas, les calculs sont faux. 

    En fait, je pense qu'il faudrait enlever les 3 dernières lignes dans la Saisie Ingrédients et mettre Seuil d'alerte à la place, car ces 3 lignes sont remplies automatiquement quand on saisit une recette et j'aurais besoin d'avoir ce seuil d'alerte dans un avenir proche...

    Xavier


    Xav33820 Posté le 23 mars, 19:06
    par Xav33820
    0

    @Xavier

    « Effectivement, ça ne me convient pas, les calculs sont faux. » : bonne réponse.

    « car ces 3 lignes sont remplies automatiquement quand on saisit une recette » :
    exact ; car sur une feuille MO : Pesée réelle (en g) = Quantité Utilisée (en g) ;
    E5 & E6 = Recette ; la Quantité Restante (en g) sera calculée.

    « il faudrait enlever les 3 dernières lignes dans la Saisie Ingrédients » : exact ;
    « mettre Seuil d'alerte à la place » : oui, très bonne idée.

    SCI : késaco ? c'est peut-être une erreur de saisie ?

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    référence Interne : pour les 3 caractères de droite, est-ce que c'est toujours
    des chiffres ? ou est-ce qu'il peut y avoir une lettre ? est-ce que ce code est
    aussi un code qui permet de différencier chaque ingrédient ?

    rhodo

    rhodo Posté le 23 mars, 21:05
    par rhodo
    0

    Bonsoir Rhodo,

    Effectivement, la feuille de calcul Saisie Ingrédients ne servira uniquement que pour saisir les ingrédients, donc la référence interne ne devra être que des chiffres, avec comme tu le dis le 1er caractère qui permettra d'utiliser la bonne feuille d'ingrédient et c'est un code unique qui permet de différencier chaque ingrédient. Par conséquent, dans chaque recette utilisant le même ingrédient, nous retrouverons la même référence interne. Ça peut être une très bonne idée de ne saisir que la référence interne qui nous donnera le nom de l'ingrédient au lieu d'avoir à le saisir : du coup, comment dois je faire ?

    Les fiches MO pourront être considérées comme des formulaires de sortie car il n'est pas utile de commander tout de suite l'ingrédient si nous utilisons le suivi d'alerte dans la saisie des ingrédients.

    Pour info, le SCI n'est pas une erreur mais l'acronyme de Sodium Cocoyl Isethionate

    Merci de tes explications.

    Xavier

    Xav33820 Posté le 24 mars, 19:28
    par Xav33820

    Si vous n'êtes pas inscrit sur le site, vous pouvez poster librement (en tant qu'invité).
    Pour cela, indiquez un pseudonyme (nom d'utilisateur) et une adresse email :