XL 2016 création d'une période de date de validité de prix

desmonts

XLDnaute Occasionnel
Bonjour à Toutes et tous,

J'aurai encore besoin de votre aide. Je fais une extraction avec N° Ref, prix et début de date de validité. Une ref qui change de prix sera notée comme cela
ArticleDate de début de validité du prixPrix
TUTU2PJ86030/12/20172,89
TUTU2PJ86016/01/20192,95
TUTU2PJ86012/02/20192,13
TUTU2PJ86001/04/20192,19
Ce que je souhaiterai avoir une date de début prix et une date de fin de prix de validé de prix, la date de fin de validité étant la date de début de la prochaine période.
Voici ce que cela donnerai.
Ref​
Prix​
debut validité​
fin de validité​
TUTU2PJ8602,8930/12/201716/01/2019
TUTU2PJ8602,9516/01/201912/02/2019
TUTU2PJ8602,1312/02/201901/04/2019
TUTU2PJ8602,1901/04/2019
Si quelqu'un serait faire cela de façon simple en vba, cela me simplifierai la vie, par avance merci.
cdt,
 

Pièces jointes

  • essai prix date.xlsm
    152.4 KB · Affichages: 5

Dranreb

XLDnaute Barbatruc
Bonsoir.
Remarque: ça semble lié à un problème exposé dans une autre discussion, où dans la solution que je proposai je n'avais besoin que de la date de début de validité.
Cela dit avec la fonction Gigogne on pourrait l'établir facilement.
 

desmonts

XLDnaute Occasionnel
Bonjour Dranreb, oui c'est tout affect cela. Je pensais pouvoir extraire une ref un prix et une plage de validé mais en fait je ne peux extraire que la date de début, la date de fin prend fin donc avec la date de début suivante. Et du coup la petite macro que tu m'avais faite ne fonctionne pas en l'état avec mes donées d'entrée. Si jamais cela peut fonctionner facilement avec la fonction Gigogne je serai preneur. Merci pour ton aide.
cordialement
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Quelle macro que j'avais faite ne fonctionne pas ? Elle fonctionnait au contraire et n'avait besoin que de la date de début d'application. Celle de fin en plus était plus embarrassante qu'autre chose et source d'erreurs, d'autres ayant proposé des solutions en croyant qu'il ne fallait rien sortir quand une date n'était pas comprise dans une période d'application d'un prix dûment spécifiée.
 

desmonts

XLDnaute Occasionnel
Re Dranreb,

Effectivement cela fonctionne parfaitement un grand merci. (je n'avais pas compris que tu t'appuyais uniquement sur la date de début de validité).
Est il possible de modifier la mise en page cela serait plus facile pour moi de filtrer et trier ?
avoir la ref sur chaque ligne, supprimer les sous totaux et la dernière colonne fin de validité de prix, pour avoir un rendu comme ceci.
si jamais tu as du tps sinon pas grave tu m'as déjà beaucoup aidé, encore merci.
cdt,

Refdate de receptionqtitéPrix de la périodeCAdate de début de validité prix
TUTU2PJ86031/12/2017122,89 €34,68 €30/12/2017
TUTU2PJ86016/01/2019102,95 €29,50 €16/01/2019
TUTU2PJ86017/01/2019142,95 €41,30 €16/01/2019
TUTU2PJ86002/02/20191002,95 €295,00 €16/01/2019
TUTU2PJ86013/02/2019152,13 €31,95 €12/02/2019
TUTU2PJ86002/04/2019172,19 €37,23 €01/04/2019
TUTU2PJ89631/12/201718892,19 €4 136,91 €01/04/2019
TUTU2PJ89620/06/20181102,19 €240,90 €01/04/2019
TUTU2PJ89617/01/2019102,19 €21,90 €01/04/2019
TUTU2PJ89613/02/2019202,19 €43,80 €01/04/2019
TUTU2PJ89602/04/2019182,19 €39,42 €01/04/2019
 

Pièces jointes

  • Temp maj données 2406.xlsm
    180.7 KB · Affichages: 4

Dranreb

XLDnaute Barbatruc
La toute première mouture ne sortait qu'une récap, mais j'ai ajouté des choses pour trouver pourquoi je n'avais pas les mêmes chiffres que toi. Il n'y a qu'à les enlever. Pour commencer, il n'y a plus que 6 colonnes à produire, donc le tableau destiné à accueillir le résultat doit être dimensionné à 6 colonnes: Redim TRés(1 To 5000, 1 To 6), plus 7. Et naturellement il ne faut plus rien verser dans la 7, et 'resizer' à 6 à la fin pour verser le tableau.
 

desmonts

XLDnaute Occasionnel
Merci Dranreb,
grâce à tes conseilles du message précédant j'ai réussi à obtenir ce que je souhaitais. La seule chose que je n'arrivais à faire c'est de tout éditer sans ligne vide entre chaque changement de ref. j'ai donc rajouter une ligne de code suppriment les lignes vide, cela risque de ramer un peu si le fichier est gros mais c'est top encore merci pour ta patience.

Code:
Private Sub Worksheet_Activate()
   Dim Ref As SsGr, Dat As SsGr, Détail, TRés(), L, LDéb, PrixU As Currency, Montant As Currency, TotRéf As Currency, DDébPrix As Date
   ReDim TRés(1 To 100000, 1 To 6)
   L = -1
   For Each Ref In Gigogne(TableUnique(Feuil1.[A2], Feuil2.[A2]), 1, 3)
      L = L + 1: TRés(L + 1, 1) = Ref.ID: TotRéf = 0
      For Each Dat In Ref.co
         For Each Détail In Dat.co
            If Détail(0) = 0 Then
               PrixU = Détail(2)
               DDébPrix = Détail(3)
            Else
               L = L + 1
               TRés(L, 1) = Ref.ID
               TRés(L, 2) = Dat.ID
               TRés(L, 3) = Détail(2)
               TRés(L, 4) = PrixU
               Montant = Détail(2) * PrixU
               TRés(L, 5) = Montant
               TotRéf = TotRéf + Montant
               TRés(L, 6) = DDébPrix
               End If
            Next Détail, Dat, Ref
         'L = L + 1: TRés(L, 2) = "Total :": TRés(L, 5) = TotRéf
      'Next Ref
   Me.[A3].Resize(100000, 6).Value = TRés
   Range("D:D").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
   End Sub
 

Dranreb

XLDnaute Barbatruc
Ben supprime la sortie de la 1ère ligne juste derrière le for Each Ref in Gigogne(etc.
Et inutile désormais de commencer à L = -1 au début, 0 par défaut convient parfaitement.
Inutile aussi de calculer le total TotRéf si tu ne veux plus le sortir.
En fait tout devient plus simple …
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 046
Messages
2 084 844
Membres
102 686
dernier inscrit
Franck6950