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 tableau multi critères


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 8
    Par défaut Tri tableau multi critères
    Bonjour à tous

    Je souhaite avoir un peu d'aide pour trier un tableau 2 dimensions en vba.
    En fouinant sur Google, se sujet a était évoqué maintes et maintes fois, cependant je n'arrive jamais a l'adapter avec ma macro (je débute en vba). Pour l'instant j'arrive à trier selon 1 critère à la fois mais j'ai besoin de trier avec 2 critères. Trier par Date puis Fournisseur (voir mon fichier).
    Vous allez me dire d'utiliser l'enregistreur de macro, qui utile la fonction : SortFields.Add Key:=Range("F2:F13")… mais je veux pas passer par les cellules Excel, uniquement avec les variables.

    Merci pour votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    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
    Bonsoir,

    Je n'ai pas pu ouvrir le fichier .rar (format exotique)
    Dans la PJ, une fonction standard qui tri un tableau nommé Tablo (array)

    Tri suivant la colonne 3 puis la colonne 1

    0,5s pour trier un tableau de 10.000 lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub TriDateNom()
      Tablo =.........
      TriTabMult Tablo, 3, 1
      [F2:H7].Value2 = Tablo
    End Sub
    Jacques Boisgontier
    Fichiers attachés Fichiers attachés

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 8
    Par défaut
    Merci pour ta réponse,

    Mais, je voudrais la même chose sans utiliser [F2:H7].Value2, car au moment où je veux faire mon tri, je n'ai aucune valeur dans ma feuille excel, elles sont déjà enregistrées bien avant dans mes variables comme ceci :

    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
    Sub EnregistrementTableauData()
        Dim d As Long
        Dim t As Long
     
        NbrArticle = Range("A1").End(xlDown).Row - 1
     
        ReDim TableauData(NbrArticle)
        d = 1
     
        For t = 1 To NbrArticle
             d = d + 1
            TableauData(t).Qte = Range("A" & d)
            TableauData(t).Description = Range("B" & d)
            TableauData(t).Reference = Range("C" & d)
            TableauData(t).Revision = Range("D" & d)
            TableauData(t).Matiere = Range("E" & d)
            TableauData(t).Fournisseur = Range("F" & d)
            TableauData(t).DateCommande = Range("G" & d)
            TableauData(t).Commande = Range("H" & d)
        Next
    End Sub

  4. #4
    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
    Bonsoir,

    Le programme tri une variable tableau 2D Tablo(,).
    [F2:H7] n'est là que pour visualiser le tableau Tablo(,)

    Je ne comprends pas la syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableauData(t).Qte = Range("A" & d)


    TableauData est-il un tableau de variables défini avec Type.... End Type?

    Poster le fichier au format .zip

    Jacques Boisgontier

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 8
    Par défaut
    Voici mon fichier, j'espère que cela pourra aider à comprendre.
    Merci

    [Edit] Oui, c'est un tableau défini avec Type.... End Type.
    Fichiers attachés Fichiers attachés

  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
    Voici un exemple simple de tri multi-criteres d'un tableau de structures nommé a().
    Il faut remplacer ;
    a() par tableaudata().
    Dte par DateCommande
    Nom par Fournisseur
    Personne par categorie

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    Option Compare Text
    Type Personne
      Nom As String
      Dte As Long
    End Type
     
    Sub triMultiCriteres()
      n = 5
      Dim a() As Personne: ReDim a(1 To n)
      a(1).Nom = "Dupont": a(1).Dte = #1/1/1980#
      a(2).Nom = "Balu": a(2).Dte = #1/1/1980#
      a(3).Nom = "Charlie": a(3).Dte = #1/1/1990#
      a(4).Nom = "Durand": a(4).Dte = #1/1/1990#
      a(5).Nom = "Campas": a(5).Dte = #1/1/1980#
      '--- tri  multi-criteres Date/nom
      Dim b() As Personne: ReDim b(LBound(a) To UBound(a))
      Dim clé() As String: ReDim clé(LBound(a) To UBound(a))
      Dim index() As Long: ReDim index(LBound(a) To UBound(a, 1))
      For i = LBound(a) To UBound(a, 1)
        clé(i) = Format(a(i).Dte, "000000") & a(i).Nom: index(i) = i
      Next i
      Call Tri(clé(), index(), LBound(a), UBound(clé))
      For lig = LBound(clé) To UBound(clé)
         b(lig) = a(index(lig))
      Next lig
      a = b
      '-- transfert feuille pour test
      For i = 1 To n
        Cells(i + 1, 1) = a(i).Nom
        Cells(i + 1, 2) = a(i).Dte
      Next i
    End Sub
     
    Sub Tri(clé() As String, index() As Long, gauc, droi) ' Quick sort
      ref = clé((gauc + droi) \ 2)
      g = gauc: d = droi
      Do
        Do While clé(g) < ref: g = g + 1: Loop
        Do While ref < clé(d): d = d - 1: Loop
        If g <= d Then
          temp = clé(g): clé(g) = clé(d): clé(d) = temp
          temp = index(g): index(g) = index(d): index(d) = temp
          g = g + 1: d = d - 1
        End If
      Loop While g <= d
      If g < droi Then Call Tri(clé, index, g, droi)
      If gauc < d Then Call Tri(clé, index, gauc, d)
    End Sub
    Jacques Boisgontier
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [XL-2010] [VBA] Tri multi critère sur tableau
    Par Carlito01 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/05/2014, 15h01
  2. Tri sur tableau multi pour génération de jointures SQL
    Par Djakisback dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 21/09/2007, 14h58
  3. formulaire tri multi critère
    Par laurent.w dans le forum IHM
    Réponses: 9
    Dernier message: 13/12/2006, 12h47
  4. [Tableaux] Tri d'un tableau multi-dimensions
    Par lodan dans le forum Langage
    Réponses: 6
    Dernier message: 05/12/2006, 10h08
  5. [Tableaux] tri sur un tableau multi-dimensionnel
    Par nicoaix dans le forum Langage
    Réponses: 1
    Dernier message: 12/04/2006, 21h23

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