Convertire Colonne en ligne en fonction du contenu d'une cellule

0

Bonjour à tous,

J'aurai souhaité convertir un certain nombre de données indiquées en colonne dans une feuille 1 en donnée en ligne dans une feuille 2.

Je voudrai que lorsque le contenu des colonnes A à C est identique dans la feuille 1, les données de la colonne F s'affiche dans la feuille 2 dans les colonnes correspondantes à ce qui était indiqué dans la colonne E de la feuille 1. Je souhaiterai également le contenu des colonnes A à C identique s'affiche dans la feuille 2

Ex:
Feuille 1 F2 -> Feuille 2 G2
Feuille 1 F3 -> feuille 2 D2
Feuille 1 F4 -> feuille 2 H2
Feuille 1 F5 -> Feuille 2 I2

ET

Que les données identiques de la feuille 1 (A2 -> A5: C2 -> C5) soit sur les cellules A2, A3 et A4 de la feuille 2

Excel ci joint https://www.cjoint.com/c/JDgqKDXCLuB

Je vous remercie par avance pour votre aide !!

A trèsvite

    Posté le 6 avril 2020, 18:37
    par Quentin731
    Répondre
    0

    Bonjour Quentin,

    C'était un bel exercice qui mettait en œuvre plusieurs fonctions... c'est pour cette raison que j'entrerai moins dans le détail que d'habitude.

    Mais pour commencer, voici mon fichier transformé.

    Il était au format Excel 2003, j'ai conservé ce format bien que des messages d'erreur soient apparus lors de l'enregistrement. Donc cette version ne fonctionne peut-être pas parfaitement.

    https://www.cjoint.com/c/JDhiBQFAQlA

    Sinon, voici le même avec le format de fichier .xlsx

    https://www.cjoint.com/c/JDhiFhHQ1pA

    Colonne A

    Pour avoir la liste sans doublon des numéros, la solution avait été postée par CHRIS en janvier et qu'il à fallu adapter ici.

    http://excel.engalere.com/question/7038-base-de-donnee-avec-filtre-cherche-extraire-tous-les-noms

    Colonnes P et Q

    Les numéros étant saisis par groupe, ces deux colonnes servent à savoir à quelle ligne commence et se termine un groupe avec le même numéro.

    En colonne P

    =SI(ESTERREUR(EQUIV(CNUM(A2);Numéros;0));0;EQUIV(CNUM(A2);Numéros;0))

    Deux subtilités dans cette formule :

    1. Afin d'éviter les #NA si la valeur n'a pas été trouvée, je fais une condition et j'affiche seulement si la formule n'a pas d'erreur.

    2. Pour une raison que j'ignore, le numéro de la feuille 1 est affiché en feuille 2 en tant que texte alors je le convertis en nombre CNUM() pour comparer des choses comparables pour Excel.

    En colonne Q

    =SI(P2>0;SI(ESTERREUR(EQUIV(CNUM(A3);Numéros;0));P2+20;EQUIV(CNUM(A3);Numéros;0))-1;0)

    Similaire à la colonne P, cette colonne a toutefois une particularité pour tenir compte de la dernière ligne avec un numéro. Si c'est le cas, on dit que la zone se termine arbitrairement 20 lignes plus loin (pour ne pas rechercher sur les 65536 lignes de ta feuille.

    Colonnes B et C

    On regarde tout simplement dans la colonne P la ligne du début du pavé de quelques lignes pour savoir où aller chercher la date, et le type

    =INDEX('Feuille 1'!B:B;'Feuille 2'!P2)

    Si au sein d'un même groupe, les dates ou les types ne sont pas identiques, c'est la première ligne de chaque groupe qui est utilisée.

    Colonnes D à N

    Sans entrer dans les détails, cette formule utilise la recherche de texte avec les caractères jokers "*" & D$1 & "*" ce qui veut dire "le contenu de la cellule D1 que j'entoure d'astérisque" pour que la recherche trouve le mot quelle que soit sa position dans le mot (début, milieu, fin)

    =SI(ESTERREUR(EQUIV("*" & D$1 & "*";INDIRECT("'Feuille 1'!$E"&$P2&":$E"&$Q2);0));"";INDEX('Feuille 1'!$F:$F;EQUIV("*" & D$1 & "*";INDIRECT("'Feuille 1'!$E"&$P2&":$E"&$Q2);0)+'Feuille 2'!$P2-1))

    La fonction INDIRECT() permet aussi de rechercher dans la bonne zone, puisqu'on a déjà calculé en colonne P et Q les lignes de début et de fin.

    La fonction INDEX permet ensuite de trouver la bonne quantité à la bonne ligne.

    Merci à ceux qui auront tout lu jusqu'au bout hihihi.

    Bon courage.

    MicXL Posté le 7 avril 2020, 10:32
    par MicXL

    Si vous n'êtes pas inscrit sur le site, vous pouvez poster librement (en tant qu'invité).
    Pour cela, indiquez un pseudonyme (nom d'utilisateur) et une adresse email :