formule ou macro pour dissocier 2 listes

jeanjacques

XLDnaute Junior
Bonjour,

Quelqu'un pourrait m'aider à séparer une liste initiale en 2 listes le plus disjointes possibles?


Bon dimanche.
 

Pièces jointes

  • liste.xlsx
    9.7 KB · Affichages: 64

jeanjacques

XLDnaute Junior
Bonjour Paf,
Les 2 listes doivent être au maximum différentes (nombres identiques dans une liste et les autres nombres identiques dans la 2ème, une séparation en 2) Un fichier séparé en 2 fichiers contenant le moins de nombres communs aux 2. Bien sûr il y aura forcément des nombres en commun aux 2 listes (intersection d'ensembles) comme le 8 dans mon exemple, mais je voudrais le moins possible. ce serait bien d'afficher en rouge les erreurs et le % mais c'est un gadget. MERCI
 

Paf

XLDnaute Barbatruc
re, avec du retard :oops:

un essai macro:

on 'regroupe' les différents nombres puis on les affecte d'abord dans tableau, puis les derniers dans un second.

ce qui ne représente qu'une solution parmi celles possibles, et ce n'est pas forcément la plus optimisée.

VB:
Sub Sépare()
Dim dico, i As Long, derL As Long, Plage As Range, TR, Ta, Tb, x As Long
Dim Li As Integer, cel As Range, j As Long, Clé, k As Long
Set dico = CreateObject("Scripting.Dictionary")
Set Plage = Range("A2:E" & Range("A" & Rows.Count).End(xlUp).Row)
Li = Round((Round(Plage.Count / 2, 0)) / 5, 0) * 5
ReDim TR(1 To Li, 1 To 2)
ReDim Ta(1 To Li / 5, 1 To 5)
ReDim Tb(1 To Li / 5, 1 To 5)

For Each cel In Plage
    dico(CStr(cel)) = dico(CStr(cel)) + 1
Next
j = 1

For Each Clé In dico.keys
    For i = 1 To dico(Clé)
        x = x + 1
        If x > Li Then
            x = 1: j = 2
        End If
        TR(x, j) = Clé
    Next
Next
For i = 1 To UBound(Ta, 1)
    For j = 1 To UBound(Ta, 2)
        k = k + 1
        Ta(i, j) = TR(k, 1)
        Tb(i, j) = TR(k, 2)
    Next
Next
Range("G2").Resize(UBound(Ta, 1), UBound(Ta, 2)) = Ta
Range("M2").Resize(UBound(Tb, 1), UBound(Tb, 2)) = Tb

End Sub

A+
 

Discussions similaires

Réponses
8
Affichages
417

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 247
Messages
2 086 591
Membres
103 248
dernier inscrit
Happycat