Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

soustration - différence par dico

  • Initiateur de la discussion Initiateur de la discussion gosselien
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 😡), 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

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.
 
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
 
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:
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+
 
Re : soustration - différence par dico

Bonjour et Merci à tous 🙂

Je pense que personnellement, c'est ma version de PAF que je comprends le plus facilement 🙂 mais j'ai gardé toutes les autres

🙂
P.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…