Comment formater un multidimensional array en fonction de ses valeurs de cellule?

J'essaie de formater un tableau dans ma feuille Excel. Le goel fait plutôt le contraire d'un SUMIF , pour chaque élément de ma table et son numéro x , j'aimerais créer des x lignes de cet élément dans une autre table. Comme une capture d'écran peut être plus explicite qu'une longue boîte de dialog, voici ce que je veux réaliser: Table Excel

En cas d'apparition du fruit, il ne doit pas être affiché dans la table GOAL .

Les arrays Base et Goal sont écrits dans ma feuille excel et servent d'exemple, la table Current Result est faite avec cette formule:

Version française (j'utilise un Excel français):

 {=SIERREUR( INDEX( B$5:B$100; PETITE.VALEUR( SI( SI( ($C$5:$C$100>0); VRAI; FAUX ); LIGNE(B$5:B$100)-LIGNE(B$5)+1 ); LIGNES(B$5:B5) ) ); "" )} 

Version anglaise (ne l'avez pas testé):

 {=IFERROR( INDEX( B$5:B$100; SMALL( IF( IF( ($C$5:$C$100>0); TRUE; FALSE ); ROW(B$5:B$100)-ROW(B$5)+1 ); ROWS(B$5:B5) ) ); "" )} 

Pouvez-vous me donner des indications sur la façon dont je pourrais réaliser cela? Je n'y ai aucun moyen de le faire sans utiliser VBA et seulement des formules?

Note: On m'a demandé de faire cela au travail, je n'ai jamais utilisé Excel dans toute ma vie et je ne connais rien de VBA. C'est pourquoi je suis un peu perdu avec cette tâche. J'ai généralement codé en Python ou C ++. J'utilise Excel 2010.

J'ai réussi à atteindre mon objective en utilisant VBA, voici le code que j'ai utilisé:

 Public Sub GenerateTable() ' This routing will copy rows based on the quantity to a new sheet. Dim rngSinglecell As Range Dim rngQuantityCells As Range Dim intCount As Integer Dim countCell As Integer ' Set this for the range where the Quantity column exists. This works only if there are no empty cells Set rngQuantityCells = Sheets("Feuil3").Range("C5", Sheets("Feuil3").Range("C5").End(xlDown)) countCell = 4 For Each rngSinglecell In rngQuantityCells ' Check if this cell actually contains a number If IsNumeric(rngSinglecell.Value) Then ' Check if the number is greater than 0 If rngSinglecell.Value > 0 Then ' Copy this row as many times as .value For intCount = 1 To rngSinglecell.Value ' Copy the row into the next emtpy row in sheet2 countCell = countCell + 1 Intersect(Range(rngSinglecell.Address).EntireRow, Columns("B:D")).Copy Destination:=Sheets("Feuil3").Range("G" & CStr(countCell)) Next End If End If Next End Sub 

Et voici la sortie:

Résultat

Solution basée sur la réponse de Matt en double .