transfert entre 2 tableaux

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Gribouille66

XLDnaute Nouveau
Bonjour à toutes, à tous,
quand les neurones ne veulent pas trouver la solution, il existe des internautes qui trouvent l'impossible et je vous en remercie
le tableau de gauche est l'extraction de données de différentes pages, ce tableau peut être plus ou moins long
mais il ne pourra jamais être plus long que le tableau de droite.
j'aimerai passer les montants du tableau de gauche dans le tableau de droite
j'ai tenté sommeprod et autres, au bout d'un heure j'ai jeté l'éponge
si vous avez un moment pour y jeter un oeil...

merci à tous
 

Pièces jointes

Bonsoir.
En E3, à propager sur 51 lignes :
Code:
=SIERREUR(INDEX($A$3:$A$53;EQUIV($F3;$B$3:$B$53;0);1);"")
En G3, à propager sur 51 lignes :
Code:
=SIERREUR(INDEX($C$3:$C$53;EQUIV($F3;$B$3:$B$53;0);1);"")
vous êtes vraiment super et je vous remercie
Bonsoir.
En E3, à propager sur 51 lignes :
Code:
=SIERREUR(INDEX($A$3:$A$53;EQUIV($F3;$B$3:$B$53;0);1);"")
En G3, à propager sur 51 lignes :
Code:
=SIERREUR(INDEX($C$3:$C$53;EQUIV($F3;$B$3:$B$53;0);1);"")
je ne sais quoi vous dire sinon de vous remercier sincèrement
bonne journée
 
Bonjour le Fil,
je me permets cette solution si tu as Office 365 ou mini je crois Excel 2019 en implémentant la fonction RECHERCHEX et en passant par un tableau structuré qui offre beaucoup de solutions pour tout ce qui est recherches.
1750932661906.png


Code:
=RECHERCHEX(F3;TBL[code];TBL[montant];"Code inconnu";0)

La fonction RECHERCHEX présente l'énorme avantage de pouvoir attaquer n'importe quelle colonne d'un tableau comme clef de recherche à l'inverse d'un recherche RECHERCHEV classique (sans parler d'astuces qui permettent contourner cette limite) où la clef doit être la 1ère colonne.
Dans le passé, on s'en sortait avec un INDEX combiné à un EQUIV solution fournie dans le post précédent.
RECHERCHEX se manipule aisément avec les tableaux structurés que je t'invite à implémenter le plus souvent possible. C'est certes un peu compliqué au début de comprendre leur fonctionnement mais avec un peu d'expérience on apprécie très vite ses avantages.

Fichier joint au format .xlsx

Le format .xls serait à oublier 😉

Bonne utilisation
 

Pièces jointes

  • 1750932705275.png
    1750932705275.png
    13.3 KB · Affichages: 2
  • tranfert.xlsx
    tranfert.xlsx
    14.2 KB · Affichages: 3
Dernière édition:
Bonjour à tous,

Sommeprod doit donner le résultat
VB:
=SOMMEPROD(($C$3:$C$27=$G3)*($B$3:$B$27=$F3);$A$3:$A$27)

Un essai avec Power Query à essayer

JHA
Re... Pwq j'avais bien pensé à cette solution mais il faut être mini V2016 pour une utilisation confortable. Du reste si Pwq est une 1ère utilisation je crains que ce soit un peu trop compliqué pour la mise en oeuvre de cette fonctionnalité qui n'est pas toujours simple à comprendre du 1er coup.
@Gribouille66 si tu le désires je peux te fournir la solutions en PowerQuery... ça te mettrait le pied à l'étrier si tu ne connais pas cette techno 🙂 Mais quelle Excel version as-tu ?
Oup's pas vu tu as déjà proposé la solution pwq 🙂
 
Bonjour à tous,

autre essai PQ.


PowerQuery:
let
A = (x)=> Excel.CurrentWorkbook(){[Name=x]}[Content],
B = ((x)=> Record.FromList(x{0}, List.Transform(x{1}, Text.From))) (Table.ToColumns(A("TableauGauche"))),
C = ((x)=> Table.FromRows(Table.ToList(x, each {Record.FieldOrDefault(B, Text.From(_{1}), null)} & List.Skip(_)), Value.Type(x))) (A("TableauDroite"))
in C
 
Bonjour le Fil,
je me permets cette solution si tu as Office 365 ou mini je crois Excel 2019 en implémentant la fonction RECHERCHEX et en passant par un tableau structuré qui offre beaucoup de solutions pour tout ce qui est recherches.
Regarde la pièce jointe 1219726

Code:
=RECHERCHEX(F3;TBL[code];TBL[montant];"Code inconnu";0)

La fonction RECHERCHEX présente l'énorme avantage de pouvoir attaquer n'importe quelle colonne d'un tableau comme clef de recherche à l'inverse d'un recherche RECHERCHEV classique (sans parler d'astuces qui permettent contourner cette limite) où la clef doit être la 1ère colonne.
Dans le passé, on s'en sortait avec un INDEX combiné à un EQUIV solution fournie dans le post précédent.
RECHERCHEX se manipule aisément avec les tableaux structurés que je t'invite à implémenter le plus souvent possible. C'est certes un peu compliqué au début de comprendre leur fonctionnement mais avec un peu d'expérience on apprécie très vite ses avantages.

Fichier joint au format .xlsx

Le format .xls serait à oublier 😉

Bonne utilisation
Merci beaucoup de vous êtes plongé dans mon problème...
j'ai du mal à saisir votre formule
Pouvez-vous m'expliquer
=_xlfn.XLOOKUP(F3;TBL
Code:
;TBL[montant];"Code inconnu";0)

merci
 
Re... Pwq j'avais bien pensé à cette solution mais il faut être mini V2016 pour une utilisation confortable. Du reste si Pwq est une 1ère utilisation je crains que ce soit un peu trop compliqué pour la mise en oeuvre de cette fonctionnalité qui n'est pas toujours simple à comprendre du 1er coup.
@Gribouille66 si tu le désires je peux te fournir la solutions en PowerQuery... ça te mettrait le pied à l'étrier si tu ne connais pas cette techno 🙂 Mais quelle Excel version as-tu ?
Oup's pas vu tu as déjà proposé la solution pwq 🙂
j'ai EXCEL2019, merci de ta proposition c'est bien d'apprendre et de s'améliorer
merci beaucoup
 
Merci beaucoup de vous êtes plongé dans mon problème...
j'ai du mal à saisir votre formule
Pouvez-vous m'expliquer
=_xlfn.XLOOKUP(F3;TBL
Code:
;TBL[montant];"Code inconnu";0)

merci
cela veut dire que ta version Excel ne reconnait RechercheX
AH... donc Office 2019 semble la rejeter.
Perso je suis sur Office 365 et c'est vrai que cette fonction a été implémentée au départ dans O365...
Allez comprendre pourquoi $Bill fait autant de différences !
^^^ que sur 2021 ou 2024 ? perso je ne les ai pas. Si qqun a ?
 
Bonsoir le fil,
@Gribouille66 tu trouveras donc ma solution au travers de laquelle je passe par un fnXLOOKUPV1 (RechercheX) totalement codé en PowerQuery.

Voici le code

Code:
/*
AUTHOR       : OGURUMA1209@OUTLOOK.FR
DATE         : 11/06/2023
VERSION      : Initial
PURPOSE      : Excel RECHERCHEX in PowerQuery
DESCRIPTION  :

pLookupValue  : searched value
pTableName    : table lookup for - type may be text or pq table
tmpColumnKeyNumberIndex : searched column -- type may be text or number -- not necessary to be the first column (as RechercheX)
tmpColumnReturnIndexNumber : returned column -- type me be texte or number
pSort : table lookup for need sorted or not -- eg speed
optional tmpMSG : msg if not found - default "#N/A"
*/


let pqXLOOKUPV1 = (pLookupValue as any, pTableName as any, tmpColumnKeyNumberIndex as any, tmpColumnReturnIndexNumber as any, pSort as logical, optional tmpMSG as any ) as any =>


    let

        // Fixe parameters
        // ---------------
        pMSG = if tmpMSG = null then "#N/A" else tmpMSG,
        pColumnKeyNumberIndex = if tmpColumnKeyNumberIndex = 0 then 1 else tmpColumnKeyNumberIndex,
        pColumnReturnIndexNumber = if tmpColumnReturnIndexNumber = 0 then 1 else tmpColumnReturnIndexNumber,      
        pTableArray = if pTableName is table then pTableName else Excel.CurrentWorkbook(){[Name=pTableName]}[Content],  

        // ----------------------------------------------------------------------
        // Fixe index colunm index and return column -- either number or string
        // ----------------------------------------------------------------------
        pKeyIndex=if tmpColumnKeyNumberIndex is text then List.PositionOf(Columns,tmpColumnKeyNumberIndex) else tmpColumnKeyNumberIndex - 1,
        pKeyReturn=if tmpColumnReturnIndexNumber is text then List.PositionOf(Columns,tmpColumnReturnIndexNumber) else tmpColumnReturnIndexNumber - 1,

        // -------------------------------------
        // fixe columns in table lookup for
        // -------------------------------------
        Columns = Table.ColumnNames(pTableArray),

        // ------------------------------------
        // transform to table
        // ------------------------------------
        ColumnsTable = Table.FromList(
            Columns, Splitter.SplitByNothing(), null, null, ExtraValues.Error),

        // ---------------------------------------      
        // fixe index key in index column
        // ---------------------------------------
        ColumnNameMatch = Record.Field(
            ColumnsTable{pKeyIndex},"Column1"),

        //-----------------------------------------------------
        // fixe column return value
        //-----------------------------------------------------
        ColumnNameReturn = Record.Field(
            ColumnsTable{pKeyReturn},"Column1"),
       
        //-----------------------------------------------------
        //  sort ? yes ? no ?
        //-----------------------------------------------------
        SortTable =
            if pSort = true
            then Table.Sort(pTableArray,{{ColumnNameMatch, Order.Ascending}})
            else pTableArray,
       
        //----------------------------------------------------------------------
        // fixe temp column to get value with a secured name as __Lookup__
        //----------------------------------------------------------------------
        RenameTargetCol = Table.RenameColumns(
            SortTable,{{ColumnNameMatch, "__Lookup__"}}),

        //-----------------------------------------------------
        // get value from [__Lookup__] column
        //-----------------------------------------------------
        Lookup = Table.SelectRows(
            RenameTargetCol, each [__Lookup__] = pLookupValue),
       
        //-------------------------------------------------------------------------------
        // return value or not in this case msg error (customized or default #N/A)
        //-------------------------------------------------------------------------------
        ReturnValue=
            if Table.IsEmpty(Lookup)=true
            then pMSG
            // Get first record mandatory
            else Record.Field(Lookup{0},ColumnNameReturn)

    // end nested Let
    in ReturnValue

    // end function RechercheX as pq
in pqXLOOKUPV1

Dans le fichier joint 01 en plus de répondre à ton problème tu trouveras quelques exemples d'utilisation de cette fonction.
Cette fonction a aussi fait l'objet d'un post dans le forum des trucs & astuces.

Tu trouveras deux fichiers joints qui présentent deux démarches un peu différentes.

N°1
Dans une feuille "Feuil1" j'ai reproduis tes deux tableaux
1751135780958.png


Ceux-ci ont été importés dans PowerQuery (Données/ A partir d'un tableau ou d'une plage).
Je les ai au préalable transformé en tableau structuré.
1751135890913.png
1751135903455.png


Résultat dans le workspace de PowerQuery
1751135960943.png


Requête pour TB_SOURCE
Code:
let
    Source = Excel.CurrentWorkbook(){[Name="TB_CIBLE"]}[Content],
    #"Type modifié" = Table.TransformColumnTypes(Source,{{"code", type text}})
in
    #"Type modifié"

Requête pour TB_CIBLE
Code:
let
    Source = Excel.CurrentWorkbook(){[Name="TB_CIBLE"]}[Content],
    #"Type modifié" = Table.TransformColumnTypes(Source,{{"code", type text}})
in
    #"Type modifié"

A partir de la table TB_CIBLE on va construire la table TB_RESULT_1 en implémentant la fonction fnXLOOKUPV

Code:
let
    Source = TB_CIBLE,
    TB_ADD_COL_MONTANT = Table.AddColumn(Source, "montant", each fnXLOOKUPV1 ([code],TB_SOURCE,"code","montant",false,"Inconnu"))
in
    TB_ADD_COL_MONTANT

Source = TB_CIBLE => ce type de code s'obtient on créant une référence à un tableau d'origine de manière à bénéficier des éventuelles évolution - on peut l'assimiler en quelques sortes à une réplique de TB_CIBLE

Les propriétés de chargement pour chacun de ces tableaux sont :
1751136224190.png


Et le résultat final
1751136248250.png


N°2
La méthode est quasiment similaire à la N°1
On a toujours nos deux tableaux de départ
1751136475910.png


Sous PowerQuery ça se présente comme suit
1751136509157.png


Là on remarque que l'on a uniquement importé TB_SOURCE en tant que connexion.
TB_RESULT_2
est construit comme suit
Code:
let
    Source = Excel.CurrentWorkbook(){[Name="TB_CIBLE"]}[Content],
    TB_MODIF_TYPE = Table.TransformColumnTypes(Source,{{"code", type text}}),
    TB_ADD_COL_MONTANT = Table.AddColumn(TB_MODIF_TYPE, "montant", each fnXLOOKUPV1 ([code],TB_SOURCE,"code","montant",false,"Inconnu"))
in
    TB_ADD_COL_MONTANT

On va chercher directement le tableau TB_CIBLE

Source = Excel.CurrentWorkbook(){[Name="TB_CIBLE"]}[Content]
pour récupérer les codes à rechercher et ensuite on va rechercher les montants
TB_ADD_COL_MONTANT = Table.AddColumn(TB_MODIF_TYPE, "montant", each fnXLOOKUPV1 (
Code:
,TB_SOURCE,"code","montant",false,"Inconnu"))

Les modes de chargement sont :
[ATTACH type="full" size="223x131"]1219857[/ATTACH]

J'espère t'avoir ouvert les portes pour ton initiation à PowerQuery.

Remarque : fnXLOOKUPV1 est très pratique pour des petites volumétries. Attention dans le cas contraire.

Dans le fichier 01 tu trouveras les différentes syntaxes. Tu peux soit aller cherche un tableau directement sans devoir l'intégrer dans PowerQuery soit appeler un tableau déjà intégré dans PowerQuery (cas de nos exemples).
En ce qui concerne les colonnes auxquelles on fait référence on peut soit les appeler par leur N° comme le RECHERCHEV soit par leur nom comme le RECHERCHEX.
Tu as la possibilité au préalable de demander le tri de la table d'index dans laquelle tu fais les recherches si celle-ci n'est pas triée. Il est recommandée qu'elle le soit au préalable afin de pas plomber la fonction fnXLOOKUPV1.
Enfin on a la possibilité de préciser un message d'erreur si la clef de recherche n'est pas trouvée. Par défaut ce sera "#N/A"
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour