création fiches recettes et ingrédients

czac

XLDnaute Occasionnel
Bonjour,

je suis en train de créer un fichier pour la création de fiches recettes en lien avec des ingrédients. j'ai mis des notes sur le fichier concernant différents points où je bloque. Serait-il possible de m'aider sur ce sujet. ci-joint le fichier

un grand merci

cordialement
 

Pièces jointes

  • V2 Fiche recette 24.04.17.xls
    149 KB · Affichages: 180

czac

XLDnaute Occasionnel
Je viens de ré-essayer avec le code (car j'avais un doute d'avoir bien fait :) et effectivement, à la recette 3 il me dit "cette recette existe déjà" et ensuite ca bug toujours etc...

en tout cas suis déjà super content de votre aide

merci
 

vgendron

XLDnaute Barbatruc
Hello
j'ai fait quelques tests, jusqu'à la fiche 2 ca a fonctionné. La fiche que je nomme recette3 me dit qu'elle existe déjà. ensuite la recette 4 ca à buger.

attention avec Recette2 Fab.26.02 qui existe, tu as beau changer le numéro 26 en 27: Recette2 existe déjà.
c'est à dire que la macro n'autorise pas un nom de ficher recette unique (Recette2) pour deux N° de doc (FAB26 et FAB27)

Code corrigé pour empecher la modification sur la ficher recette d''une cellule située entre H8 etH22
pour les allèrgènes, je regarde
 

Pièces jointes

  • Fiche recette Rev5.xls
    204.5 KB · Affichages: 45

czac

XLDnaute Occasionnel
je viens de voir. Par contre dans la colonne J de la fiche recette, si je glisse la formule cela m'écrit "Valeur" et automatiquement la cellule G42 se met en valeur aussi.
De plus, quand on sélectionne plusieurs ingrédients , ex lait et crème fluide, le lait se note 2X alors que c'est pas utile.
Est-ce qu'il est utile de passer par la colonne J de la fiche recette pour les allergènes et pas récupérer les infos directement dans l'onglet "liste ingrédients"?

merci
 

vgendron

XLDnaute Barbatruc
Correction de la fonction qui évite d'avoir les #Valeurs
si tu as regardé le code précédent, tu aura remarqué que je m'étais justment posé la question de comment enlever ce message---sans succès

VB:
Public Function ConcatSolo(Ingrédient As Range) As String

Application.Volatile 'permet de raffraichir la fonction à chaque modif de la feuille excel
If IsEmpty(Ingrédient) Then 'si pas d'ingrédient sur la ligne on ne met rien dans le résultat
    result = ""
Else
    Set c = Range("Ing").Find(Ingrédient.Value, lookat:=xlWhole) 'on cherche la ligne de l'ingrédient dans la liste Ing: ColonneA
    For Each ele In Range("Allergènes").Rows(c.Row - 5).Cells
    'MsgBox ele
        If ele = "x" Then
            result = result & " " & Sheets("Liste ingrédients").Range("TabData").Cells(2, ele.Column)
        End If
    Next ele
End If
ConcatSolo = result
End Function

Est-ce qu'il est utile de passer par la colonne J de la fiche recette
à toi de me le dire.. vu que tu avais mis la colonne J avec "Allergènes" en titre
et vu que tu as mis une formule en G42, je présume que c'est ici que tu veux la liste complete SANS doublon des allergènes de la recette
j'avais d'ailleurs commencé à écrire une fonction: ConcacTotal..
mon idée était d'aller lire les allergènes de la colonne J pour en faire une liste sans doublon..
 

czac

XLDnaute Occasionnel
oui j'avais essayé de trouver une solution par des formules et donc j'avais dû créer cette fameuse colonne J.
Exactement, j'aimerais que les allergènes soit en G42. Après que cela passe par la colonne J ou bien que c'est recherché dans "liste ingrédients" pour moi l'essentiel c'est que cela fonctionne et qu'il n'y ai pas de doublon
 

vgendron

XLDnaute Barbatruc
avec cette fonction
ecrire en G42 =concatTotal()

VB:
Public Function ConcatTotal() As String
Application.Volatile 'permet de raffraichir la fonction à chaque modif de la feuille excel

Set dico = CreateObject("scripting.dictionary") 'création d'un dictionnaire
Set ListeIngrédients = Range("A8:A" & Range("A7").End(xlDown).Row) 'on récupère la liste des ingrédients de la feuille

For Each Ingrédient In ListeIngrédients
    'MsgBox Ingrédient
    Set c = Range("Ing").Find(Ingrédient.Value, lookat:=xlWhole)
    For Each ele In Range("Allergènes").Rows(c.Row - 5).Cells
    'MsgBox ele
        If ele = "x" Then
            allergène = Sheets("Liste ingrédients").Range("TabData").Cells(2, ele.Column)
            If Not dico.exists(allergène) Then dico.Add allergène, 1
        End If
    Next ele
Next Ingrédient

For Each Valeur In dico.keys 'on verse tous les allergènes dans le résultat de la fonction sous forme de chaine
    result = Valeur & "-" & result
Next Valeur
ConcatTotal = result
Set dico = Nothing

End Function
 

vgendron

XLDnaute Barbatruc
ah oui.. j'ai modifié les zones nommées...
voir PJ

avec la fonction ConcatTotal qui utilise un dictionnaire ca fonctionne SAUF que quand tu clic d'une feuille sur l'autre, le calcul garde celui de la feuille précédente..

j'ai donc écrit une autre fonction AvecTab() qui semble mieux se comporter.. mais quand tu ajoutes un ingrédient dans la recette, il faut visiblement revalider la fonction..
 

Pièces jointes

  • Fiche recette Rev6.xls
    238 KB · Affichages: 40

vgendron

XLDnaute Barbatruc
Voir cette nouvelle version: ou je force le calcul à chaque changement dans la feuille et à chaque fois que tu selectionnes une feuille...
sans doute pas la méthose la plus académique. mais au moins. ca fonctionne..
 

Pièces jointes

  • Fiche recette Rev7.xls
    237 KB · Affichages: 36

Discussions similaires

Réponses
4
Affichages
282

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16