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 :

Tris par ordre alaphabétique avec variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Par défaut Tris par ordre alaphabétique avec variable
    Bonjour,
    Je souhaiterais faire un tris en ordre alphabétique avec un tableau nommé "Tableau1" et une colonne variable,
    j'ai réaliser ce code :
    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
    Sub TriAlphaUM()
    Nomcolonne = [A1].Value
     'Met un autofiltre dans la premieres colonne, Pour la colonne concenrnée
        ThisWorkbook.Worksheets("Base de données").ListObjects("Tableau1").Sort. _
            SortFields.Clear
        ThisWorkbook.Worksheets("Base de données").ListObjects("Tableau1").Sort. _
            SortFields.Add Key:=Range("Tableau1[[#All], Nomcolonne]"), SortOn:= _
            xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ThisWorkbook.Worksheets("Base de données").ListObjects("Tableau1").Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End Sub
    Cependant la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SortFields.Add Key:=Range("Tableau1[[#All], Nomcolonne]"), SortOn:= _
    Ne prend pas la variable Nomcolonne, j'ai bien tenté de jouer avec les " et le ) et les ] mais je n'ai pas réussi.
    Avez vous des solution ?
    Cordialement,
    Passepartout007

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Passepartout007 Voir le message
    Cependant la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SortFields.Add Key:=Range("Tableau1[[#All], Nomcolonne]"), SortOn:= _
    Ne prend pas la variable Nomcolonne
    C'est normal puisque tu l'as mis à l'intérieur des guillemets. VBA la considère donc comme une chaine de caractère et non pas comme un nom de variable.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Par défaut re
    Bonjour Menhir,

    Je sais bien, c'est bien cela le problème j'ai essayer d'enlever les " et de les placer correctement mais je n'ai pas réussi, à tu une solution ?

    Cordialement,
    Passepartout007

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    avec un ListObject, il est préférable de l'utiliser en tant qu'objet
    une colonne d'un ListObject est matérialisée par la propriété ListColum de la collection ListColumns

    exemple d'une boucle sur toutes les colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub toto()
    Dim MonTablo As ListObject, MaColonne As ListColumn
    Set MonTablo = Feuil3.ListObjects("Tableau1")
        For Each MaColonne In MonTablo.ListColumns
            MsgBox MaColonne.Range.Address
        Next MaColonne
    End Sub
    exemple à adapter d'un tri variable
    une procédure reçois deux arguments : le tableau où faire le tri et le nom de la colonne
    et une autre procédure se charge de l'appeler ... c'est dans celle-ci qu'on peut faire une boucle
    en cas de tri multiples ou de tris ascendant/descendant, il conviendra d'ajouter d'autres paramètres à la procédure pour piloter le comportement souhaité

    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
    Sub toto()
    Dim MonTablo As ListObject, MaColonne As ListColumn
    Set MonTablo = Feuil3.ListObjects("Tableau1")
        TriColonneDefinie MonTablo, "PRIX"
    End Sub
     
     
    Sub TriColonneDefinie(MonTablo As ListObject, NomColonne As String)
        With MonTablo
            .Sort.SortFields.Clear
            .Sort.SortFields.Add Key:=.ListColumns(NomColonne).Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            With .Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End With
    End Sub

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Par défaut Re
    Bonjour Joe,
    merci de ta réponse grâce a toi j'ai réussi a faire ce que je voulais faire.
    Voici mon code :
    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
    22
     
    Public MaColonne As String
     
    Public Sub TriAlpha()
    Dim MonTablo As ListObject
     
    With Sheets("Base de données")
    Set MonTablo = .ListObjects("Base_Donnees")
    End With
    With MonTablo
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=.ListColumns(MaColonne).Range, SortOn:= _
            xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With .Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
    End Sub
    Encore merci je te met un pouce vert !

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,

    Une autre syntaxe (le nom d'onglet n'est pas spécifié)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub TriTableau1()
      ColTri = 1
      NomTableau = "Tableau1"
      Range(NomTableau).Sort Key1:=Range(NomTableau).Cells(1, ColTri), Order1:=xlAscending, Header:=xlGuess
    End Sub
    Boisgontier
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [BASH] Tri par ordre alphabétique avec ()
    Par Svengali48 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 25/10/2015, 07h45
  2. SELECT Distinct avec tri par ordre d'apparition
    Par Nono23 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/07/2012, 15h16
  3. Tri par ordre croissant dans variable tableau
    Par jojo86 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 27/11/2009, 16h51
  4. Tri par ordre croissant
    Par KinF dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 13/12/2008, 20h19
  5. Tri par ordre alphabétique
    Par orus8 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/04/2003, 19h27

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