J'ai besoin d'aide car je bloque sur la procédure que je fais ! En effet je souhaite que sur la feuille FT soit repris les ingrédients et la quantité qui sont indiqués dans la feuille Données_FT. pour cela pas de soucis. Ensuite une fois qu'ils sont repris sur la Feuille FT je souhaite que pour chaque ingrédients que l'unité et le prix soit indiqué en allant le prendre sur la feuille mercurial.
J'ai donc fais une RechercheV. Sauf que les données ne sont pas dans le même tableau alors pour pallier à cela j'ai fais des Error ToGo avec des alternatives. Cela fonctionne bien mais ayant 30 ingrédients pour lequel je dois le faire cela m'indique que ma procédure est trop longue. Je suis persuadé que je peux bien simplifier mon code mais je ne trouve pas la solution. Quelqu'un parmis vous peut-il m'aiguiller ?
Bonsoir FInte,
Si j'ai bien tout compris, j'ai rajouté dans la PJ :
VB:
Sub UetPrix()
Application.EnableEvents = False
Application.ScreenUpdating = False
T = Sheets("Mercurial").[A3:AR20]
Ligne = 8
While Cells(Ligne, "A") <> ""
Ingredient = Cells(Ligne, "A")
For i = 1 To UBound(T)
For j = 1 To UBound(T, 2)
If T(i, j) = Ingredient Then
Cells(Ligne, "B") = T(i, j + 1)
Cells(Ligne, "D") = T(i, j + 2)
End If
Next j
Next i
Ligne = Ligne + 1
Wend
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
J'ai rajouté en début de votre code un Application.EnableEvents = False pour éviter que la macro s'auto appelle en permanence puisqu'on écrit dans la feuille. Ca accélère le traitement.
Re,
... j'ai pas pu m'empêcher de reprendre ce code à n'en plus finir pour remplir le tableau.
Toute la portion de remplissage peut se résumer à :
VB:
Range("A4") = Application.VLookup(Target.Value, Sheets("Données_FT").Range("C:BN"), 2, 0) 'Nombre de portion
For i = 3 To 61 Step 2
Range("A" & (0.5 * i + 6.5)) = Application.VLookup(Target.Value, Sheets("Données_FT").Range("C:BN"), i, 0) 'Intitulé Ingrédient
Range("C" & (0.5 * i + 6.5)) = Application.VLookup(Target.Value, Sheets("Données_FT").Range("C:BN"), i + 1, 0) 'Qté Ingrédient
Next i
Merci beaucoup d'avoir pris le temps de répondre à ma question. Cela me semble effectivement bien plus efficace et moins long que ce sur quoi je m'engageais. Puis-je me permettre de te demander quelques explications par rapport à ce que tu as codé afin de progresser ?
En effet dans le passage suivant :
VB:
For i = 3 To 61 Step 2
Range("A" & (0.5 * i + 6.5)) = Application.VLookup(Target.Value, Sheets("Données_FT").Range("C:BN"), i, 0) 'Intitulé Ingrédient
Range("C" & (0.5 * i + 6.5)) = Application.VLookup(Target.Value, Sheets("Données_FT").Range("C:BN"), i + 1, 0) 'Qté Ingrédient
Next i
à quoi correspond : "For i = 3 To 61 Step 2"
de même pour "Range("A" & (0.5 * i + 6.5))" à quoi correspond 0.5 et 6.5
Enfin dans le passage :
Code:
T = Sheets("Mercurial").[A3:AR20]
Ligne = 8
While Cells(Ligne, "A") <> ""
Ingredient = Cells(Ligne, "A")
For i = 1 To UBound(T)
For j = 1 To UBound(T, 2)
If T(i, j) = Ingredient Then
Cells(Ligne, "B") = T(i, j + 1)
Cells(Ligne, "D") = T(i, j + 2)
End If
Next j
Next i
Juste en passant j'avais commencé et perso la 1ere partie je l'avais faite comme ceci
==> Copie des ingrédients et des quantités de la feuille "Donnée FT" vers la feuille "FT"
Ligne = 8
For i = 5 To 66 Step 2
Feuil2.Cells(Ligne, 1).Value = Feuil3.Cells(5, i).Value 'Copie 1 colonne sur 2 donc E,G,I,K ....
Feuil2.Cells(Ligne, 3).Value = Feuil3.Cells(5, i + 1).Value 'Copie 1 colonne sur 2 donc F,H,J,L ....
Ligne = Ligne + 1
Next
J'ai décidé de prendre la série 2,3,4,...62 comme indice i.
Les cellules en A ont comme indice 3,5,7,9 .... et en C 4,6,8,10
Donc je fais de 3 à 61 par saut de 2, ce qui fait bien 3,5,7,9 et la colonne C j'utilise i+1, ça fait donc 4,6,8,10
2- Je cherche la relation qui existe entre la série 3,5,7,9 et 8,9,10...
Et la relation mathématique entre les deux est : y=0.5x+6.5
On peut facilement l'obtenir en faisant sous XL un tableau avec les deux séries, un graphique avec ce tableau, une courbe de tendance et option afficher l'équation.
3- J'ai utilisé i et j par habitude, ça aurait été plus clair d'utiliser LigTableau et ColTableau. C'est ce qui pointe les cellules dans le tableau :
Code:
T = Sheets("Mercurial").[A3:AR20]
Ligne = 8
While Cells(Ligne, "A") <> ""
Ingredient = Cells(Ligne, "A")
For LigTableau = 1 To UBound(T)
For ColTableau = 1 To UBound(T, 2)
If T(LigTableau, ColTableau) = Ingredient Then
Cells(Ligne, "B") = T(LigTableau, ColTableau + 1)
Cells(Ligne, "D") = T(LigTableau, ColTableau + 2)
End If
Next j
Next i
Merci à vous @sylvanu et @Phil69970 pour vos retours ! Avec ces explications je comprends bien mieux vos codes. Je vais pouvoir corriger du travail que j'ai commencé mais pas forcément correctement !