Power Query Power Query Gestion tableau

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 !

guypont

XLDnaute Nouveau
Bonjour,
Dans le tableau joint, je souhaiterai obtenir le résultat suivant :

- Les n° de Compte dans la colonne CpteHT (TVA).Cpte doivent se retrouver dans le colonne Code Encaisst TVA.
- Les montants de la colonne Crédits HT doivent correspondre aux n° de compte de la colonne CpteHT (TVA).Cpte et se retrouver dans la colonne Crédit HT

Exemple résultat souhaité : Tableau joint avec les chiffres en rouge à bouger


Avez-Vous une solution ?

Merci
 

Pièces jointes

  • Capture d'écran 2026-02-25 150607.png
    Capture d'écran 2026-02-25 150607.png
    120.4 KB · Affichages: 14
  • Capture d'écran 2026-02-25 151128.png
    Capture d'écran 2026-02-25 151128.png
    19 KB · Affichages: 15
Bonjour,
Pour les noms des étapes, je les renomme tout simplement (clic droit sur l'étape, à gauche, "renommer")
Pour les étapes (mes commentaires en orange, dans les lignes précédées d'un double slash) :

PowerQuery:
let
    // Chargement du tableau nommé "Tableau1_1"
    Source = Excel.CurrentWorkbook(){[Name="Tableau1_1"]}[Content],

    // Je transforme le type des données dans le tableau, je passe notamment tout ce qui a trait aux numéros de compte en "texte"
    ModType = Table.TransformColumnTypes(Source,{{"Code Encaisst TVA", type text}, {"Date", type date}, {"CpteHT (TVA).Cpte", type text}, {"Crédit HT", type number}, {"Crédit TVA", type number}}),
   
    // Je supprime les lignes dont le contenu de la colonne "Code Encaisst TVA" est null
    FiltreNull = Table.SelectRows(ModType, each ([Code Encaisst TVA] <> null)),
   
    //Ici, le gros du boulot...
    //Le regroupement se fait sur les "Code Encaisst TVA" commençant par "44571"
    //Puis, dans ces regroupements, je rajoute un table, dont les colonnes "Code Encaisst TVA" et "Crédit TVA" prennent
    //les valeurs des colonnes "CpteHT (TVA).Cpte" et "Crédit HT"
    //Il faut donc bien vérifier que ces colonnes sont bien nommées telles que dans ce code
    GoupBy = Table.Group(FiltreNull, {"Code Encaisst TVA"}, {{"Tbl", each _
                & #table({"Code Encaisst TVA","Crédit TVA"},{{[#"CpteHT (TVA).Cpte"]{0},[Crédit HT]{0}}})}},
                GroupKind.Local , (s,c) => Number.From(Text.StartsWith(c[Code Encaisst TVA], "44571")))[[Tbl]],
   
    //Je développe les colonnes qui sont nécessaires
    #"Tbl développé" = Table.ExpandTableColumn(GoupBy, "Tbl", {"Date", "Code Encaisst TVA", "Débit Encaissements", "Crédit TVA"}, {"Date", "Code Encaisst TVA", "Débit Encaissements", "Crédit TVA"}),
   
    //Et je redéfinis le typage des données
    #"Type modifié" = Table.TransformColumnTypes(#"Tbl développé",{{"Date", type date}, {"Code Encaisst TVA", type text}, {"Débit Encaissements", type number}, {"Crédit TVA", type number}})
in
    #"Type modifié"

Tu dis si tu n'y arrives toujours pas
 
Bonjour,
Pour les noms des étapes, je les renomme tout simplement (clic droit sur l'étape, à gauche, "renommer")
Pour les étapes (mes commentaires en orange, dans les lignes précédées d'un double slash) :

PowerQuery:
let
    // Chargement du tableau nommé "Tableau1_1"
    Source = Excel.CurrentWorkbook(){[Name="Tableau1_1"]}[Content],

    // Je transforme le type des données dans le tableau, je passe notamment tout ce qui a trait aux numéros de compte en "texte"
    ModType = Table.TransformColumnTypes(Source,{{"Code Encaisst TVA", type text}, {"Date", type date}, {"CpteHT (TVA).Cpte", type text}, {"Crédit HT", type number}, {"Crédit TVA", type number}}),
  
    // Je supprime les lignes dont le contenu de la colonne "Code Encaisst TVA" est null
    FiltreNull = Table.SelectRows(ModType, each ([Code Encaisst TVA] <> null)),
  
    //Ici, le gros du boulot...
    //Le regroupement se fait sur les "Code Encaisst TVA" commençant par "44571"
    //Puis, dans ces regroupements, je rajoute un table, dont les colonnes "Code Encaisst TVA" et "Crédit TVA" prennent
    //les valeurs des colonnes "CpteHT (TVA).Cpte" et "Crédit HT"
    //Il faut donc bien vérifier que ces colonnes sont bien nommées telles que dans ce code
    GoupBy = Table.Group(FiltreNull, {"Code Encaisst TVA"}, {{"Tbl", each _
                & #table({"Code Encaisst TVA","Crédit TVA"},{{[#"CpteHT (TVA).Cpte"]{0},[Crédit HT]{0}}})}},
                GroupKind.Local , (s,c) => Number.From(Text.StartsWith(c[Code Encaisst TVA], "44571")))[[Tbl]],
  
    //Je développe les colonnes qui sont nécessaires
    #"Tbl développé" = Table.ExpandTableColumn(GoupBy, "Tbl", {"Date", "Code Encaisst TVA", "Débit Encaissements", "Crédit TVA"}, {"Date", "Code Encaisst TVA", "Débit Encaissements", "Crédit TVA"}),
  
    //Et je redéfinis le typage des données
    #"Type modifié" = Table.TransformColumnTypes(#"Tbl développé",{{"Date", type date}, {"Code Encaisst TVA", type text}, {"Débit Encaissements", type number}, {"Crédit TVA", type number}})
in
    #"Type modifié"

Tu dis si tu n'y arrives toujours pas
Merci pour tes explications....mais

Problème sur le GoupBy

Comment saisir la formule (en la modifiant pour les intitulés) dans la barre de formule sans impacter l'étape précédente. Comment xcréer cette étape ?
J'ai essayé de passer par le menu "Transformer / Regrouper par" mais la fenêtre apparemment ne me permet pas de saisir les paramètres auxquels tu fais allusion
 
Re,
Effectivement, je n'utilise pas l'interface à proprement parler, mais je saisis directement le code.
Le plus simple est d'aller dans l'éditeur avancé, et de modifier.
1772106410198.png


Tu copies ma formule, tu fais bien attention que le GroupBy référence l'étape précédente (FiltreNull dans mon code), et tu mets les bons noms de colonne. Attention, si le nom comporte des caractères spéciaux, il faut borner par #"nom_de_la colonne" (# suivi d'un guillemet, puis le nom, et un guillemet pour fermer) comme [#"CpteHT (TVA).Cpte"].
De plus, comme tu peux le voir, cette instruction est terminée par [[Tbl]], ce qui permet de ne conserver que cette colonne.
Si tu as déjà réussi à atteindre cette étape, poste ici ton code, et on complètera au fur et à mesure.
 
Re,
Effectivement, je n'utilise pas l'interface à proprement parler, mais je saisis directement le code.
Le plus simple est d'aller dans l'éditeur avancé, et de modifier.
Regarde la pièce jointe 1228159

Tu copies ma formule, tu fais bien attention que le GroupBy référence l'étape précédente (FiltreNull dans mon code), et tu mets les bons noms de colonne. Attention, si le nom comporte des caractères spéciaux, il faut borner par #"nom_de_la colonne" (# suivi d'un guillemet, puis le nom, et un guillemet pour fermer) comme [#"CpteHT (TVA).Cpte"].
De plus, comme tu peux le voir, cette instruction est terminée par [[Tbl]], ce qui permet de ne conserver que cette colonne.
Si tu as déjà réussi à atteindre cette étape, poste ici ton code, et on complètera au fur et à mesure.
Désolé mais cela ne fonctionne pas pour moi.
J'ai bien remplacé les noms de colonnes par celles concernant mon tableau.
J’obtiens un message d'erreur.
Je te joins les 2 photos des fichiers concernés

Si besoin, je peux t'envoyer mon fichier pour intervention direct de ta part
 

Pièces jointes

  • Capture d'écran 2026-02-26 145325.png
    Capture d'écran 2026-02-26 145325.png
    7.4 KB · Affichages: 3
  • Capture d'écran 2026-02-26 145259.png
    Capture d'écran 2026-02-26 145259.png
    294.5 KB · Affichages: 3
Bonjour guypont, Cousinhub, le forum,

Voici une solution VBA avec cette macro dans le code de la feuille "Résultat" :
VB:
Private Sub WorkSheet_Activate()
Dim tablo, ub&, resu(), i&, n&, j&
With [Tableau1_1] 'tableau structuré
    If Not .ListObject.DataBodyRange Is Nothing Then
        tablo = .Value 'matrice, plus rapide
        ub = UBound(tablo)
        ReDim resu(1 To 2 * ub, 1 To 4)
        For i = 1 To ub
            If tablo(i, 3) <> "" Then
                n = n + 1
                resu(n, 1) = tablo(i, 1): resu(n, 2) = tablo(i, 3)
                resu(n, 3) = tablo(i, 4): resu(n, 4) = tablo(i, 5)
                If tablo(i, 6) & tablo(i, 7) <> "" Then
                    For j = i + 1 To ub
                        If tablo(j, 3) <> "" Then
                            If tablo(j, 6) & tablo(j, 7) <> "" Then Exit For
                            n = n + 1
                            resu(n, 1) = tablo(j, 1): resu(n, 2) = tablo(j, 3)
                            resu(n, 3) = tablo(j, 4): resu(n, 4) = tablo(j, 5)
                        End If
                    Next j
                    n = n + 1
                    resu(n, 2) = tablo(i, 7): resu(n, 4) = tablo(i, 6)
                    i = j - 1
                End If
            End If
        Next i
    End If
End With
'---restitution---
With [A2] '1ère cellule de destination
    If n Then .Resize(n, 4) = resu
    .Offset(n).Resize(Rows.Count - n - .Row + 1, 4).ClearContents 'RAZ
End With
With UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Elle s'exécute automatiquement quand on active la feuille, c'est l'avantage par rapport à Power Query.

Edit : tablo(i, 6) & tablo(i, 7) <> "" est un peu plus rapide que tablo(i, 6) <> "" Or tablo(i, 7) <> ""

A+
 

Pièces jointes

Dernière édition:
Re-,
Tu peux copier le code, et le coller ici (en utilisant la balise </>
Regarde la pièce jointe 1228163

Puis le langage "Power Query"
Regarde la pièce jointe 1228164
PowerQuery:
# GoupBy = Table.Group(FiltreNull, {#"Cptes Encaisst + TVA"}, {{"Tbl", each _
                & #table({#"Cptes Encaisst + TVA","Crédit TVA"},{{[#"Cpte_HT"]{0},[Crédit HT]{0}}})}},
                GroupKind.Local , (s,c) => Number.From(Text.StartsWith(c[#Cpte Encaisst + TVA], "44571")))[[Tbl]]

Cela te convient
 
- 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

Discussions similaires

Réponses
10
Affichages
691
Réponses
26
Affichages
2 K
Retour