Trié une base de donnée par VBA excel

Résolu
Bonjour a tous

je vous explique mon problème, je doit triés une base de donnée, de chutes aluminium selon plus plusieurs critères : selon la désignation, selon la couleur, et selon la longueur.

Je voudrais pourvoir trier les chutes par odre aphabétique selon la désignation, en suite selon la couleur de ce profil, et pour finir selon sa longueur.

Ma base de donnée est conçus de plusieurs colonnes :
Nombre / Désignation / Couleur / Longeur / code barre / "vide" / Réservé / commentaires
donc un total de 8 colonnes, sachant que la colonne A=Nombre, B=Désignation, C=couleur, D=longueur, E=code barre (colonne caché), F=réservé, H=commentaire tous cela à la ligne 9

4 réponses

Résumé de la discussion

Tri multi-critères d'une base de données de chutes aluminium selon désignation, couleur et longueur, avec huit colonnes (Nombre, Désignation, Couleur, Longueur, code barre caché, réservé, commentaire, etc.). Des solutions proposées via Excel et VBA visent à trier successivement par Désignation, puis Couleur, puis Longueur, en utilisant des clés de tri sur B, C et D en délimitant la plage A9:H. Des exemples de code Sub Tri_multicriteres pour Excel 2003 montrent comment définir les derLIG, ajouter des Tris par Designation, Couleur et Longueur et appliquer le tri sur la plage A9:H DerLigA. Certains éléments évoquent l'utilisation d'un bouton pour lancer le tri, avec des erreurs VBA et des tests de saisie destinés à verrouiller les entrées, sans viser une solution unique.

Bobot (l’IA à votre service)
  1. Bonjour,

    Un exemple de code

    Sub Tri_multicriteres()
      Dim DerLigA
      'pour la dernière ligne de la colonne A
        DerLigA = ActiveWorkbook.Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
      'RAZ Tri precedent
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
      '1er Critere: Designation
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("B10"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      'Deuxieme critere: Couleur
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("C10"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      'Troisieme critere: Longueur
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("D10"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      'Tri
        With ActiveWorkbook.Worksheets("Feuil1").Sort
            .SetRange Range("A9:H" & DerLigA)
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End Sub


    Bonne suite
    1
    1. bonjour, f894009

      merci de m'avoir répondu aussi vite j'avai oublié de préciser une chose, je voulais que le trie soit fait par un boutton, g essayé m je retrouvce une erreur

      Private Sub Comtriechute_Click()
      Dim DerLigA
      'pour la dernière ligne de la colonne A
      DerLigA = ActiveWorkbook.Worksheets("stock réel").Range("A" & Rows.Count).End(xlUp).Row
      'RAZ Tri precedent
      ActiveWorkbook.Worksheets("stock réel").Sort.SortFields.Clear
      '1er Critere: Designation
      ActiveWorkbook.Worksheets("stock réel").Sort.SortFields.Add Key:=Range("B10"), _
      SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      'Deuxieme critere: Couleur
      ActiveWorkbook.Worksheets("stock réel").Sort.SortFields.Add Key:=Range("C10"), _
      SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      'Troisieme critere: Longueur
      ActiveWorkbook.Worksheets("stock réel").Sort.SortFields.Add Key:=Range("D10"), _
      SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      'Tri
      With ActiveWorkbook.Worksheets("stock réel").Sort
      .SetRange Range("A9:H" & DerLigA)
      .Header = xlYes
      .MatchCase = False
      .Orientation = xlTopToBottom
      .SortMethod = xlPinYin
      .Apply
      End With
      End Sub

      je suis désoler je suis vraiment pas très bon en VBA
      0
    2. Re,

      Excel 2003 ou 2007_2010?

      A quelle ligne l'erreur?
      0
    3. Re

      Version Excel 2003

      Sub Trimulticritere_2003()
        Dim DerLigA
        'pour la dernière ligne de la colonne A
          DerLigA = ActiveWorkbook.Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
        'Tri suivant Designation, Couleur, Longueur
          Selection.Sort Key1:=Range("B10"), Order1:=xlAscending, Key2:=Range("C10" _
              ), Order2:=xlAscending, Key3:=Range("D10"), Order3:=xlAscending, Header _
              :=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom _
              , DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
              xlSortNormal
      
      End Sub
      


      Bonne suite
      0
    4. re,

      J'utilise exel 2000, et le code vba merde a la ligne 3 "DerLigA....."

      Private Sub Comtriechute_Click()
      Dim DerLigA
      'pour la dernière ligne de la colonne A
      DerLigA = ActiveWorkbook.Worksheets("stock reél").Range("A" & Rows.Count).End(xlUp).Row
      'Tri suivant Designation, Couleur, Longueur
      Selection.Sort Key1:=Range("B10"), Order1:=xlAscending, Key2:=Range("C10" _
      ), Order2:=xlAscending, Key3:=Range("D10"), Order3:=xlAscending, Header _
      :=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom _
      , DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
      xlSortNormal
      End Sub
      0
    5. Re,
      Je regarde la chose!
      0
  2. Re,

    Un peu mieux structure

    Private Sub Comtriechute_Click()
      Dim DerLigA
        With Worksheets("stock reél")
          'pour la dernière ligne de la colonne A
          DerLigA = .Range("A" & Rows.Count).End(xlUp).Row
          'Tri suivant Designation, Couleur, Longueur
          .Range("A9:H" & DerLigA).Sort Key1:=.Range("B10"), Order1:=xlAscending, Key2:=.Range("C10" _
            ), Order2:=xlAscending, Key3:=.Range("D10"), Order3:=xlAscending, Header _
            :=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom _
            , DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
            xlSortNormal
        End With
    End Sub
    0
    1. Re,

      c'est en scannant le code barre que sa devient "nom du profils;couleur du profil;longeur du profil"
      Cette info entre dans un control (textebox ou .......)?

      et je voudrais que quand le code barre est mauvais, un message dit "de rentrer ces données manuellement" comment savez vous que c'est mauvais? En principe un code barre est lu ou pas, mais pas lu a moitie. Par contre il peut y avoir des erreurs de lecture.
      0
      1. re,

        l'info rentre bien dans un text box quand je scanne le code barre
        Le code barre sera lu normalement, mais l'information peu etre éroné, enfete je veux bridé les entrées en disant qu'il y a que ce style d'information qui peu rentré donc tel profils et tel couleurs
        0
      2. Re,

        enfete je veux bridé les entrées en disant qu'il y a que ce style d'information qui peu rentré donc tel profils et tel couleurs

        Un exemple de tests pour valider votre entree:
        tester le nombre de ";" (3)
        prendre les caracteres qui correspondraient au profil tester par rapport a votre liste
        prendre les caracteres qui correspondraient a la couleur tester idem
        prendre les caracteres qui correspondraient a la longueur tester par rapport a un format
        s'il y en a un

        A+
        0
      3. il y a deja un test qui recherche le nombre de ";"
        mais il y a pas de test pour le nom des profils et la couleurs des profils et je ne sais pas comment faire pour réaliser un code test en vba
        0
      4. Re,
        Avez vous des listes de references pour les nom de profil et les couleurs??
        0
      5. re,
        oui j'ai deux liste dans la feuille Macro1 ou le nom des profils sont de A1 à A67 et les couleurs de B1 à B19, car quand je rajoute manuellement un profil je passe par un user form ou il y a deux combox par le nom et la couleur
        0
    2. Re,

      J'ai un peu modifie votre code. Sur l'UF BoiteEntree j'ai ajoute un bouton pour simuler une entree, vous l'enleverez.

      https://www.cjoint.com/?BEwm01EurRp

      Bonne suite
      0
      1. re,

        je vous remerci sa marche bien cependant qd je clique sur entré une chute sa m'envoi dircetement sur la feuille macro1 et je ne reste pas sur la 1er feuille stock réel pourquoi?
        0
      2. re c'est encore moi,

        le OK du code barre pour l'entrée de chute ne fonctionne plus
        sa fonctionne quand le code est faux "sa le refuse bien"
        mais ne fonctionne pas quand je rentre le bon code "je clique dans le vide"
        que faire?
        0
      3. Re,

        et je ne reste pas sur la 1er feuille stock réel pourquoi?

        UserForm BoiteEntree
        Ajoutez :

        Application.ScreenUpdating = False

        Apres

        Private Sub UserForm_Activate()

        =======================================

        Le OK du code barre pour l'entrée de chute ne fonctionne plus
        sa fonctionne quand le code est faux "sa le refuse bien"
        mais ne fonctionne pas quand je rentre le bon code "je clique dans le vide"
        que faire?


        L'entree vient d'ou ?????
        0
      4. re,

        Pour la feuille qui ne se fige pas:
        ce n'est pas sur le bouttons ok du code qui faut mettre sa car enfete il y ai deja apres je voi pas ou c'est userfrom BoiteEntree dans le VBA

        ===========================================
        L'entrée??? je ne comprend pas trop, mais je pence que tu voulais dire quel bouttons déconne???
        0
      5. Re,
        modif: supprime bouton Cmd_Test, ajoute Application.ScreenUpdating = False

        https://www.cjoint.com/?BEwoJLXTrX8

        L'entrée??? je ne comprend pas trop, mais je pence que tu voulais dire quel bouttons déconne???

        Vous saisissez le code manuellement ou c'est une entree Automatique????
        0