Ouh la la, un document avec plein de références de nourriture .... ça me donne envie de manger 
Personnellement, je pense qu'il serait plus simple de passer par du code VBA. Je suis pas très à l'aise avec les formules matricielles. Mais du coup, si tu préfères une formule matricielle, il faudra attendre que qqun d'autre te répondes sur ce point. Et j'insiste vraiment sur le fait que peut-être une formule matricielle est plus simple pour toi, c'est juste que je ne sais pas bien manipuler, alors je t'explique ce qu'on pourrait faire en VBA.
Voici quelques idees pour écrire un code VBA. J'ai pas tout à fait compris ce qu'on devait chercher et où, puis ce qu'on devait copier et où, mais je vais te donner les grandes lignes.
Pour trouver la première ligne vide d'une feuille :
1 2
| Dim n As Long
n = Sheets("maFeuille").Cells(Rows.Count, 1).End(xlUp).Row + 1 |
Rows.Count indique le nombre de lignes total des feuilles. End(xlUp) permet de remonter à la première ligne non vide (donc la dernière ligne non vide de ta feuille), comme on veut la première ligne vide on fait + 1.
Ensuite quand tu voudras copier quelque chose (la valeur de la cellule A2, par exemple) sur cette ligne, en colonne A, par exemple, tu pourras écrire
Range("A" & n).Value = Range("A2").Value
Si j'ai bien compris, ceci te permettra de trouver la ligne où tu écriras le résultat de ta recherche.
Trouver une valeur dans une colonne se fait avec la fonction Match:
1 2
| Dim i As Long
i = Application.Match(valeur_cherchee, colonne_de_recherche, 0) |
colonne de recherche étant sous la forme : Range("A:A") s'il s'agit de la colonne A, par exemple. i sera le numero de ligne.
Si tes produits sont bien trié par ordre de date, tu peux procéder comme cela :
- Utiliser Match pour trouver la première occurence de la date.
- Utiliser Match pour trouver ton code produit, à partir de la ligne de la date.
Si on cherche dans la Feuil1 et que la date est en A1 dans la Feuil2 et que le code produit est en A2 dans la Feuil2
1 2 3 4 5 6
| Dim i As Long
i = Application.Match(Sheets("Feuil2").Range("A1").Value2, Sheets("Feuil1").Range("G:G"), 0) 'numero ligne 1ère occurence de la date
Dim derLig As Long
derLig = Sheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row + 1 'dernière ligne de la feuill1
Dim j As Long
j = Application.Match(Sheets("Feuil2").Range("A2").Value, Sheets("Feuil1").Range("E" & i & ":E" & derLig, 0) 'numero de la ligne qu'on cherche |
Dans le deuxième Match : la plage de recherche n'est pas une colonne, mais une plage de cellule : ici on regarde dan la colonne E, mais seulement à partir de la ligne i et jusqu'à la dernière ligne du tableau.
J'espère que c'est compréhensible
Partager