[RESOLU] Cumul doublons excel

Mkonate

XLDnaute Nouveau
Bonjour,
J'aimerais faire un cumul des doublons sur un fichier sur lequel je travaille. J'ai une base à extraire sur SAP et à partir de cette base, j'aurais voulu faire un cumul de la quantité de livraison si les dates de livraisons sont identiques.

exemple pour :
81506082 916 DLOE 28 11.12.2018
81506083 916 DLOE 10 11.12.2018

je souhaite obtenir si possible:
81506083 - 81506082 916 DLOE 38 11.12.2018

Je mets un exemple de fichier en copie peut-être se sera plus explicite.

Merci d'avance
 

Pièces jointes

  • exemple.xlsx
    9.2 KB · Affichages: 19

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Mkonate, bonjour le forum,

Quel est le critère du doublon ? Pour DLOE il y a 5 dates différentes et tu ne conserves que la première. cela signifie-t-il que les critères pour avoir un doublon sont Nom réception. et Date m.dis identiques ? Bref, c'est pas très clair tout ça...

[Édition]
Bonjour JHA, nos posts se sont croisés.
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le fil, bonjour le forum,

Code à tester sur une copie de ton fichier car il efface des cellules des colonne H à L. Si ça va pas on adapte...

VB:
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim PL As Range 'déclare la variable PL (PLage)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set O = Worksheets("Feuil1") 'définit l'onglet O
Set PL = O.Range("B3").CurrentRegion 'définit la plage PL
PL.Sort O.Range("C3"), xlAscending, O.Range("F3"), , xlAscending, Header:=xlNo 'tri de la plage PL selon Récepion et date
O.Range("H3").CurrentRegion.ClearContents 'efface d'éventuelles anciennes données
TV = PL 'définit le tableau des valeurs TV
K = 1 'initialise la variable K
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs
  On Error GoTo suite 'va à l'étiquette suite pour éviter le bug de la dernière ligne
  If TV(I, 3) = TV(I + 1, 3) And TV(I, 5) = TV(I + 1, 5) Then 'si les données de la ligne correspondent avec les données de la ligne au-dessous
  ReDim Preserve TL(1 To 5, K) 'redimensionne le tableau des lignes TL (5 lignes, K colonnes)
  TL(1, K) = IIf(TL(1, K) = "", TV(I, 1) & " - " & TV(I + 1, 1), TL(1, K) & TV(I, 1) & " - " & TV(I + 1, 1)) 'transpose les livraisons dans TL en les concatenant si doublon
  TL(2, K) = TV(I, 2) 'transpose la réception dans TL
  TL(3, K) = TV(I, 3) 'transpose le nom dans TL
  TL(4, K) = CInt(TV(I, 4)) + CInt(TV(I + 1, 4)) 'transpose les quantités dans TL en les ajoutant
  TL(5, K) = TV(I, 5) 'transpose la date dans TL
  K = K + 1 'incrémente K
  I = I + 1 'incrémente I
  Else 'sinon
suite: 'étiquette
  ReDim Preserve TL(1 To 5, K) 'redimensionne le tableau des lignes TL (5 lignes, K colonnes)
  TL(1, K) = TV(I, 1) 'transpose la livraison dans TL
  TL(2, K) = TV(I, 2) 'transpose la réception dans TL
  TL(3, K) = TV(I, 3) 'transpose le nom dans TL
  TL(4, K) = CInt(TV(I, 4)) 'transpose la quantité dans TL
  TL(5, K) = TV(I, 5) 'transpose la date dans TL
  K = K + 1 'incrémente K
  End If 'fin de la condition
Next I 'prochaine ligne de la boucle
O.Range("H3").Resize(UBound(TL, 2) + 1, 5).Value = Application.Transpose(TL) 'renvoie dans H3 le tableau TL transposé
End Sub

Heu, vous moquez pas c'est assez capilotracté...
 

Mkonate

XLDnaute Nouveau
Waouh trop cool merci beaucoup ça fonctionne et j'ai exactement ce que je voulais comme résultat.

Juste un question, est-ce que le code fonctionnera toujours si je rajoute des lignes à la suite? par exemple si je rajoute en B24, B25 etc et qu'il s'agit d'un doublon aussi?
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 023
Messages
2 084 715
Membres
102 637
dernier inscrit
TOTO33000