XL 2019 Reprise de données à partir d'autres feuilles

Flnte

XLDnaute Junior
Bonjour,

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 ?

Merci d'avance
 

Pièces jointes

  • FT.xlsm
    65.3 KB · Affichages: 9

sylvanu

XLDnaute Barbatruc
Supporter XLD
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.
 

Pièces jointes

  • FT.xlsm
    51.6 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
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
 

Pièces jointes

  • FT.xlsm
    50.6 KB · Affichages: 8

Flnte

XLDnaute Junior
Bonjour Sylvanu,

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

A quoi correspond i et j ?

Encore une fois merci beaucoup de ton retour !
 

Phil69970

XLDnaute Barbatruc
Bonjour à tous

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"
1652605473884.png


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

@Phil69970
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
1- Dans votre code initial,
VB:
Range("A8") = .......Range("C:BN"), 3, 0)
Range("C8") = .......Range("C:BN"), 4, 0)
.....
Range("A37") = ......Range("C:BN"), 61, 0)
Range("C37") = ......Range("C:BN"), 62, 0)
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
 

Discussions similaires