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

OnlyOffice Discussion :

Macro OnlyOffice de tri par date


Sujet :

OnlyOffice

  1. #1
    Invité de passage
    Homme Profil pro
    employé technique
    Inscrit en
    Janvier 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : employé technique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2017
    Messages : 1
    Par défaut Macro OnlyOffice de tri par date
    Colonne A colonne B Colonne C Colonne D
    1 Champs1 Champs2 Champs3 Date
    2 A A1 1er 10/07/2025
    3 B B1 2eme 05/07/2025
    4 C C1 3eme 15/08/2025
    5 D D1 4eme 21/06/2025
    6 E E1 5eme 01/07/2025
    7 F F1 6eme 01/08/2025
    8 G G1 7eme 10/08/2025

    Cette macro que j'ai écrite ne trie pas correctement les données ci-dessus par date.
    Auriez-vous une solution? Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    (function()
    {
        let worksheet = Api.GetActiveSheet();
    
        let range = worksheet.GetRange("A:D");
        range.SetSort("D","xlDescending","","" ,"" ,"" , "xlYes", "xlSortColumns");
        
    })();

  2. #2
    Expert confirmé

    Femme Profil pro
    Spécialiste en marketing
    Inscrit en
    Juin 2021
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Lettonie

    Informations professionnelles :
    Activité : Spécialiste en marketing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2021
    Messages : 196
    Par défaut Macro OnlyOffice de tri par date
    Bonjour,

    La méthode utilisée dans votre macro (SetSort) ne gère pas correctement les dates.

    Voici une version corrigée adaptée pour trier vos données par date, en tenant compte des formats mm/dd/yyyy ou dd/mm/yyyy. Vous pouvez choisir l’ordre du tri (croissant ou décroissant) en modifiant la variable ascendingOrder (true = croissant, false = décroissant) :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    (function () {
      // The default date format is mm/dd/yyyy. The macro is capable of detecting dates in the dd/mm/yyyy format, but only if dates are input as such before running the macro.
      let hasHeaders = true; // Set true if the table has headers
    
    
      let worksheet = Api.GetActiveSheet();
      let range = worksheet.GetUsedRange();
      let data = range.GetValue();
      let ascendingOrder = true // Set false for sorting id descending order
    
    
      let headers;
    
    
      if (hasHeaders) {
        headers = data[0];
        data.shift();
      }
    
    
      let firstRowIndex = range.GetCells().Row;
      let firstColIndex = range.GetCells().Col;
    
    
      let dateIndex = -1;
    
    
      for (let i = 0; i < data.length; i++) {
        for (let j = 0; j < data[0].length; j++) {
          let cell = worksheet.GetCells(firstRowIndex + i, firstColIndex + j);
          let format = cell.GetNumberFormat();
          if (format == "mm/dd/yyyy" || format == "dd/mm/yyyy") {
            dateIndex = j;
            break;
          }
        }
        if (dateIndex !== -1) break;
      }
    
    
      //Sorting the data
      data.sort(function (a, b) {
        let dateA = new Date(a[dateIndex]);
        let dateB = new Date(b[dateIndex]);
        if (ascendingOrder) {
          return dateA - dateB;
        } else {
          return dateB - dateA
        }
        
      });
    
    
      if (hasHeaders) {
        data.unshift(headers);
      }
    
    
      range.SetValue(data);
    })();
    Citation Envoyé par ab269 Voir le message
    Colonne A colonne B Colonne C Colonne D
    1 Champs1 Champs2 Champs3 Date
    2 A A1 1er 10/07/2025
    3 B B1 2eme 05/07/2025
    4 C C1 3eme 15/08/2025
    5 D D1 4eme 21/06/2025
    6 E E1 5eme 01/07/2025
    7 F F1 6eme 01/08/2025
    8 G G1 7eme 10/08/2025

    Cette macro que j'ai écrite ne trie pas correctement les données ci-dessus par date.
    Auriez-vous une solution? Merci.

    (function()
    {
    let worksheet = Api.GetActiveSheet();

    let range = worksheet.GetRange("A");
    range.SetSort("D","xlDescending","","" ,"" ,"" , "xlYes", "xlSortColumns");

    })();

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

Discussions similaires

  1. [SQL-VBA]tri par date dans access
    Par Mickey_Mouse dans le forum VBA Access
    Réponses: 5
    Dernier message: 06/02/2007, 09h49
  2. Optimisation d'un tri par date
    Par padawa dans le forum Requêtes
    Réponses: 7
    Dernier message: 12/05/2006, 15h48
  3. requete : tri par date + groupement
    Par cbe dans le forum Requêtes
    Réponses: 8
    Dernier message: 08/01/2006, 19h30
  4. tri par date
    Par Digiduck dans le forum Requêtes
    Réponses: 5
    Dernier message: 06/06/2005, 21h51
  5. [ XML ][ XSL ] tri par date
    Par zozolh2 dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/08/2004, 10h19

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