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 :

erreur sur un range [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de zandru
    Homme Profil pro
    Ingénieur conception mécanique
    Inscrit en
    Mars 2008
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 507
    Points : 551
    Points
    551
    Par défaut erreur sur un range
    Bonjour,

    j'ai une erreur sur mon code :

    "la methode select de la classe range a échoué"

    sur la première ligne du code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    client.Range("A3:L" & ligneclient).Select
    Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    et je ne comprend pas pourquoi

    client est une feuille xls et ligneclient contient 78.
    A lire :Les Règles

  2. #2
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour,

    dans ton code pas besoin de select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    client.Range("A3:L" & ligneclient).Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    client est une feuille xls
    client est le codename de la feuille c'est bien ça ? (nom de la feuille dans le projet)

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 249
    Points
    34 249
    Par défaut
    salut,
    peut-on avoir les lignes juste au dessus (attribution de la variable client) ?

    voir si fusionner les lignes ne fait pas sauter l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    client.Range("A3:L" & ligneclient).Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour tous,
    Ca serait pas plutôt..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("client").Range("A3:L" & ligneclient).....
    Voir aussi si pas d'erreur dans la transcription du nom de la feuille, l'erreur la plus fréquente c'est un espace "invisible".
    A+

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    "la methode select de la classe range a échoué"
    Tu ne dis pas si Client est le nom de la feuille ou l'instance de la feuille.
    Dans le premier cas ce sera
    Sheets("client").Range("Gnagna... 'dixit l'homme des bois
    et dans le second client devra être déclaré "as worksheet", instancié "set client = Worksheets("nomde la feuille") et utilisé tel que tu l'as fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    client.Range("Gnagna...'dixit les autres
    Bonne journée

  6. #6
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonjour à tous,

    La suggestion d’aalex_38 me paraît la meilleure approche. En effet les Select sont une source de ralentissement : à la main, on est obligé de sélectionner un objet (classeur, feuille, cellue, …) pour interagir avec lui. Mais il n’y a aucune raison de le faire en VBA si une méthode peut être appliquée directement ou s’il s’agit de modifier une propriété.

    En ce qui concerne ton plantage, es-tu sûr que "Client" est la feuille active au moment où l’instruction doit être exécutée ? Outre ralentir les traitements, les Select (et Activate) sont une fréquente source de bugs, liée au fait que Select plante si l’objet n’est pas au premier plan ;-(
    Michel Gaboly
    Développeur Excel et VBA


    Pas de question technique par MP, je n’y répondrai pas, utilisez le forum - Merci
    Pensez à ajouter le tag

  7. #7
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour à tous,

    Effectivement je viens de faire le test ci-dessous, et j'ai le même message si le classeur n'est pas actif, s'il est actif ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub testx()
    Dim client As Worksheet, LigneClient As Long
     
    Set client = ThisWorkbook.Worksheets("client")
    LigneClient = 78
     
    client.Range("A3:L" & LigneClient).Select ' => fonctionne seulement si le classeur est actif
    client.Range("A3:L" & LigneClient).Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    ' MsgBox Err.Number & Err.Description
     
    End Sub
    edit : c'est aussi un plantage sur la ligne de tri, au début j'ai essayé, ThisWorkbook.Activate mais il y a aussi un problème si on est pas sur la feuille active

    edit2 : au final un code qui semble fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub Tri_Client()
    Dim client As Worksheet, LigneClient As Long
     
    LigneClient = 78
    Set client = ThisWorkbook.Worksheets("client")
    client.Activate
    client.Range("A3:L" & LigneClient).Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
     
    End Sub

  8. #8
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 239
    Points : 307
    Points
    307
    Par défaut pb de select
    A mon avis , si tu veux utiliser le select , fait d'abord un client.activate pour selectionner le fichier actif.

    J'ai aussi 2 autres pistes .

    Regardes sur la zone A3:L78 , si il y a des cellules fusionnées , ça fait planter le tri.

    Regardes aussi si le classeur est partagé. J'ai rencontré le cas , ça empêche le tri ?

  9. #9
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    @ aalex_38

    Il n’est absolument pas nécessaire que le classeur soit actif. Toutefois, pour que cela marche si la feuille à trier n’est pas la feuille active du classeur actif, il faut modifier 1 des arguments de Sort.

    En effet, Range fait référence par défaut à la feuille active. par conséquent Key1:=Range("A3") n’est valable que si la feuille à trier est active. Il faut donc utiliser Key1:=client.Range("A3"), ce qui donne à partir de ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub testx()
    Dim client As Worksheet, LigneClient As Long
       ' ThisWorkbook.Activate
        LigneClient = 78
        Set client = ThisWorkbook.Worksheets("client")
        client.Range("A3:L" & LigneClient).Sort Key1:=client.Range("A3"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    End Sub
    @ codefacile

    Il NE FAUT PAS utiliser le Select. Ce n’est qu’une source de ralentissements et de bugs potentiels !
    Michel Gaboly
    Développeur Excel et VBA


    Pas de question technique par MP, je n’y répondrai pas, utilisez le forum - Merci
    Pensez à ajouter le tag

  10. #10
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Merci Bigalo, en effet j'évite souvent les activate et toujours les select (sauf cas exceptionnels) dans le code, eventuellement en utilisant des with.
    Avec le code donné ça ne m'a pas sauté aux yeux, merci pour ces précisions, bonne journée

  11. #11
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    De rien aalex_38.

    Bonne journée également !
    Michel Gaboly
    Développeur Excel et VBA


    Pas de question technique par MP, je n’y répondrai pas, utilisez le forum - Merci
    Pensez à ajouter le tag

  12. #12
    Membre confirmé Avatar de zandru
    Homme Profil pro
    Ingénieur conception mécanique
    Inscrit en
    Mars 2008
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 507
    Points : 551
    Points
    551
    Par défaut
    Merci à tous !

    effectivement le problème ( les problèmes en fait ) venait d'une part du select inutile, et surtout du fait que la feuille active n'était pas obligatoirement Client.

    Ce qui fait que le Range("A3") ne faisait pas toujours partie de la zone à ranger.

    ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    client.Range("A3:L" & ligneclient).Sort Key1:=client.Range("A3"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    Avec client l'instance de la feuille.

    Merci encore
    A lire :Les Règles

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

Discussions similaires

  1. Erreur sur écriture dans Range.Text
    Par Sclarckone dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/08/2011, 08h23
  2. [XL-2003] Erreur sur la classe Range
    Par PPN83 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/12/2010, 23h26
  3. Réponses: 8
    Dernier message: 25/01/2008, 11h48
  4. erreur 1004 sur un range
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/11/2007, 16h35
  5. Erreur sur le TNSListener après installation de 9iAS
    Par Patmane dans le forum Installation
    Réponses: 4
    Dernier message: 04/02/2004, 11h16

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