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 sur plus de 3 colonnes à l'aide de VBA Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 611
    Points : 359
    Points
    359
    Par défaut Tri sur plus de 3 colonnes à l'aide de VBA Excel
    Bonjour,

    Je souhaite trier une feuille excel sur 4 colonnes en vba.

    Je pense créer une colonne qui contient la concaténation des 4 colonnes. La position de cette colonne est variable. Je ne peux donc coder mais il me faut préciser la colonne à l'aide de son numéro.

    Comment faire ?

    Merci d'avance.
    Julien.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    Bonjour juju05
    Bonjour le forum

    Pourquoi la colonne "concaténée" est variable?

    Sinon pour commencer, pouquoi pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub regroupe()
     
    'Concatène en E les colonnes A B C D
        Range("E1:E" & Range("A" & Cells.Rows.Count).End(xlUp).Row). _
        FormulaR1C1 = "=RC[-4]&RC[-3]&RC[-2]&RC[-1]"
    'Tri ascendant de la colonne E
        [E1].Sort Key1:=Sheets("Feuil1").[E1], Order1:=xlAscending, _
        key2:=Sheets("Feuil1").[E1], Order2:=xlAscending, Header:=xlGuess
    'Efface la colonne concaténée
        Columns("E").Delete Shift:=xlToLeft
     
    End Sub
    C'est pas exactement ce que tu demande mais bon c'est un début.

    Bonne soirée

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    bonjour le forum

    La réponse à ma question précédente était dans le titre

    Voilà ci-dessous un code qui s'adapte au nombre variable de colonnes.



    Voici le 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Option Explicit
     
    Sub Assemblage()
    Dim I As Integer
    Dim J As Long
    Dim Lg As Long
    Dim Msg As String
    Dim ColDep As Integer
    Dim LigDep As Long
    Dim dc As Long
     
      ColDep = 1
      LigDep = 1
     
      If Range("A1") <> "" Then
        Lg = Range("A" & Rows.Count).End(xlUp).Row
      End If
     
      With Sheets("Feuil1")
        For J = LigDep To .Cells.Find("*", , , , xlByRows, xlPrevious).Row
          Msg = ""
          dc = .Cells(J, .Columns.Count).End(xlToLeft).Column
     
          For I = ColDep To dc
            If .Cells(J, I) <> "" Then
              Msg = Msg & .Cells(J, I)
            End If
          Next I
          If Len(Msg) > 0 Then
            Range("A" & J).Offset(0, dc) = Left(Msg, Len(Msg))
            Lg = Lg + 1
          End If
        Next J
      End With
     
      Range("A" & J).Offset(0, dc).Sort key1:=Sheets("Feuil1").Range("A" & J).Offset(0, dc), Order1:=xlAscending, Header:=xlGuess
     
      Columns(dc).Offset(0, 1).Delete Shift:=xlToLeft
     
    End Sub
    J'espère que cela répond mieux à ton besoin juju05

  4. #4
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 501
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 501
    Points : 16 419
    Points
    16 419
    Par défaut
    Bonjour

    Pour trier sur + de 3 critères dans les versions antérieures à 2007, on peut utiliser le tri classique en faisant un 1er tri sur les critères de poids faible (le 4ème si 4) un second sur les critères de poids fort (les 3 autres).

    Inutile donc de concaténer quoi que ce soit.

Discussions similaires

  1. [VBA-E]Tri sur plus de 3 colonnes
    Par jmmaugis dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/04/2007, 22h28
  2. [VBA-E Colonnes et lignes en VBA Excel
    Par skeut dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/03/2007, 16h32
  3. Réponses: 3
    Dernier message: 08/12/2006, 16h22
  4. Listview trié sur plus d'une colonne
    Par Duan dans le forum Delphi
    Réponses: 2
    Dernier message: 26/05/2006, 03h29
  5. Hash sur plus de 2 colonnes ?
    Par BakaOnigiri dans le forum Langage
    Réponses: 2
    Dernier message: 18/04/2006, 18h47

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