Microsoft 365 Construction d'un tableau selon 2 critères en VBA

Merlin258413

XLDnaute Occasionnel
Bonjour le forum,
Je viens à nouveau solliciter votre aide.
J'ai un tableau structuré qui s'appelle pour toutes mes agences Base qui varie tous les mois
J'aimerai que dans mon onglet TIMBRES AMENDES un récap qui me donne par projet et immatriculation le montant des paiements et des remboursements
Donc pour ce faire et sans créer de nouvelles colonnes
  • Sélectionner les types de dépenses Timbres amendes et Timbre amende
  • Indiquer dans la 1ère colonne le projet colonne J
  • Indiquer dans la 2ème colonne les immatriculations
    • Pour obtenir les immatriculations
      • Aller dans libelle dépense colonne L et faire =DROITE([@[ Libelle depense]];9) : sans la création de colonne
  • Indiquer dans la 3ème colonne (entête de colonne paiement) la des montants positifs pour chaque immatriculation
. Indiquer dans la 4ème colonne (entête de colonne Remboursement) la des montants négatifs pour chaque immatriculation

Je vous ai mis un exemple de resultat sans mettre toutes immatriculations

Je vous remercie par avance et vous souhaite une excellente soirée et week-end
André
 

Pièces jointes

  • test.xlsx
    16.5 KB · Affichages: 9

merinos-BernardEtang

XLDnaute Accro
Bonjour @Merlin258413,

C'est assez facile avec Query...

C'est pas du VBA, c'est du "M"
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Base"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date mouvement", type date}, {" Type", type text}, {" Categorie depense", type text}, {" Type depense", type text}, {" Tiers", type text}, {" No tiers", type text}, {" Tache", type text}, {" Code secteur", Int64.Type}, {" Libelle secteur", type text}, {" Projet", type text}, {" Piece", type any}, {" Libelle depense", type text}, {" Quantite", type any}, {" Cout unitaire", Int64.Type}, {" Montant", Int64.Type}, {" A refacturer (O/N)", type text}, {" Client", type text}, {" Prenom du responsable", type any}, {" Nom du responsable", type any}, {" No BT", type any}, {" Compte mouvemente", type any}, {" Tache libelle", type text}}),
    #"Removed Columns" = Table.RemoveColumns(#"Changed Type",{" Type", " Categorie depense", " A refacturer (O/N)", " Client", " Prenom du responsable", " Nom du responsable", " No BT", " Compte mouvemente", " Tache libelle", " Cout unitaire", " Quantite", " Libelle secteur", " Piece"}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Removed Columns", " Libelle depense", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {" Libelle depense.1", " Libelle depense.2"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{" Libelle depense.1", type text}, {" Libelle depense.2", type text}}),
    #"Renamed Columns" = Table.RenameColumns(#"Changed Type1",{{" Libelle depense.2", "immatriculation"}}),
    #"Removed Columns1" = Table.RemoveColumns(#"Renamed Columns",{" Libelle depense.1", " Code secteur", " Type depense", " Tiers", " No tiers"}),
    #"Added Custom" = Table.AddColumn(#"Removed Columns1", "titre", each if [#" Montant"] <0 then "remboursement" else "paiement"),
    #"Removed Columns2" = Table.RemoveColumns(#"Added Custom",{"Date mouvement", " Tache"}),
    #"Pivoted Column" = Table.Pivot(#"Removed Columns2", List.Distinct(#"Removed Columns2"[titre]), "titre", " Montant", List.Sum)
in
    #"Pivoted Column"

Et on obtient directement cela:

1708708851418.png


A+

Merinos
 

Pièces jointes

  • test.xlsx
    25.7 KB · Affichages: 5

Merlin258413

XLDnaute Occasionnel
Bonjour @Merlin258413,

C'est assez facile avec Query...

C'est pas du VBA, c'est du "M"
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Base"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date mouvement", type date}, {" Type", type text}, {" Categorie depense", type text}, {" Type depense", type text}, {" Tiers", type text}, {" No tiers", type text}, {" Tache", type text}, {" Code secteur", Int64.Type}, {" Libelle secteur", type text}, {" Projet", type text}, {" Piece", type any}, {" Libelle depense", type text}, {" Quantite", type any}, {" Cout unitaire", Int64.Type}, {" Montant", Int64.Type}, {" A refacturer (O/N)", type text}, {" Client", type text}, {" Prenom du responsable", type any}, {" Nom du responsable", type any}, {" No BT", type any}, {" Compte mouvemente", type any}, {" Tache libelle", type text}}),
    #"Removed Columns" = Table.RemoveColumns(#"Changed Type",{" Type", " Categorie depense", " A refacturer (O/N)", " Client", " Prenom du responsable", " Nom du responsable", " No BT", " Compte mouvemente", " Tache libelle", " Cout unitaire", " Quantite", " Libelle secteur", " Piece"}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Removed Columns", " Libelle depense", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {" Libelle depense.1", " Libelle depense.2"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{" Libelle depense.1", type text}, {" Libelle depense.2", type text}}),
    #"Renamed Columns" = Table.RenameColumns(#"Changed Type1",{{" Libelle depense.2", "immatriculation"}}),
    #"Removed Columns1" = Table.RemoveColumns(#"Renamed Columns",{" Libelle depense.1", " Code secteur", " Type depense", " Tiers", " No tiers"}),
    #"Added Custom" = Table.AddColumn(#"Removed Columns1", "titre", each if [#" Montant"] <0 then "remboursement" else "paiement"),
    #"Removed Columns2" = Table.RemoveColumns(#"Added Custom",{"Date mouvement", " Tache"}),
    #"Pivoted Column" = Table.Pivot(#"Removed Columns2", List.Distinct(#"Removed Columns2"[titre]), "titre", " Montant", List.Sum)
in
    #"Pivoted Column"

Et on obtient directement cela:

Regarde la pièce jointe 1191476

A+

Merinos
Bonjour votre proposition est très bien mais il y a un petit soucis je ne vois la sélection des types de dépenses Timbres amendes et Timbre amende. Le résultat ne devrait pas reprendre la ligne 43 car le type de dépenses est "Sous-traitance inter agences". De plus est ce qu'il y a que ce moyen car je ne maitrise pas du tout Power Query. En vous remerciant pour le temps passé. Bonne journée
 
Dernière édition:

Merlin258413

XLDnaute Occasionnel
Bonjour @Merlin258413,

C'est assez facile avec Query...

C'est pas du VBA, c'est du "M"
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Base"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date mouvement", type date}, {" Type", type text}, {" Categorie depense", type text}, {" Type depense", type text}, {" Tiers", type text}, {" No tiers", type text}, {" Tache", type text}, {" Code secteur", Int64.Type}, {" Libelle secteur", type text}, {" Projet", type text}, {" Piece", type any}, {" Libelle depense", type text}, {" Quantite", type any}, {" Cout unitaire", Int64.Type}, {" Montant", Int64.Type}, {" A refacturer (O/N)", type text}, {" Client", type text}, {" Prenom du responsable", type any}, {" Nom du responsable", type any}, {" No BT", type any}, {" Compte mouvemente", type any}, {" Tache libelle", type text}}),
    #"Removed Columns" = Table.RemoveColumns(#"Changed Type",{" Type", " Categorie depense", " A refacturer (O/N)", " Client", " Prenom du responsable", " Nom du responsable", " No BT", " Compte mouvemente", " Tache libelle", " Cout unitaire", " Quantite", " Libelle secteur", " Piece"}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Removed Columns", " Libelle depense", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {" Libelle depense.1", " Libelle depense.2"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{" Libelle depense.1", type text}, {" Libelle depense.2", type text}}),
    #"Renamed Columns" = Table.RenameColumns(#"Changed Type1",{{" Libelle depense.2", "immatriculation"}}),
    #"Removed Columns1" = Table.RemoveColumns(#"Renamed Columns",{" Libelle depense.1", " Code secteur", " Type depense", " Tiers", " No tiers"}),
    #"Added Custom" = Table.AddColumn(#"Removed Columns1", "titre", each if [#" Montant"] <0 then "remboursement" else "paiement"),
    #"Removed Columns2" = Table.RemoveColumns(#"Added Custom",{"Date mouvement", " Tache"}),
    #"Pivoted Column" = Table.Pivot(#"Removed Columns2", List.Distinct(#"Removed Columns2"[titre]), "titre", " Montant", List.Sum)
in
    #"Pivoted Column"

Et on obtient directement cela:

Regarde la pièce jointe 1191476

A+

Merinos
Bonjour je reviens vers vous pour savoir si vous pouvez m'aider svp ?
Excellente journée
 

merinos-BernardEtang

XLDnaute Accro
Bien sûr @Merlin258413 ,


On peut aider... si on a une question claire...

Query (M) va servir a transformer et épurer les données ...

Donc l'idée de base est d'avoir des règles claires de comment on va filtrer les lignes (par exemple la 43... elle doit être filtrée sur base de quel critère? )


La première étape est de savoir si tu arrives a créer UN query simple...
Si tu vois les étapes du query...

La seule étape "bizare" dans ce cas, c'est le unpivot...


Merinos
 

Merlin258413

XLDnaute Occasionnel
Bien sûr @Merlin258413 ,


On peut aider... si on a une question claire...

Query (M) va servir a transformer et épurer les données ...

Donc l'idée de base est d'avoir des règles claires de comment on va filtrer les lignes (par exemple la 43... elle doit être filtrée sur base de quel critère? )


La première étape est de savoir si tu arrives a créer UN query simple...
Si tu vois les étapes du query...

La seule étape "bizare" dans ce cas, c'est le unpivot...


Merinos
Bonjour, comme expliqué dans mon post je ne maîtrise ni power query ni vba.
Dans mon post, je demandais uniquement de sélectionner les types de dépenses Timbres amendes et Timbre amende qui se trouve en colonne D
Le résultat ne devrait pas reprendre la ligne 43 car le type de dépenses est "Sous-traitance inter agences". comme indiqué dans mon post 3.
Si vous avez besoin de plus amples informations je suis à votre disposition
Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 132
Membres
112 667
dernier inscrit
foyoman