XL 2019 tri cellules

boguinette

XLDnaute Nouveau
Bonjour à tous,
Je me permets de vous solliciter, je pense que ma question est un peu bête, mais j'ai le nez dans mon tableau et je n'arrive pas à trouver la solution... :-(
Je voudrais trier des cellules du plus petit au plus grand, je mets un fichier exemple en pièce jointe. J'ai essayé de modifier le format de la cellule en nombre, en format texte, j'ai même rajouter un zéro pour avoir le même nombre de chiffres dans les cellules, mais mon 1.1.11.1 sort au dessus du 1.1.2 par exemple...
Merci pour votre aide ! :)
 

Pièces jointes

  • TRI.xlsx
    8.6 KB · Affichages: 33

boguinette

XLDnaute Nouveau
En fait ce sont des points de norme (par exemple dans une colonne j'ai 1.1.1 et dans la colonne à côté le texte qui correspond a ce point, et ainsi de suite, et je voudrais idéalement les classer dans l'ordre, pour pouvoir vérifier qu'ils y sont tous plus facilement, et que ca soit plus cohérent. Sachant que j'ai à peu près une centaine de points...
 

djidji59430

XLDnaute Barbatruc
ok mais tu n'as pas repondu :

" Tu voudrais quoi, comme résultat ?"
tu veux quoi apres 1.1.1. ?
1.1.1. 11, c'est le 11 eme retrait du premier point du premier alinéa du premier paragraphe
1.1.2 c'est le deuxieme point du premier alinéa du premier paragraphe, donc quand le premier est terminé
 

job75

XLDnaute Barbatruc
Bonjour boguinette, djidji59430,

Voyez le fichier .xlsm joint et la macro du bouton :
VB:
Sub Tri()
Dim tablo, i&, s, j%, maxi%
Application.ScreenUpdating = False
With [A1].CurrentRegion
    tablo = .Columns(1).Resize(.Rows.Count + 1) 'matrice, plus rapide, au moins 2 éléments
    '---détermination de la taille maximum---
    For i = 2 To UBound(tablo) - 1
        s = Split(tablo(i, 1), ".")
        For j = 0 To UBound(s)
            If Len(s(j)) > maxi Then maxi = Len(s(j))
    Next j, i
    '---ajout des zéros pour avoir des tailles identiques---
    For i = 2 To UBound(tablo) - 1
        s = Split(tablo(i, 1), ".")
        For j = 0 To UBound(s)
            s(j) = Format(Val(s(j)), String(maxi, "0"))
        Next j
        If j Then tablo(i, 1) = Join(s, ".")
    Next i
    '---1ère restitution et tri---
    .Columns(1) = tablo
    .Sort .Columns(1), xlAscending, Header:=xlYes
    'Exit Sub 'activer si l'on veut voir les zéros
    '---suppression des zéros inutiles---
    tablo = .Columns(1).Resize(.Rows.Count + 1) 'matrice, plus rapide, au moins 2 éléments
    For i = 2 To UBound(tablo) - 1
        s = Split(tablo(i, 1), ".")
        For j = 0 To UBound(s)
            s(j) = Val(s(j))
        Next j
        If j Then tablo(i, 1) = Join(s, ".")
    Next i
    '---2ème restitution---
    .Columns(1) = tablo
End With
End Sub
Pour voir les zéros ajoutés activez Exit Sub comme indiqué.

A+
 

Pièces jointes

  • TRI(1).xlsm
    20.4 KB · Affichages: 7

boguinette

XLDnaute Nouveau
ok mais tu n'as pas repondu :

" Tu voudrais quoi, comme résultat ?"
tu veux quoi apres 1.1.1. ?
1.1.1. 11, c'est le 11 eme retrait du premier point du premier alinéa du premier paragraphe
1.1.2 c'est le deuxieme point du premier alinéa du premier paragraphe, donc quand le premier est terminé
Après 1.1.1 je voudrais 1.1.1.1, 1.1.1.2, 1.1.2, 1.1.2.1....
c’est le sens de ta question ?
 

boguinette

XLDnaute Nouveau
Bonjour boguinette, djidji59430,

Voyez le fichier .xlsm joint et la macro du bouton :
VB:
Sub Tri()
Dim tablo, i&, s, j%, maxi%
Application.ScreenUpdating = False
With [A1].CurrentRegion
    tablo = .Columns(1).Resize(.Rows.Count + 1) 'matrice, plus rapide, au moins 2 éléments
    '---détermination de la taille maximum---
    For i = 2 To UBound(tablo) - 1
        s = Split(tablo(i, 1), ".")
        For j = 0 To UBound(s)
            If Len(s(j)) > maxi Then maxi = Len(s(j))
    Next j, i
    '---ajout des zéros pour avoir des tailles identiques---
    For i = 2 To UBound(tablo) - 1
        s = Split(tablo(i, 1), ".")
        For j = 0 To UBound(s)
            s(j) = Format(Val(s(j)), String(maxi, "0"))
        Next j
        If j Then tablo(i, 1) = Join(s, ".")
    Next i
    '---1ère restitution et tri---
    .Columns(1) = tablo
    .Sort .Columns(1), xlAscending, Header:=xlYes
    'Exit Sub 'activer si l'on veut voir les zéros
    '---suppression des zéros inutiles---
    tablo = .Columns(1).Resize(.Rows.Count + 1) 'matrice, plus rapide, au moins 2 éléments
    For i = 2 To UBound(tablo) - 1
        s = Split(tablo(i, 1), ".")
        For j = 0 To UBound(s)
            s(j) = Val(s(j))
        Next j
        If j Then tablo(i, 1) = Join(s, ".")
    Next i
    '---2ème restitution---
    .Columns(1) = tablo
End With
End Sub
Pour voir les zéros ajoutés activez Exit Sub comme indiqué.

A+
Merci !! ca marche nickel... c'est top ! je vais essayer de mettre ca dans mon tableau, mais par contre les données des autres colonnes à gauche et à droite suivront aussi ?
 

boguinette

XLDnaute Nouveau
Bonjour à tous,

Je suis de retour avec une question... J'ai essayé de rentrer la macro dans mon tableau, et donc j'y arrive sur une feuille du classeur, mais quand je veux mettre un bouton sur une deuxième feuille ca ne marche pas...
Je joins mon tableau, sur la feuille BRC, le bouton fonctionne, mais sur la feuille grille complète ca ne marche pas... Pourtant j'ai l'impression de faire la même manip...
Je mets en pièce jointe mon fichier, il y a quelque chose que je dois mal effectuer mais je bloque...
Merci pour votre aide !!
 

Pièces jointes

  • Grille audits internes VS BRCV8-IFSV7 essai.xlsm
    162.8 KB · Affichages: 4

Statistiques des forums

Discussions
312 177
Messages
2 085 971
Membres
103 073
dernier inscrit
MSCHOE16