soustration - différence par dico

gosselien

XLDnaute Barbatruc
Bonjour à tous,

Je cherche à obtenir par tableau ou dico ( dico de préférence si c'est possible dans ce cas - je ne maitrise toujours pas la bête :mad:), la liste des occurences uniques de la colonne A avec à côté, la différence entre le max et une autre valeur pour cette même personne ex: patrick 1000 et 900 , ce qui donnera donc dans mon exemple:
patrick: 100 - jacques: 1200 - etc etc...

Il n'y a à chaque fois que 2 données pour ou même personne et je cherche donc à trouver la différence.

Ceci pour le faire dans un très grand nombre de données et éviter une formule gourmande en ressource

Merci
 

Pièces jointes

  • différence par tblo ou dico .xlsm
    19.5 KB · Affichages: 24
  • différence par tblo ou dico .xlsm
    19.5 KB · Affichages: 22

thebenoit59

XLDnaute Accro
Re : soustration - différence par dico

Bonjour gosselien.

Une méthode sur le tableau joint, avec dictionary comme tu préférais.
J'espère répondre à ta demande.
 

Pièces jointes

  • différence par tblo ou dico .xlsm
    21.1 KB · Affichages: 30
  • différence par tblo ou dico .xlsm
    21.1 KB · Affichages: 26

jpb388

XLDnaute Accro
Re : soustration - différence par dico

Bonjour à tous,thebenoit59

avec dictionary mais différent de thebenoit59
 

Pièces jointes

  • différence par tblo ou dico .xlsm
    21.5 KB · Affichages: 30
  • différence par tblo ou dico .xlsm
    21.5 KB · Affichages: 30

gosselien

XLDnaute Barbatruc
Re : soustration - différence par dico

Super !

Je tournais encore autour comme à chaque fois et c'est très intéressant d'avoir 2 approches.
Un jour peut être , je comprendrai tout seul comme un grand, même si ça m'arrive parfois d'y arriver sur base d'exemples que je garde !

Grand(s) merci(s) à vous !

P.
 

laetitia90

XLDnaute Barbatruc
Re : soustration - différence par dico

bonjour gosselien :) thebenoit59:) jpb388:)

encore une autre facon d'ecrire

Code:
Sub es()
  Dim t(), i As Long, m As Object
   Set m = CreateObject("Scripting.Dictionary")
    t = Range("c2:d" & Cells(Rows.Count, 3).End(3).Row)
    For i = 1 To UBound(t)
    If m.Exists(t(i, 1)) Then
    t(m(t(i, 1)), 2) = t(m(t(i, 1)), 2) - t(i, 2)
    Else
    x = x + 1: t(x, 1) = t(i, 1): t(x, 2) = t(i, 2):  m(t(i, 1)) = x
    End If
    Next i
    [i2].Resize(x, 2) = t
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : soustration - différence par dico

Bonjour.

La version avec GroupOrg :
VB:
Sub Test()
Dim Données As Collection, T(), Nom As SsGroup, L As Long
Set Données = GroupOrg(ColUti(Feuil1.[C2:D2]), 1, 2)
ReDim T(1 To Données.Count, 1 To 2)
For Each Nom In Données
   L = L + 1
   T(L, 1) = Nom.Id
   T(L, 2) = Nom.Contenu(Nom.Contenu.Count).Id - Nom.Contenu(1).Id
   Next Nom
Feuil1.[I2].Resize(L, 2).Value = T
End Sub
Ou bien comme ça, ça marche aussi :
VB:
Sub Test()
Dim Données As Collection, T(), Nom As SsGroup, L As Long
Set Données = GroupOrg(ColUti(Feuil1.[C2:D2]), 1, Null, 2)
ReDim T(1 To Données.Count, 1 To 2)
For Each Nom In Données
   L = L + 1
   T(L, 1) = Nom.Id
   T(L, 2) = Nom.Contenu(Nom.Contenu.Count)(2) - Nom.Contenu(1)(2)
   Next Nom
Feuil1.[I2].Resize(L, 2).Value = T
End Sub
 
Dernière édition:

Paf

XLDnaute Barbatruc
Re : soustration - différence par dico

Bonsoir à tous

une autre version Dico

Code:
Private Sub CommandButton1_Click()
 Dim Tablo, TabTmp, i As Long, Maxi As Long, Mini As Long, Dico
 Set Dico = CreateObject("Scripting.Dictionary")
 Tablo = Range("C1").CurrentRegion
 For i = LBound(Tablo) + 1 To UBound(Tablo)
    Dico(Tablo(i, 1)) = IIf(Dico.exists(Tablo(i, 1)), Dico(Tablo(i, 1)) - Tablo(i, 2), Tablo(i, 2))
 Next
 Erase Tablo
 Tablo = Application.Transpose(Array(Dico.keys, Dico.Items))
 Range("G1").Resize(Dico.Count, 2) = Tablo
End Sub

A+
 

Discussions similaires

Statistiques des forums

Discussions
314 211
Messages
2 107 328
Membres
109 804
dernier inscrit
Dramac