Tri et actualisation auto d'un TCD

Bonjour,

Je me tourne vers vous, car malgré les nombreux posts traitant du sujet, et ayant l'impression d'avoir bien suivi les instructions, je n'y arrive pas. Voici la situation.

Mon but étant d'actualiser (l'ensemble) et de trier automatiquement (sur une colonne déterminée qui n'est pas la première) un TCD à l'ouverture de l'onglet. J'ai bien trouvé la méthode pour l'actualisation automatique (saisir :

Private Sub Worksheet_Activate()

ThisWorkbook.RefreshAll

End Sub

dans la source de la page, mais pour la fonction trier, avant même de chercher à l'automatiser, je n'y arrive pas "à la main". Le tri s'obstine à rester uniquement sur la première colonne, quoique je fasse... Je tourne en rond sur ce problème qui est sans doute très bête (une option "cachée"??) depuis 2 jours et je deviens fou.... Auriez-vous une idée sur mon erreur potentielle ?

Merci d'avance...

Bonjour

Ta demande n'est pas assez précise et le TCD dans ton fichier ne fonctionne pas. Il fait référence à une plage "tablo" qui n'existe pas.

Sur quelle colonne veux-tu trier ?

Vois aussi ce lien --> https://forum.excel-pratique.com/excel/erreur-de-tri-avec-macro-sur-tcd-t15274.html

A te relire

Dan

Merci Nad-Dan,

Après plusieurs recherches, j'ai compris que dans un TCD, seule la colonne placée en première position peut être triée.

Je vais donc créer un nouvel onglet en y collant les valeurs du TCD afin d'appliquer le tri que je souhaite. Ma demande a donc un peu évoluée :

Quel code "type" dois-je rentrer dans "visualiser le code" d'un onglet, afin que l'ensemble du tableau quelque soit sa taille se tri automatiquement par la colonne C puis D à chaque fois que l'on sélectionne cet onglet ? (pas de boutons)...

Merci par avance

Re,

Désolé mais je ne peux t'aider sans fichier. Les codes VBA avec les TCD ne sont pas toujours évident à réaliser.

Donne moi un fichier représentatif (avec données bidons si tu le veux) contenant un TCD qui fonctionne et dis moi quelles sont la ou les colonnes à trier.

A te relire

Dan

Bonjour, et merci de ton aide.

Comme dit dans mon dernier post, j'ai abandonné le fait de trier directement le TCD, je ferais un collage des données sur un autre onglet. Ci joint un fichier exemple, avec deux onglets différents. Les tableaux sont de taille différente.

Mon souhait précis est donc un code "général" que je pourrais coller aussi bien dans le premier onglet que le second sans rien modifier (voir n'importe quel autre avec un tableau de n'importe quelle taille qui commence en A1), qui sélectionne donc le tableau de A1 jusqu'à dernière colonne non vide- jusqu'à dernière ligne non vide, et qui tri cette sélection sur la colonne C puis D, ceci à chaque activation de l'onglet.

La sélection jusqu'à la dernière ligne vide me permet de laisser des informations "immobiles" lors du tri en sautant une ligne.....

Voilà, j'espère avoir été clair dans ma demande, j'ai entendu parlé d'une formule genre "DECALER($A$1;;;NBVAL($A:$A);NBVAL($1:$1))" qui peut-être pourrais peut-être permettre cette sélection "dynamique", mais je n'y connais rien et je ne sais pas du tout comment l'appliquer dans un code....

Merci par avance...

re,

On aurait pu utiliser le TCD s'il avait été construit par code mais comme tu abandonnes cette idée voici un code que tu peux utiliser et à placer dans les deux feuilles du fichier :

  • Clique droit sur l'onglet et choisis "visualiser le code"
  • place le code ci-dessous
Private Sub Worksheet_Activate()
ActiveSheet.UsedRange.Sort Key1:=Range("C2"), Order1:=xlAscending, Key2:=Range("D2") _
        , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom
End Sub

Selon ton fichier et surtout le nombre de feuilles à trier on peut alléger ou modifier.

Amicalement

Dan

Bonjour Dan,

Merci beaucoup, c'est presque parfait.

Cependant, 2 bugs subsistent :

  • Si je saisi d'autres données après une ligne vierge, ou même dessous le texte : "Cette ligne.....", et bien cette ligne s'intègre au tri lors de l'actualisation, ce que je ne souhaite pas....
  • Si je rajoute une colonne après une colonne vierge, cette colonne est également intégrée à la plage de tri, mais en plus, la ligne de titre s'intègre alors dans les données triées (je retrouve mes titres de colonne "classés").

J'ai également une question : Que modifier dans le code si le tableau commence en A5 par exemple?

Merci beaucoup...

Re,

remplace

ActiveSheet.UsedRange

par

ActiveSheet.Range("A5").currentregion

Avec :

Range("A5") si tu commences en ligne 5

Range("A1") si tu commences en ligne 1

Amicalement

Dan

PS : Si ton fil est terminé, n'oublie pas de cocher la case V de couleur verte pour cloturer le fil.

Merci beaucoup Dan !!!!

C'était presque ça, mon exemple n'était pas adapté. Je joins un nouveau fichier avec TCD. Le soucis, c'est que le tri me met les lignes "vides" de la sélection en premier, je ne sais pas quoi rajouter au code pour modifier cela.

De plus, je n'arrive pas à définir "dynamiquement" mon TCD, (toujours du type A1-dernière colonne non vide-dernière ligne non vide pour la plage). J'arrive à le faire initialement en déclarant un tableau avec : "DECALER('HEURES ENQUETEURS'!$A$1;;;NBVAL('HEURES ENQUETEURS'!$A:$A);NBVAL('HEURES ENQUETEURS'!$1:$1))", (dans les noms, je n'arrive pas à saisir "DECLARER" lors de la création du TCD), la sélection est bonne lors de la création du tableau, mais n'est pas du tout "dynamique".... Des idées ??

Merci d'avance...

91tri-avec-tcd.zip (46.82 Ko)
Rechercher des sujets similaires à "tri actualisation auto tcd"