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

Macros et VBA Excel Discussion :

Problème de tri en vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 107
    Par défaut Problème de tri en vba
    Bonjour,

    J'ai un problème de tri, en vba, avec une erreur 1004 récalcitrante.

    Le tri s'effectue sur une zone nommée, par exemple "zone_test". Le nombre de lignes de la zone, qui est définie par la formule DECALER, peut varier, mais démarre toujours à la ligne 9 (jamais avant). Le tri doit s'effectuer, non sur cette zone, mais sur les lignes de cette zone.

    J'ai donc débuté ma macro ainsi:

    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
    Application.ScreenUpdating = False
    Application.EnableEvents = False
     
    ActiveSheet.Unprotect
     
        Dim ws As Worksheet
        Dim lignes As Range
     
        Set ws = ThisWorkbook.Worksheets(1)
        Set lignes = ws.Range("zone_test").Rows
     
        With lignes
            .Sort Key1:=Range("AO1"), Key2:=Range("AQ1"), Key3:=Range("J1"), Header:=xlNo, _
            Order1:=xlDescending, Order2:=xlAscending, Order3:=xlAscending
        End With
    J'ai essayé de changer AO1 par AO, ainsi que AQ1 par AQ et J1 par J, mais cela ne change rien. J'ai toujours une erreur 1004.
    Et la feuille est bien déprotégée avant le tri.
    Quand à la zone nommée, elle définit le nombre de lignes où se trouvent des valeurs (par exemple, J9:j32). Dans ce cas, lignes devrait sélectionner les lignes 9 à 32.

    D'où vient l'erreur?

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 170
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Est-ce que la plage nommée "zone_test" englobe bien les références passées aux arguments Key1, Key2 et Key3 ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 107
    Par défaut
    La plage "zone_test" contient des données depuis la ligne 9 et en-dessous. Il n'y a jamais de ligne vide, elles se touchent toujours. Les libellés des colonnes, eux, sont en ligne 8. Lorsque j'ai utilisé l'enregistreur de macros, j'avais testé avec 3 lignes, il m'a mis dans les clés AO9:AO11. Mais comme cette plage va s'étendre, j'ai mis les premières lignes AO1 (ou AO, je crois que j'ai même essayé AO:AO), mais sans succès. Sachant que la plage "zone_test" va subir des tris, comment faire pour dénommer correctement les clés?

    Merci de votre intérêt pour mon problème!

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 170
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ce que je voulais dire, c'est que la référence aux colonnes à trier doivent absolument se trouver dans la périphérie de la plage nommée "zone_test" il est possible qu'avec la fonction DECALER les colonnes référencées soient hors du champ de cette plage.
    Il faudra donc peut-être ajuster la référence aux colonnes à trier
    Est-ce que Worksheets(1) est la bonne feuille ?

    A vérifier avec l'instruction Debug.Print lignes.Address(External:=True)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 107
    Par défaut
    Oui, Worksheets(1) est la bonne feuille. Je n'ai que deux feuilles dans le fichier, et la feuille 2 n'est utilisée que pour stocker des listes pour des menus déroulants.
    Il n'y a pas non plus de filtrage, toutes les cellules sont toujours affichées. Il n'y a que le tri qui bouscule les cellules.

    Que signifie "ajuster la référence aux colonnes à trier"?

    Une alternative serait de stocker dans une cellule la valeur du nombre de lignes de la plage "zone_test" (finalement, la fonction DECALER ne m'est utile que pour déterminer ça, le nombre de lignes contenues dans la plage). Car, en fin de compte, le tri s'effectuera sur un nombre de lignes, précisément défini par la fonction DECALER.

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 170
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Oui, Worksheets(1) est la bonne feuille. Je n'ai que deux feuilles dans le fichier, et la feuille 2 n'est utilisée que pour stocker des listes pour des menus déroulants.
    Même si l'on est certain de la feuille, ce n'est pas une bonne idée d'utiliser le numéro d'index d'une feuille sachant que l'index 1 correspond à la première feuille à gauche. Il suffirait d'un déplacement de feuille pour ne plus trier sur la bonne.

    Que signifie "ajuster la référence aux colonnes à trier"?
    Comme on utilise la fonction DECALER, il serait possible que les colonnes soient déplacées et donc il y a lieu d'adapter l'adresse des colonnes à trier

    Une alternative serait de stocker dans une cellule la valeur du nombre de lignes de la plage "zone_test" (finalement, la fonction DECALER ne m'est utile que pour déterminer ça, le nombre de lignes contenues dans la plage). Car, en fin de compte, le tri s'effectuera sur un nombre de lignes, précisément défini par la fonction DECALER.
    Pourquoi se compliquer la vie. En utilisant les tableaux structurés, qui existe depuis la version 2007, on trie les colonnes sans se préoccuper du nombre de lignes et sans devoir lui indiquer que le tri doit se faire sur la plage de données uniquement.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. [XL-2003] Rafraichissement de tri en vba
    Par dzeus dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 26/10/2009, 11h47
  2. Fonction Tri Excel VBA
    Par Nako_lito dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/08/2009, 16h15
  3. tri sql/vba dans formulaire ACCESS
    Par seb_thiery dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 13/08/2008, 13h30
  4. Tri en VBA
    Par riny8669 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/08/2007, 12h07
  5. [VBA-E] tri sur VBA pour Excel
    Par mariedrouin dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/05/2006, 13h32

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