Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tri des colonnes

    16 avril 2021 à 9:52:43

    Bonjour, 

    J'ai ma macro VBA qui me donne un résultat et j'aimerai que ça me tri ma colonne (A) du TAG avec le moins de caractère jusqu'au TAG avec le plus.

    Voici mon tableau et ma macro de base :

    J'ai réussi à faire le tri en mettant une formule dans la colonne (K) mais je souhaite que ça me le fasse directement dans ma macro VBA pour ne pas avoir de colonne en plus (K). Là, ma colonne (A) c'est ce que je veux mais je veux pas avoir ma colonne K et je veux que ça me tri directement avec la macro VBA. J'espère que je suis clair.

    Comment faire ?

    Cordialement,

    • Partager sur Facebook
    • Partager sur Twitter
      16 avril 2021 à 10:46:36

      Je doute que ce soit faisable avec la fonction de tri directement. et qu'il faille le faire "à l'ancienne" avec une fonction de tri qui manipulerait les lignes  (les déplacer) selon ton critère 

      ou alors une fois ton tri effectué avec la colonne K, supprimer cette colonne K du tableau (la colonne K tu peux la créer, faire le filtre dessus et la supprimer dans ton code vba)

      • Partager sur Facebook
      • Partager sur Twitter
        16 avril 2021 à 13:14:39

        Ah ba oui pk pas la créer et la supprimer après comment je fais ?
        • Partager sur Facebook
        • Partager sur Twitter
          16 avril 2021 à 13:19:25

          la créé, tu l' a déjà fait non ? 

          la suppprimer tu sélectionnes la colonne et tu fais un delete dessus

          (tu peux lancer un enregistrement de macro pour les 2 phases et voir comment excel code ça)

          • Partager sur Facebook
          • Partager sur Twitter
            16 avril 2021 à 14:22:11

            Non la créé je ne l'ai pas encore fait dans ma macro car je l'ai fait à la main.

            Je vois pas trop comment faire je vais essayer.

            Merci de ton aide.

            • Partager sur Facebook
            • Partager sur Twitter
              16 avril 2021 à 14:48:15

              en fait, tu as la formule dans le code que tu nous a mis;

              en gros (sans mettre tout le code)

              sheets("nom_feuille").range("k2").formulaR1C1="=LEN(A2)"

              ensuite recopier, étendre la formule sur toutes les lignes du tableau

              demander le filtrage sur la colonne k selon l'ordre croissant,

              sélectionner la colonne k, effacer son contenu

              Note: tu peux faire ces manipulations en ayant lancer l'enregistrement de macro (menu développeur, zone code > enregistrer une macro), stopper l'enregistrement à la fin des manipulations 

              Edit: ton code fait ça en fait, je viens de regarder sauf qu'il le fait en insérant la colonne avant la colonne A puis la supprime. Surement élargir la sélection des colonnes au niveau du sort et passé header en xlYes aussi

              -
              Edité par umfred 16 avril 2021 à 15:02:56

              • Partager sur Facebook
              • Partager sur Twitter
                16 avril 2021 à 15:38:30

                Ok je vois merci. Juste je met cette formule a quel endroit de mon code : sheets("nom_feuille").range("k2").formulaR1C1="=LEN(A2)"

                • Partager sur Facebook
                • Partager sur Twitter
                  16 avril 2021 à 15:50:28

                  Je vais me répéter: le code que tu nous a montré (trier())fait déjà l'opération de tri; donc tu ne dois modifier que la portée du tri de [A:C] à [A:K] (et changer Header:=xlNo en Header:=XlYes si tu as des entêtes à tes colonnes)

                  Dim t As Long
                  t = Cells(Rows.Count, 1).End(xlUp).Row
                  Columns(1).Insert shift:=xlToRight
                  Range("A1").Resize(t).FormulaR1C1 = "=LEN(RC[1])"
                  Range("A:K").Resize(t).Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlNo 'mettre xlYes si entêtes
                  Columns(1).EntireColumn.Delete

                  -
                  Edité par umfred 16 avril 2021 à 15:50:50

                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 avril 2021 à 8:16:18

                    Oui ça j'ai compris mais le soucis c'est que ma colonne K n'est pas créé à ce moment là.

                    Je l'ai créé à la main après le résultat. Le top serait de pouvoir créer cette colonne trier les TAG puis supprimer la colonne K.

                    Je n'ai pas trop d'idée...

                    Cordialement,

                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 avril 2021 à 15:10:31

                      Tes TAG c'est quelle colonne ?

                      Si c'est la A, je le répète encore, ton code le fait déjà, sauf qu'il insère l'équivalent de ta colonne K avant la colonne A (ligne 3 du code que j'ai remis, c'est l'insertion de la colonne, ligne 4 la formule qui calcule la longueur) (donc les colonnes sont décalées vers la droite A devient B, B devient C, etc); ensuite on fait le tri (ligne 5: tri la nouvelle colonne A dans l'ordre ascendant, sans entête) et enfin on supprime cette colonne A (ligne6) donc on redécale vers la gauche les colonnes pour retrouver l'ordre initiale (B redevient A, C redevient B, etc)

                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 avril 2021 à 15:52:26

                        C'est la colonne A oui.

                        Ba dans ce cas je comprend pas car ça ne me donne pas ça dutout.

                        Mes TAG sont toujours dans le mauvais ordre.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          19 avril 2021 à 16:04:50

                          dans la capture plus haut, ils sont bien classés dans l'ordre du petit nombre de lettres du tag vers le plus grand (ça ne tiens pas compte de l'ordre alphabétique de ceux-ci, juste de leur longueur)

                          Après je l'ai mentionné aussi, dans ton code, le tri n'affecte que les colonnes A à C (donc initialement sur les colonnes A à B; pas sûr que les autres colonnes suivent), c'est pour que dans mon code (ligne 5) je fais l'opération de tri sur range("A:K")

                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 avril 2021 à 14:39:28

                            Oui car ma capture était un exemple. 

                            Enfait je pense que la requête pour le tri est bonne mais il me faut la requête qui créé la colonne K puis fait dans la colonne A le plus petit au plus grand et ensuite supprime la colonne K. Je sais pas si je suis clair mais je n'arrive pas à faire cette requête.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              20 avril 2021 à 16:16:22

                              Je vais redire une énième fois que c'est ce que fait le code au dessus mais en le faisant dans une colonne insérée puis supprimée avant la colonne A (celle que tu appelles colonne K).

                              Dis plutôt ce que cette partie de macro  fait ou ne fait pas (ou mal) par rapport à ce que tu attends. Est-ce que à ce moment là, c'est bien ta feuille qui est active ? Sinon pour être sûr de traiter cette feuille, il faut précéder tous les ranges par le nom de ta feuille:

                              Sub test()
                                  Dim t As Long
                                  Dim ws as Worksheet
                                  Set ws=thisWorkbook.Sheets("nom de la feuille")
                                  t = ws.Cells(Rows.Count, 1).End(xlUp).Row
                                  ws.Columns(1).Insert shift:=xlToRight
                                  ws.Range("A1").Resize(t).FormulaR1C1 = "=LEN(RC[1])"
                                  ws.Range("A:K").Resize(t).Sort key1:=ws.Range("A1"), order1:=xlAscending, Header:=xlNo 'mettre xlYes si entêtes
                                  ws.Columns(1).EntireColumn.Delete
                              End Sub


                               

                              • Partager sur Facebook
                              • Partager sur Twitter
                                21 avril 2021 à 11:21:38

                                Oui mais ducout je n'y arrive pas...

                                Voici ce que cette requête me met lorsque je met débogage.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  21 avril 2021 à 12:29:01

                                  euh oui "nom de la feuille" est à remplacer par le nom de ta feuille (ton onglet); ça me semblait évident donc je ne l'ai pas préciser.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    21 avril 2021 à 14:17:17

                                    D'accord pas de soucis merci. Et je vois où le nom de ma feuille ? Car pour moi c'est "Famille équipements" mais j'ai quand même le message d'erreur.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      21 avril 2021 à 16:08:42

                                      euh oui, normal en fait Activesheet.Name ça désigne le nom de la feuille active, moi dans mon code, j'ai mis Set ws=thisWorkbook.Sheets("Famille équipements") (j'avais lu trop rapidement et donc pas vu que ce n'était pas le même code que le mien, j'avais juste tilté sur le nom de la feuille; mais avec le message d'erreur je m'en serai rendu compte je pense)

                                      Si c'est la feuille active, tu peux aussi mettre Set ws=ActiveSheet (ou remplacer les ws par ActiveSheet)

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        22 avril 2021 à 9:37:21

                                        Ca à marcher mais les colonnes ne sont toujours pas classé dans l'ordre du plus petit au plus grand et c'est mélangé 
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          22 avril 2021 à 12:12:02

                                          si tu lances la macro en pas à pas (F8 dans le VBA) pour suivre ce qu'il se passe, est-ce que tu vois le tri se faire ?
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            22 avril 2021 à 13:13:48

                                            Non je crois pas ca passe 1 fois dessus et ca continu
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              22 avril 2021 à 13:18:49

                                              ça passe une fois pour faire le tri en principe, il faut regarder côte à côte le code et la feuille excel pour voir l'effet du code sur la feuille.

                                              dans le pire des cas, envoie moi un lien pour télécharger ton fichier si tu veux que j'y jette une oeil.

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                22 avril 2021 à 15:36:17

                                                Oui au pire je t'envoie par mail ? 

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  22 avril 2021 à 16:06:33

                                                  par messagerie privé ou ici, via un lien de type wetransfert ou dropbox ou de ce type là
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    10 mai 2021 à 10:04:23

                                                    Mon ordinateur bloque les accès à ce type de lien
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      10 mai 2021 à 17:52:07

                                                      Au cas où tu n'aurais pas vu, j'ai répondu à ton mp.
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter

                                                      Tri des colonnes

                                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                      • Editeur
                                                      • Markdown