XL 2019 tri cellules

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

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

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...
 
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é
 
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

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 ?
 
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 ?
 
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

- 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
7
Affichages
183
Réponses
7
Affichages
284
Réponses
11
Affichages
271
Réponses
14
Affichages
385
  • Question Question
Réponses
5
Affichages
172
Retour