Calcul entre deux dates si reférences identiques

Bonjour à vous,

je galère sur un sujet qui pourrait sembler simple, calculer le délai entre 2 dates..

Dans le fichier joint vous avez dans la colonne B une référence.. elle a été vendue, valeur positive en colonne C (date dans la colonne A) et il y a eu un retour, valeur négative (date dans la colonne A).

En bref j'aimerais avoir le délai entre la date négative et la date positive pour les références concernées... j'ai essayé par TCD... mais je bloque :(

Merci de votre aide

6suivi-sav.xlsx (36.19 Ko)

Bonjour,
Peux-tu explique un retour sans vente ?
Cdlt.

capture d ecran 2022 02 02 111549

Bonjour Jean-eric,

je ne comprends pas ta question...

dans le premier cas le produit a été vendu lé 22/01/2020, retour le 26/05 et revente le 06/06

dans le deuxième cas le produit a été vendu le 10/06, retour le 26/06 et revente le 11/07...

par contre dans le tableau tu peux avoir des retours sans vente initiale car la vente date peut être d'une date antérieure... et tu peux avoir des retours sans nouvelle vente, car le produit n'a pas été vendu depuis....

Voila j'espère avoir répondu

Re,
ne cherche pas à comprendre !
Et je n'ai pas encore pris l'apéro, promis...
Cdlt.

le dry january est terminé

Bonjour à tous

en D2 :

=SIERREUR(SI(C2<0;"";INDEX(A3:$A$1267;EQUIV([@reference]&-[@[Vente_prix_vendu]];B3:$B$1267&C3:$C$1267;0))-[@[Vente_date]]);"")

voir s'il faut masquer les valeurs négatives pour les cas évoqués avec Jean-Marie

Merci chris,

j'ai intégré ta formule à mon tableau.. cela me donne dans certains cas la bonne réponse...mais je crois qu'il y a trop de variables qui gênent le bon déroulé du calcul...

1suivi-sav-v2.xlsx (70.63 Ko)

Bonjour à tous,

Une autre solution en VBA. Il faut indexer le tableau car il peut y avoir plusieurs retours successifs :

Option Explicit

Sub CalculerLEcartEntreDates()

Dim I As Integer, Index As Integer
Dim AireReference As Range, AireVente As Range, AirePrix As Range, AireNbJours As Range, AireIndexation As Range
Dim ValeurDateRetour As Date, DateEncours As Date
Dim ReferenceEnCours As String, IndexEnCours As String

    Application.ScreenUpdating = False

    With Sheets("Feuil1").ListObjects("TableDesVentes")
         .Sort.SortFields.Clear
         .Sort.SortFields.Add2 Key:=Range("TableDesVentes[Références]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
         .Sort.SortFields.Add2 Key:=Range("TableDesVentes[Vente_date]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
         With .Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
         End With
    End With

    Set AireReference = Range("TableDesVentes[Références]")
    Set AireVente = Range("TableDesVentes[Vente_date]")
    Set AirePrix = Range("TableDesVentes[Vente_prix_vendu]")
    Set AireNbJours = Range("TableDesVentes[Nb jours]")
    Set AireIndexation = Range("TableDesVentes[Indexation]")

    Index = 0
    AireIndexation.ClearContents
    For I = AireIndexation.Count To 1 Step -1
        If AirePrix(I) < 0 Then
           Index = Index + 1
           ReferenceEnCours = AireReference(I)
           IndexEnCours = ReferenceEnCours & "-" & Format(Index, "000")
           AireIndexation(I) = IndexEnCours
        End If

        If AireReference(I) = ReferenceEnCours Then
           AireIndexation(I) = IndexEnCours
        End If

    Next I

    For I = 1 To AireIndexation.Count
        With AireIndexation(I)
             ValeurDateRetour = DateRetour(AireReference(I))
             DateEncours = CDate(AireVente(I))
             If DateDiff("d", DateEncours, ValeurDateRetour) > 0 Then
                AireNbJours(I) = DateDiff("d", DateEncours, ValeurDateRetour)
             End If
        End With
    Next I

    AireNbJours.ClearContents
    For I = 1 To AireIndexation.Count

        With AireIndexation(I)
             ValeurDateRetour = DateRetour(.Value)
             DateEncours = CDate(AireVente(I))
             If DateDiff("d", DateEncours, ValeurDateRetour) > 0 Then
                AireNbJours(I) = DateDiff("d", DateEncours, ValeurDateRetour)
             End If
        End With
    Next I

    Set AireReference = Nothing: Set AireVente = Nothing:  Set AireNbJours = Nothing

    Application.ScreenUpdating = True

End Sub

Function DateRetour(ByVal NumeroIndex As String) As Date

Dim I As Integer
Dim AireIndexation As Range, AireVente As Range, AirePrix As Range

    Set AireIndexation = Range("TableDesVentes[Indexation]")
    Set AireVente = Range("TableDesVentes[Vente_date]")
    Set AirePrix = Range("TableDesVentes[Vente_prix_vendu]")

    For I = 1 To AireIndexation.Count
        If CStr(AireIndexation(I)) = NumeroIndex And AirePrix(I) < 0 Then
           DateRetour = CDate(AireVente(I))
           Exit For
        End If
    Next I

    Set AireIndexation = Nothing: Set AireVente = Nothing:  Set AirePrix = Nothing

End Function

Re,
Pour me faire pardonner !?
Proposition Power Query (à tester et optimiser...)
78chris et JFL devraient intervenir.
Pas beaucoup de temps !...
Cdlt.

10suivi-sav.xlsx (65.95 Ko)

Eric et Jean-Eric, merci pour vos deux solutions :)

ça marche sous 2 formes différentes... VBA et power query :) je vais voir laquelle est la plus facilement expolitable, notamment quand je vais changer les données ;)

merci

Jean-Eric, je suis sur power query et j'ai copié mon tableau initial, comment fais tu pour avoir les 2 colonnes différentes vente date et vente date 1 là je cale

Jean-Eric

j'ai voulu adapter ta solution en changeant la base de données (j'ai gardé l'ancienne et j'ai rajouté une base "journal des ventes)

J'ai réussi à rentrer dans powerquery et j'ai recrée les colonnes comme toi.. sauf que je n'arrive pas à créer la colonne "vente_date.1"... peux tu m'expliquer . merci de ton aide

Jean

2testpowerquery.zip (367.96 Ko)

Bonjour

1er problème tu exploites un classeur externe que nous n'avons pas, donc requête illisible pour nous. Mais de toue évidence tu ne suis pas les étapes de Jean-Eric

Reprends son classeur et regarde les étapes de la requête à droite (tu peux voir le détail de chaque étape dans la barre de formule et en cliquant sur le petit rouage de la ligne d'étape) afin de comprendre chaque étape et pouvoir ensuite la reproduire

hello chris, c'est bien ce que j'essaie de faire...

je vais persévérer...

Bonjour à tous,

J'arrive ...tardivement....

Si la requête proposée par Jean-Eric vous convient, il vous suffit simplement d'en modifier la source.

Source = Excel.CurrentWorkbook(){[Name="t_données"]}[Content],

devient :

= Excel.CurrentWorkbook(){[Name="Journal_des_ventes"]}[Content]

MERCI JFL !!!!!!!

en fait en passant par gestionnaire de noms je me suis aperçu que j'avais mal nommé ma nouvelle table :)...

Donc je vais faire comme ça... même si je vais devoir me pencher sur Power car ça em semble un outil incroyable

Bonjour de nouveau,

....... je vais devoir me pencher sur Power car ça em semble un outil incroyable

Futur aficionado ?

EDIT : Ne pas oublier de passer le sujet en mode résolu !

en effet JFL, même si rien qu'en essayant de "reproduire" de qu'avait Jean-eric, j'ai galéré un max... sais tu s'il y a des livres ou sites pour se former sur Power ?

Merci et bonne soirée

Bonsoir à tous,

en effet JFL, même si rien qu'en essayant de "reproduire" de qu'avait Jean-eric, j'ai galéré un max... sais tu s'il y a des livres ou sites pour se former sur Power ?

Le livre de Frédéric LE GUEN et Cathy MONIER aux éditions ENI. (Hélas, il n'est plus référencé me semble-t-il......)

Par ailleurs, il existe une quantité impressionnante de tutoriels/vidéos sur le net.

Re,
Merci à 78chris et JFL pour leurs interventions.
Bonne soirée.
Cdlt.

Rechercher des sujets similaires à "calcul entre deux dates references identiques"