Trier des dates de paiements chronologiquement

Bonjour,

Je souhaite organiser mes échéances de paiement de manière chronologique en fonction de mes factures. Chaque facture peut comporter plusieurs échéances, et plusieurs factures peuvent partager la même date de paiement ainsi que le même montant.

Mon objectif est de :

- Trier les factures selon la date limite de paiement.
- Associer chaque facture à son numéro.
- Spécifier le type de paiement (1er, 2e, 3e...).
- Indiquer le montant de chaque échéance en euros.

Les informations souhaitées sont représentées dans la plage B10:B20.

Merci d'avance pour votre aide

Bonjour

Il faut utiliser des adresses absolues...

A+ François

Bonjour,

Merci pour votre aide. C'est exactement ce que je recherchais. Les formules peuvent-elles être étirées ?

Les formules fonctionneront-elles si je ne renseigne pas les 3e, 4e et 5e paiements de la facture FA2025-03 et que je passe directement à la facture FA2025-04 ?

Faudrait-il ajouter dans la formule une condition pour que, si aucun paiement n’est prévu (date limite non renseignée), la ligne suivante soit automatiquement prise en compte, et ainsi de suite ?

image

Merci d’avance.

Les formules ne peuvent pas être étiré et fonctionnent sans les types de paiement

Pour le reste il faut passer en VBA

A+ François

Bonjour à tous !

=====> Pour une aide adaptée de la communauté, merci de préciser, dans votre profil, la nature de votre Excel ( 2019 ? 2021 ? 365 ? ...)

CHAT GPT m'a fournit un code VBA qui correspond à ce que je souhaite. Le voici :

Sub GenererListePaiements()
    Dim ws As Worksheet
    Dim wsResult As Worksheet
    Dim lastRow As Long, lastCol As Long
    Dim i As Long, j As Long, k As Long
    Dim facture As String
    Dim paymentList() As Variant
    Dim countPayments As Long
    Dim temp As Variant

    ' Définir la feuille source
    Set ws = ThisWorkbook.Sheets("FACTURES ET CALENDRIER") ' Vérifie bien le nom exact de la feuille

    ' Trouver la dernière ligne et la dernière colonne
    lastRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row ' Dernière ligne de la colonne B
    lastCol = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column ' Dernière colonne de la ligne 2

    ' Effacer l'ancienne liste et créer une nouvelle feuille
    On Error Resume Next
    Application.DisplayAlerts = False
    Sheets("Liste Paiements").Delete
    Application.DisplayAlerts = True
    On Error GoTo 0
    Set wsResult = ThisWorkbook.Sheets.Add
    wsResult.Name = "Liste Paiements"

    ' En-têtes de colonnes
    wsResult.Cells(1, 1).Value = "N° FACTURE"
    wsResult.Cells(1, 2).Value = "DATE LIMITE"
    wsResult.Cells(1, 3).Value = "TYPE"
    wsResult.Cells(1, 4).Value = "MONTANT"

    ' Initialisation du tableau
    ReDim paymentList(1 To (lastRow - 4) * (lastCol \ 2), 1 To 4)
    countPayments = 0

    ' Parcours des factures
    For i = 5 To lastRow
        facture = ws.Cells(i, 2).Value ' Numéro de facture

        ' Vérifier chaque colonne de paiement (C, E, G, ...)
        For j = 3 To lastCol Step 2
            If ws.Cells(i, j).Value <> "" And IsDate(ws.Cells(i, j).Value) Then
                countPayments = countPayments + 1
                paymentList(countPayments, 1) = facture
                paymentList(countPayments, 2) = CDate(ws.Cells(i, j).Value) ' Conversion en date
                paymentList(countPayments, 3) = ws.Cells(2, j).Value ' Type
                paymentList(countPayments, 4) = ws.Cells(i, j + 1).Value ' Montant
            End If
        Next j
    Next i

    ' Trier les paiements par date
    For i = 1 To countPayments - 1
        For j = i + 1 To countPayments
            If paymentList(i, 2) > paymentList(j, 2) Then
                For k = 1 To 4
                    temp = paymentList(i, k)
                    paymentList(i, k) = paymentList(j, k)
                    paymentList(j, k) = temp
                Next k
            End If
        Next j
    Next i

    ' Insérer les données triées
    For i = 1 To countPayments
        wsResult.Cells(i + 1, 1).Value = paymentList(i, 1)
        wsResult.Cells(i + 1, 2).Value = paymentList(i, 2)
        wsResult.Cells(i + 1, 3).Value = paymentList(i, 3)
        wsResult.Cells(i + 1, 4).Value = paymentList(i, 4)
    Next i

    ' Mise en forme
    wsResult.Columns("A:D").AutoFit
    MsgBox "La liste des paiements a été générée avec succès !", vbInformation
End Sub

Bonsoir à tous !

L'IA "neurones_JFL" propose ce code M qui correspond au souhait exprimé. Le voici :

let
    Source = Table.Skip(Excel.CurrentWorkbook(){[Name="tSource"]}[Content],2),
    Traitt = let
                ttc = Table.ToColumns(Source),
                Split = List.Split(List.Skip(ttc),2),
                lp=List.Transform({1..List.Count(Split)}, each {ttc{0}} & {List.Repeat({"Paiement " & Text.From(_)},Table.RowCount(Source))} & Split{_-1})
             in List.Transform(lp, each Table.FromColumns(_,{"N° FACTURE","TYPE","DATE LIMITE","MONTANT"})),
    FiltreNull = Table.SelectRows(Table.Combine(Traitt), each ([DATE LIMITE] <> null)),
    Types = Table.TransformColumnTypes(FiltreNull,{{"DATE LIMITE", type date}, {"MONTANT", Currency.Type}, {"N° FACTURE", type text}, {"TYPE", type text}}),
    Tri = Table.Sort(Types,{{"DATE LIMITE", 0}})
in
    Tri

Merci pour votre retour,

Cordialement

Bonsoir à tous de nouveau !

Je vous remercie de ce retour.

Ne pas oublier de mettre à jour votre profil....!

Rechercher des sujets similaires à "trier dates paiements chronologiquement"