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 !

jeromear

XLDnaute Junior
Bonjour le forum,
Je suis à la recherche d'une formule qui puisse regrouper une "selection" de cellules sur des même lignes vers des tableaux qui les classent selon leurs codes.
C'est une réquête très abstaite aussi voici la feuille avec en P68 le début de la liste que je tente de réaliser.

J'ai fait des tests avec SOMMPROD mais pas concluants.
Peut être qu'une macro est nécéssaire

NB : Il est possible de décaler les colonnes S T U et V à la suite de D si c'est necessaire.
Regarde la pièce jointe TRIER FOURNISSEURS.xls

Merci à tous les forumeurs.
 
Re : trier des lignes

J'avais ça dans un autre forum, regarde si ça peut t'aider 😉
Pourquoi un tri sur des données alphanumériques ?
........Parce que ce qui peut le plus peut le moins.
Comme exemple on pourrait citer le tri de nomenclatures de produits, ces nomenclatures pouvant être
- des nombres ou des lettres,
- commencer par des nombres ou par des lettres,
- se terminer par des nombres ou par des lettres

Le tableau suivant servira à la démonstration
Tablo = Array("170A", "28", "21CX", "AB24", "261CW", "AB4", "3BBB", "1", "D21", "D", "AB12", "170012A", "28245", "214589CX", "AB2473921", "261456CW", "AB125114", "37BBB", "1234", "D21", "Doudou", "ABCD125")

Ce qui peut trier ces trois types de données à l'aide d'une seule procédure pourra trier indifféremment l'un ou l'autre de ces types.

Convention de départ :
Les chiffres passent avant les lettres

Restriction :
Aucune lettre n'est accentuée.
Explication : Cétoulafôte aux codes ascii qui servent à classer les données :
"0" = chr(48), "9" = chr(57), A = chr(65) ... Z = chr(90), a = chr(97) ... z = chr(122), à = chr(133)

Code:
Private Sub TriDunTabloAlphanumereux()
Dim matata As Variant, mesmoutons As Variant, PlusOuMoins As Integer

    'tableau mesmoutons non trié
    mesmoutons = Array("170A", "28", "21CX", "AB24", "261CW", "AB4", "3BBB", "1", "D21", "D", "AB12", "170012A", "28245", "214589CX", "AB2473921", "261456CW", "AB125114", "37BBB", "1234", "D21", "Doudou", "ABCD125")
    matata = VaTrier(mesmoutons)
    
    'Nettoyage de matata
    For PlusOuMoins = 0 To UBound(matata)
        matata(PlusOuMoins) = Replace(matata(PlusOuMoins), Chr(1), "")
    
        'Affichage du résultat dans la fenêtre "Exécution"
        Debug.Print Trim(matata(PlusOuMoins))
    Next
End Sub
Bonne soirée

Code:
Function VaTrier(matata As Variant) As Variant
Dim montonton As String, mimi As String, lanana As String, Environ As Integer, PlusOuMoins As Integer
    ' on formate tour à tour les numériques puis les données alphabétiques
    For PlusOuMoins = 0 To UBound(matata)
        If IsNumeric(Left(matata(PlusOuMoins), 1)) Then
            mimi = CStr(Val(matata(PlusOuMoins)))
            lanana = Mid(matata(PlusOuMoins), Len(mimi) + 1)
            matata(PlusOuMoins) = String(20 - Len(mimi), Chr(1)) & mimi & lanana
        Else
            mimi = ""
            lanana = matata(PlusOuMoins)
            For Environ = 1 To Len(lanana)
                mimi = mimi + Left(lanana, 1)
                lanana = Mid(lanana, 2)
                If IsNumeric(Left(lanana, 1)) Then Exit For
            Next
            matata(PlusOuMoins) = mimi & String(20 - Len(lanana), Chr(1)) & lanana
        End If
    Next
    
    'Tri des données formatées
    For PlusOuMoins = 0 To UBound(matata) - 1
        For Environ = PlusOuMoins To UBound(matata)
            If matata(PlusOuMoins) > matata(Environ) Then
                montonton = matata(Environ)
                matata(Environ) = matata(PlusOuMoins)
                matata(PlusOuMoins) = montonton
            End If
        Next Environ
    Next PlusOuMoins
    VaTrier = matata
End Function
"Environ" est un mot clé. Remplace-le.
 
Re : trier des lignes

Bonsoir jeromear, Epaf,

Cette formule matricielle (validation par Ctrl+Maj+Entrée) en P68 :

Code:
=SI(LIGNES(P$68:P68)>NB.SI($B$1:$B$100;$O$68);"";INDEX(B:B;PETITE.VALEUR(SI($B$1:$B$100=$O$68;LIGNE($B$1:$B$100));LIGNES(P$68:P68))))

Ensuite :

- la copier sur P68:R72 sans la modifier

- la copier sur S68:V72 en modifiant les colonnes adéquates

- Copier/Collage spécial/Formules de la ligne P68:V68 sur tous les tableaux

- sur chaque tableau, remplacer $68 par la référence de la 1ère ligne.

Voilà, ce fut un peu longuet, mais pas difficile.

Faites les mises en forme que vous désirez, par exemple masquer éventuellement les valeurs zéro, soit par format personnalisé, soit par MFC, soit par menu Outils-Options-Affichage.

A+
 

Pièces jointes

Dernière édition:
Re : trier des lignes

Bonsoir Job75
Voila des formules que je découvre INDEX, PETITE.VALEUR (et je vais bientôt les comprendre car je me forme au fur et à mesure).
Cela étant, vos explications et vos formules sont comme toujours parfaites.
Mon programme (60 000Ko par "fichier commande client") arrive bientôt à sa fin.😱
Un grand merci à vous!
😉
(je viens de crier "merci Job" dans mon bureau, on va me prendre pour un fou)
 
- 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

Discussions similaires

Réponses
10
Affichages
658
Réponses
5
Affichages
914
Retour