Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Est-il possible d'utiliser les fonctions TRIER ou TRIERPAR avec VBA ?

  • Initiateur de la discussion Initiateur de la discussion danielco
  • Date de début Date de début
  • Mots-clés Mots-clés
    vba

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

danielco

XLDnaute Barbatruc
Bonjour,

La question est toute entière dans le titre. Est-il possible d'utiliser les fonctions TRIER ou TRIERPAR avec VBA ?

Merci d'avance.

Daniel
 
Solution
Bonjour à tous,

Attention ChatGPT hallucine, ces fonctions sont bien présentes via WorksheetFunction. Voir ci-joint un petit exemple :
NB : Il faut fournir le 3e argument pour SortBy (direction de tri) qui n'est pas optionnel comme dans la fonction.

VB:
Public Sub ExTri()
  ' generation des index de tri dans la feuille (statique)
  With Sheet1.Range("A2")
    Range(.Cells, .End(xlDown)).Clear
    .Formula2 = "=RANDARRAY(20,1,0,100,TRUE)"
    .SpillingToRange.Value = .SpillingToRange.Value
  End With
 
  Dim myData As Variant
  myData = Sheet1.Range("A2:B21").Value
 
  Dim colIdx As Variant
  ' utilisation de application.index car worksheetfunction.index leve erreur
  colIdx = Application.Index(myData, , 1)
 
  Dim colNames As Variant...
Non, c'est différent. On peut très bien utiliser les fonctions "formules" Excel TRIER (WorksheetFunction.Sort != Range.Sort)
A mon grand dépit, ceci est vrai uniquement sur les versions XL2019+ et 365. Versions qui supportent les "Tableaux Dynamiques".
Pour les versions plus anciennes seuls les algos VBA comme celle de Patrick sont utilisables.
 
A mon grand dépit, ceci est vrai uniquement sur les versions XL2019+ et 365. Versions qui supportent les "Tableaux Dynamiques".
Pour les versions plus anciennes seuls les algos VBA comme celle de Patrick sont utilisables.
Oui nous sommes bien d'accord. Tout dépend du public visé. J'écrivais 2021+ justement. Sinon bien entendu les fonctionnalités n'existent pas encore.

Mais bon en vba on oublie souvent les "fonctions" Excel de base justement et je trouvais la question intéressante. BsAlv est un grand utilisateur de ces techniques et souvent je suis surpris du peu de lignes nécessaires à une résolution via les appels de fonctions au lieu de les "coder soi-meme".
 
Bonjour le forum,
Attention ChatGPT hallucine, ces fonctions sont bien présentes via WorksheetFunction.
Bizarre quand même, nouvelle réponse de ChatGPT sur WorksheetFunction.Sort et WorksheetFunction.SortBy :
Dans Excel 2021, les fonctions WorksheetFunction.Sort et WorksheetFunction.SortBy existent comme fonctions de feuille (formules dynamiques), mais elles ne sont PAS disponibles via WorksheetFunction en VBA. C’est une limitation importante.
A+
 
Bonjour le forum,

Bizarre quand même, nouvelle réponse de ChatGPT sur WorksheetFunction.Sort et WorksheetFunction.SortBy :

A+
Si vous avez Excel 2021 ou plus récent, je vous invite à tester plutôt que de suivre aveuglément un outil qui ne peut pas tester justement. Etant donné que la documentation officielle de Microsoft sur WorksheetFunction.Sort n'existe meme pas (ou en tout cas est introuvable) on peut comprendre que ChatGPT soit perdu.
Pour rappel : https://help.openai.com/fr-fr/articles/8313428-does-chatgpt-tell-the-truth
 
Bizarre quand même, nouvelle réponse de ChatGPT sur WorksheetFunction.Sort et WorksheetFunction.SortBy
Règle d'or : Ne jamais se fier à une IA.
D'autant que d'autres IA formule d'autres réponses, à l'instar de Gemini :
 
le sortby en VBA, on l'écrit comment ?
voir PJ, 3ième essai ne fonctionne pas correctement
Salut Bart, pas compris ton approche avec des SORTBY imbriqués... ? Si tu veux trier sur des colonnes consécutives, pas besoin d'imbriquer :
Ex. En A1 tu as l'array :
A B 1
A A 2
B A 3
B A 4
B C 5
A D 6
A B 7

Tu peux la trier avec
Code:
=SORTBY(A1:C7;A1:A7;1;B1:B7;1;C1:C7;1)
Qui renvoit
A A 2
A B 1
A B 7
A D 6
B A 3
B A 4
B C 5

 
Bonjour.
Exemple avec ma Sub IndexerParFusions pour classer en ordre décroissant sur la 1ère colonne, puis, en cas d'égalité, croissant sur les deux autres :
VB:
Option Explicit
Sub Test()
   Dim TIdx() As Long, TDon(), TRésu(), L&, C&
   ReDim TDon(1 To 20, 1 To 3)
   For L = 1 To 20: For C = 1 To 3: TDon(L, C) = Int(10 * Rnd): Next C, L
   IndexerParFusions TIdx, TDon, -1, 2, 3
   ReDim TRésu(1 To 20, 1 To 3)
   For L = 1 To 20: For C = 1 To 3: TRésu(L, C) = TDon(TIdx(L), C): Next C, L
   [B2:D21].Value = TDon
   [F2:H21].Value = TRésu
   End Sub
 

Pièces jointes

OK, je vais l'essayer ce week-end.
Daniel
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
197
  • Question Question
Microsoft 365 Fonction si
Réponses
7
Affichages
146
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…