Regrouper nombre de 2 liste

  • Initiateur de la discussion Initiateur de la discussion kenzo1245
  • 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 !

K

kenzo1245

Guest
Bonjour,

C'est assez compliqué à expliquer.

Alors voilà, j'ai 2 liste de nombre en colonnes qui peuvent varier mais qui auront toujours la même somme.

ex:

liste A : 15; 15 ; 50 ; 50 ; 50 ; 100 ; 100 ; 100
liste B : 40; 40 ; 100 ; 100 ; 100 ; 100

J'aimerais savoir si on peut regrouper à chaque fois qu'il y à la même valeur ou la même somme dans chacune des 2 listes et les mettre dans d'autre colonnes séparément. (peut-être avec VBA).

Dans l'exemple ci-dessus ça donnerai : (15;15;50 avec 40;40) (50;50 avec 100) (100 avec 100) (100 avec 100) (100 avec 100)

J'ai mis un document pour une meilleur explication.

Merci d'avance
 

Pièces jointes

Re : Regrouper nombre de 2 liste

Bonjour.

Avec une fonction matricielle perso :
VB:
Option Explicit

Function RegroupListes(PlgLst1 As Range, Plglst2 As Range) As Variant()
Dim Lst1(), Le1 As Long, Ls1 As Long, S1 As Double, Résu(1 To 9, 1 To 16), _
    Lst2(), Le2 As Long, Ls2 As Long, S2 As Double, C As Long
Lst1 = PlgLst1.Value
Lst2 = Plglst2.Value
For Ls1 = 1 To 9: For C = 1 To 16: Résu(Ls1, C) = "": Next C, Ls1: Ls1 = 0: C = 0
' On Error GoTo Err
Do
   Do
      Le1 = Le1 + 1: If Le1 > UBound(Lst1) Then GoTo Fin
      Ls1 = Ls1 + 1: Résu(Ls1, C + 1) = Lst1(Le1, 1)
      S1 = S1 + Lst1(Le1, 1): Loop Until S1 >= S2
   If S1 = S2 Then C = C + 2: Ls1 = 0: Ls2 = 0
   Do
      Le2 = Le2 + 1: If Le2 > UBound(Lst2) Then GoTo Fin
      Ls2 = Ls2 + 1: Résu(Ls2, C + 2) = Lst2(Le2, 1):
      S2 = S2 + Lst2(Le2, 1): Loop Until S2 >= S1
   If S1 = S2 Then C = C + 2: Ls1 = 0: Ls2 = 0
   Loop
' Err: MsgBox Err.Description: Stop: Resume
Fin: RegroupListes = Résu
End Function
En H6:W14, validé matriciellement (Ctrl+Maj+Entrée) :
Code:
=RegroupListes($B$6:$B$12;$E$6:$E$12)
Remarque: Résultat imprévisible si le total final ne correspond pas.
 
Dernière édition:
Re : Regrouper nombre de 2 liste

Une révision de ma fonction qui explore les deux listes jusqu'au bout même si on arrive au terme de l'une sans trouver d'égalité :
VB:
Function RegroupListes(PlgLst1 As Range, Plglst2 As Range) As Variant()
Dim Lst1(), Le1 As Long, Ls1 As Long, S1 As Double, Résu(1 To 9, 1 To 16), _
    Lst2(), Le2 As Long, Ls2 As Long, S2 As Double, C As Long
Lst1 = PlgLst1.Value
Lst2 = Plglst2.Value
For Ls1 = 1 To 9: For C = 1 To 16: Résu(Ls1, C) = "": Next C, Ls1: Ls1 = 0: C = 0
Do
   Do
      Le1 = Le1 + 1: If Le1 > UBound(Lst1) Then Exit Do
      Ls1 = Ls1 + 1: Résu(Ls1, C + 1) = Lst1(Le1, 1)
      S1 = S1 + Lst1(Le1, 1): Loop Until S1 >= S2
   If S1 = S2 Then C = C + 2: Ls1 = 0: Ls2 = 0
   If Le1 > UBound(Lst1) And Le2 > UBound(Lst2) Then Exit Do
   Do
      Le2 = Le2 + 1: If Le2 > UBound(Lst2) Then Exit Do
      Ls2 = Ls2 + 1: Résu(Ls2, C + 2) = Lst2(Le2, 1):
      S2 = S2 + Lst2(Le2, 1): Loop Until S2 >= S1
   If S1 = S2 Then C = C + 2: Ls1 = 0: Ls2 = 0
   Loop Until Le1 > UBound(Lst1) And Le2 > UBound(Lst2)
If S2 <> S1 Then Résu(9, C + IIf(S2 > S1, 1, 2)) = "(+" & Abs(S2 - S1) & " ?)"
RegroupListes = Résu
End Function
 
Dernière édition:
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
XL pour MAC Calcul de notes.
Réponses
5
Affichages
814
Réponses
11
Affichages
730
Retour