Classer des valeurs sous forme de "symétrie"

Bonsoir,

Je cherche a trier une liste de valeurs sous forme de "symétrie" autour de la plus grosse valeur de la liste. Vous trouvez mon exemple en pièce jointe afin de moeux comprendre (difficile à expliquer).

Je suis à la recherche du code VBA qui me permettra de trier les valeurs présentes en A de cette manière. La plus grosse valeur sera toujours 3.

Merci d'avance pour votre aide

Bonsoir,

je pense que l'idée est d'avoir un code "universel" qui n'aura aucun lien entre le nombre de valeurs totales, le nombre de fois que chaque valeurs comptera, c'est bien cela ?

3 sera toujours le maximum, mais pour les autres ce sera toujours 1 et/ou 2, ou bien y aura t il des 0 ou bien des décimaux ?

Comment doit on répartir les 3 s'ils sont un chiffre paire ? Quand ils sont trois vous l'avez marquez, s'ils sont deux alors je présume "un à chaque bout" mais s'ils sont quatre ?

Bien des question pour écrire un code direz vous, mais s'il faut qu'il s'adapte alors il faut tout savoir dès le début !

@ bientôt

LouReeD

Bonsoir !

-Ce seront toujours les chiffres 1,2,3 entiers.

-Si le nombre de valeurs est pair, alors on placera la valeur du milieu à la ligne (nb_valeurs_totales/2)

-Je n'ai pas très bien compris la question suivante ... "Quand ils sont trois vous l'avez marquez, s'ils sont deux alors je présume "un à chaque bout" mais s'ils sont quatre ?"

Merci pour votre aide

Pour la question des 3, deux quatre et plus au niveau des "3" :

ils sont 3 comme votre exemple : 3 x x x x 3 x x x x 3,
ils sont deux : 3 x x x xx x x x 3 ou bien x x x x 33 x x x x
tout seul x x x x 3 x x x x
4 ? : 3 x x x x x 3 3 x x x x x 3 ou bien 3 x x x 3 x x x x 3 x x x 3 ou bien autre chose...

Et si l'ensemble des chiffres autre que 3 n'est pas partageable ? : 3 x x x 3 x x x x 3

@ bientôt

LouReeD

Le nombre de "3" sera toujours un multiple de lui même

Idem pour le "2".

Leur disposition se fera donc toujours par deux. 33XXXXX33XXXXX33 ou bien 333XXXXX333XXXXX333 etc..

J'ajoute qu'il ne peut pas y avoir qu'un seul 3.

Bon okay, j'avoue c'est bizar ! mais cela est pour un projet ;)

Bonsoir,

rien n'est bizarre, chacun a ses demandes et elles sont toutes justifiées, parfois alambiquées mais ceci est fonction du niveau de chacun et de ses besoins !

Bon là je n'ai pas forcément trop de temps, est-ce pressé ?

@ bientôt

LouReeD

Bonsoir,

un peu de temps devant moi (en fait maintenant c'est derrière ! )

Je vous propose ce code, un peu alambiqué, mais fonctionnel en partant du principe suivant :
Les 3 sont multiples de trois, si les 2 et les 1 sont "impair" alors le plus petit de la moitié est en premier et le plus grand après
L'ordre de symétrie est 3213123 :

Sub LRD()
    Dim Wf As WorksheetFunction, Tablo
    Dim Tab1, Tab2, Tab3, Nb3, Nb21, Nb22, Nb11, Nb12, Temp
    Set Wf = Application.WorksheetFunction

    Tablo = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
    For i = 1 To UBound(Tablo)
        Select Case Tablo(i, 1)
            Case 1
                Tab1 = Tab1 + 1
            Case 2
                Tab2 = Tab2 + 1
            Case 3
                Tab3 = Tab3 + 1
        End Select
    Next i

    Nb3 = Tab3 / 3
    Nb21 = Int(Tab2 / 2)
    Nb22 = Nb21 + Tab2 Mod 2
    Nb11 = Tab1 / 2
    Nb12 = Nb11 + Tab1 Mod 2

    Temp = Wf.Rept(3, Nb3) & _
             Wf.Rept(2, Nb21) & _
             Wf.Rept(1, Nb11) & _
             Wf.Rept(3, Nb3) & _
             Wf.Rept(1, Nb12) & _
             Wf.Rept(2, Nb22) & _
             Wf.Rept(3, Nb3)

    For i = 1 To Len(Temp)
        Cells(i, 5).Value = Mid(Temp, i, 1)
    Next i
End Sub

Pour créer la suite finale j'utilise la fonction native d'Excel "Rept" qui répète un nombre de fois indiqué la valeur désignée : Rept(3,nb3) = le 3 sera répété nb3 fois.

@ bientôt

LouReeD

C'est PARFAIT ! je vous remercie !!

Merci @ vous pour vos remerciements !

Bon le code n'est pas top, peut-être que des "plus forts" pourraient simplifier ceci...

@ bientôt

LouReeD

Rechercher des sujets similaires à "classer valeurs forme symetrie"