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 :

[VBA] Tri multi critère sur tableau [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Gestionnaire Base de données et Statisticien
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Gestionnaire Base de données et Statisticien
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Par défaut [VBA] Tri multi critère sur tableau
    Bonjour à tous,

    Après des recherches sur différents forum, je n'ai toujours pas réussi à résoudre mon problème.
    Je cherche à faire un tri sur plusieurs critères par vba, sur un tableau qui provient d'une vue que j'ai importé de ma base de données.
    Je me retrouve avec une "erreur 448 : Argument nommé introuvable" de la ligne 2 à 7.
    J'ai réalisé mon code à l'aide de l'enregistreur de macro et des infos trouvés sur différents forum.

    Je vous remercie d'avance.

    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
        ActiveWorkbook.Worksheets("DECOMPOSITION").ListObjects("Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("DECOMPOSITION").ListObjects("Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE").Sort.SortFields.Add _
            Key1:=Worksheets("DECOMPOSITION").Range("Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE[REFDECOMPO]"), Order1:=xlAscending, _
            Key2:=Worksheets("DECOMPOSITION").Range("Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE[DECOMPOSTION]"), Order2:=xlDescending, _
            Key3:=Worksheets("DECOMPOSITION").Range("Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE[REF]"), Order3:=xlAscending, _
            DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:=xlSortNormal, _
            SortOn:=xlSortOnValues
        With ActiveWorkbook.Worksheets("DECOMPOSITION").ListObjects("Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE").Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    Et ici, le code quand j'ai utilisé l'enregistreur de macro :

    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
        ActiveWorkbook.Worksheets("DECOMPOSITION").ListObjects( _
            "Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE").Sort. _
            SortFields.Clear
        ActiveWorkbook.Worksheets("DECOMPOSITION").ListObjects( _
            "Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE").Sort. _
            SortFields.Add Key:=Range( _
            "Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE[REFDECOMPO]") _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets("DECOMPOSITION").ListObjects( _
            "Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE").Sort. _
            SortFields.Add Key:=Range( _
            "Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE[DECOMPOSTION]" _
            ), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets("DECOMPOSITION").ListObjects( _
            "Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE").Sort. _
            SortFields.Add Key:=Range( _
            "Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE[REF]"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("DECOMPOSITION").ListObjects( _
            "Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE").Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With

  2. #2
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Bonjour,

    A ma connaissance, on ne peut pas utiliser la méthode Add de l'objet SortFields avec plusieurs "clefs de tri" (key1, key2 et key3). La structure correcte est pour moi celle donnée par l'enregistreur de macro (en améliorant la syntaxe).

  3. #3
    Membre du Club
    Homme Profil pro
    Gestionnaire Base de données et Statisticien
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Gestionnaire Base de données et Statisticien
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Par défaut
    Merci Issoram de ta réponse.

    Effectivement, on ne peut pas utiliser la méthode Add de l'objet SortFields avec plusieurs "clefs de tri" (key1, key2 et key3), il faut utiliser le code de l'enregistreur macro comme ci-dessous.

    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
    ActiveWorkbook.Worksheets("DECOMPOSITION").ListObjects( _
            "Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE").Sort. _
            SortFields.Clear
        ActiveWorkbook.Worksheets("DECOMPOSITION").ListObjects( _
            "Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE").Sort. _
            SortFields.Add Key:=Worksheets("DECOMPOSITION").Range( _
            "Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE[REFDECOMPO]") _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets("DECOMPOSITION").ListObjects( _
            "Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE").Sort. _
            SortFields.Add Key:=Worksheets("DECOMPOSITION").Range( _
            "Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE[DECOMPOSTION]" _
            ), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets("DECOMPOSITION").ListObjects( _
            "Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE").Sort. _
            SortFields.Add Key:=Worksheets("DECOMPOSITION").Range( _
            "Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE[REF]"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("DECOMPOSITION").ListObjects( _
            "Tableau_PISRV37010_BASEITLINE_AA_DECOMPOSITION_STOCK_ACHAT_VENTE").Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    Tant pis si ça fais plus de ligne de code.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/03/2007, 16h22
  2. formulaire tri multi critère
    Par laurent.w dans le forum IHM
    Réponses: 9
    Dernier message: 13/12/2006, 12h47
  3. Multi critère sur plusieurs tables
    Par djpit dans le forum Access
    Réponses: 4
    Dernier message: 24/08/2006, 17h49
  4. [Access-VBA] Requête multi-critère/Formulaire en mode continu
    Par adriano057 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 02/08/2006, 10h07
  5. [VB6]Tri multi-colonnes sur tableau de structure
    Par ELGUEVEL dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/02/2006, 08h02

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