IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Tri personnalisé [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2015
    Messages : 26
    Points : 15
    Points
    15
    Par défaut Tri personnalisé
    Bonjour le forum,

    Voici une nouvelle colle dont je n'ai pas trouvé de piste de solution sur la toile.
    J'ai une colonne avec le même nombre de caractères dans chaque cellule. Comment pourrais-je modifier la ligne de code ci-dessous pour faire un tri ascendant avec les 5 derniers caractères contenus dans chaque cellule uniquement ?
    La macro enregistrée ci-dessous ne trie qu'avec la totalité des caractères contenus dans chaque cellule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub TriPerso()
    Range("C:D").Sort Key1:=Range("C1"), Order1:=xlAscending, _
    Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
    Orientation:=xlTopToBottom
    End Sub
    D'avance merci !

  2. #2
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Bonjour,
    crée (même temporairement) une colonne intermédiaire dans laquelle les derniers caractères seraient stockés.
    Il ne te restera plus qu'à utiliser cette colonne comme clé 1 pour ton tri.
    A+

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2015
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    david84
    Merci ! Ça marche !
    Pourquoi chercher compliqué quand on peut faire simple ! J'espérai tout faire dans l'éditeur VBA (Shame on me!).

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Je suis d'accord avec Davido mais au cas où il ne serait pas possible d'adopter cette solution, je propose un code qui servirait peut-être ailleurs,
    procédure à copier sur la feuille concernée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub TriPerso()
    Dim Tbase, Dcel As Range, x As Long, NbCar As Integer'supprimer Nbcar si inutilisé
    Set Dcel = Range("C" & Rows.Count).End(xlUp)
    Tbase = Range("C2", Dcel(1, 2))
    NbCar = 5 'facultatif pour nombre caractères
    Tri_tb Tbase, NbCar 'supprimer Nbcar si inutilisé
    Range("C2", Dcel(1, 2)).ClearContents
    Range("C2").Resize(UBound(Tbase, 1), UBound(Tbase, 2)) = Tbase
    End Sub
    et une fonction, dans un module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Function Tri_tb(tb, nb As Integer) 'origine (adaptée) http://silkyroad.developpez.com/vba/tableaux/#LI
    'ci-dessus supprimer nb si inutilisé
    Dim Valeur As Integer
    Dim i As Integer
    Dim Cible As Variant
     
    Do
      Valeur = 0
      For i = UBound(tb, 1) - 1 To 1 Step -1
        If Right(tb(i, 1), nb) > Right(tb(i + 1, 1), nb) Then 'nb à remplacer par 5 si inutile
          Cible = tb(i, 1) & "|" & tb(i, 2)
          tb(i, 1) = tb(i + 1, 1)
          tb(i, 2) = tb(i + 1, 2)
          tb(i + 1, 1) = Split(Cible, "|")(0)
          tb(i + 1, 2) = Split(Cible, "|")(1)
          Valeur = 1
        End If
      Next i
    Loop While Valeur = 1
    Tri_tb = tb
    End Function
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2015
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par casefayere Voir le message
    Je suis d'accord avec Davido mais au cas où il ne serait pas possible d'adopter cette solution, je propose un code qui servirait peut-être ailleurs,
    Merci ! Votre solution est bien pratique pour sa portabilité.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-E] Menu personnalisé
    Par damsmut dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 28/11/2007, 13h21
  2. [Excel\VBA] tri par ordre alphabatique et cellule associée
    Par jefe.k dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2007, 15h40
  3. [SQL-VBA]tri par date dans access
    Par Mickey_Mouse dans le forum VBA Access
    Réponses: 5
    Dernier message: 06/02/2007, 09h49
  4. VBA excel : Menu personnalisé et fermeture de classeurs
    Par wushual1 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 03/07/2006, 16h45
  5. Réponses: 2
    Dernier message: 27/10/2005, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo