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 :

Trier des données sans que la feuille ne soit active


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Points : 127
    Points
    127
    Par défaut Trier des données sans que la feuille ne soit active
    Bonjour,

    j'ai programmé une fonction qui copie des données d'une feuille appelée "Classement" vers une feuille appelée "Classement2". Je souhaite trier les données contenues dans "Classement2" sans que cette feuille ne soit visible. Voici mon programme :

    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
    Public Sub trierClassementTE()
        'Modification : Récupère les données de la feuille "Classement",
        'Copie ces données dans "Classement2",
        'Puis trie ces données
     
        Dim derniereCellule As Range
        Dim plage As Range
     
        Set derniereCellule = Sheets("Classement").Range("A3").End(xlDown).Offset(0, 1)
        Sheets("Classement").Range("A3", derniereCellule).Copy
        Sheets("Classement2").Range("A2").PasteSpecial Paste:=xlPasteValues
     
        Sheets("Classement").Range("D3", derniereCellule.Offset(0, 2)).Copy
        Sheets("Classement2").Range("C2").PasteSpecial Paste:=xlPasteValues
     
        Set derniereCellule = Sheets("Classement2").Range("A2").End(xlDown).Offset(0, 2)
        Set plage = Sheets("Classement2").Range("A2", derniereCellule)
     
        plage.Sort Key1:=Range("B1"), Order1:=xlDescending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
    End Sub
    Lorsque je teste cette fonction en la lançant depuis la feuille "Classement2", tout se passe bien : ma fonction renvoie bien ce que je veux. Seulement, lorsque le lance cette fonction alors que la feuille active est une autre feuille que "Classement2", j'ai l'erreur :

    Erreur d'exécution '1004':

    Erreur définie par l'application ou par l'objet
    ce qui me pose problème étant donné que je souhaite faire tourner cette fonction sans que la feuille "Classement2" ne soit visible.

    Ma question est donc : est il possible de trier des données sans que le focus soit sur la feuille où on effectue le tris ?

    Je vous remercie.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2010
    Messages : 18
    Points : 20
    Points
    20
    Par défaut
    Oui ce que tu cherches à faire est tout à fait possible.
    Néanmoins cela requiert de coder différemment que si tu es dans une feuille active.
    Je suis confronté au même problème et je suis convaincu que l'utilisation de code qui reflète une action spécifique de l'utilisateur dans l'activesheet ne fonctionne pas sans activesheet.

    Je te conseille pour déboguer, de lancer ton code en pas à pas, par pression de F8 successives pour détecter ce qui ne passe pas. Et aussi de regarder dans la fenêtre locals les valeurs des variables et objets.

    Cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set derniereCellule = Sheets("Classement").Range("A3").End(xlDown).Offset(0, 1)
    ne doit pas passer je pense, car xlDown correspond à ctrl+fleche du bas. Ce serait valide dans une feuille activee mais pas dans une feuille non active.
    Du moins c'est ce que j'ai déduit de ma faible expérience car je débute en VBA.

    Je pense de ce fait soit repasser sur feuille active sinon tu pourrais créer une fonction émule de ce xldown. Ce n'est certainement pas la seule fonction qui pose ce genre de problème.

    Enfin, je ne suis pas sûr à 100% et quelqu'un de plus expérimenté pourra certainement en dire plus.

  3. #3
    Membre averti Avatar de delphine35
    Femme Profil pro
    Analyste BO
    Inscrit en
    Novembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste BO

    Informations forums :
    Inscription : Novembre 2009
    Messages : 265
    Points : 377
    Points
    377
    Par défaut
    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
    Public Sub trierClassementTE()
        'Modification : Récupère les données de la feuille "Classement",
        'Copie ces données dans "Classement2",
        'Puis trie ces données
     
        Dim derniereCellule As Range
        Dim plage As Range
     
        Set derniereCellule = Sheets("Classement").Range("A3").End(xlDown).Offset(0, 1)
        Sheets("Classement").Range("A3", derniereCellule).Copy
        Sheets("Classement2").Range("A2").PasteSpecial Paste:=xlPasteValues
     
        Sheets("Classement").Range("D3", derniereCellule.Offset(0, 2)).Copy
        Sheets("Classement2").Range("C2").PasteSpecial Paste:=xlPasteValues
     
        Set derniereCellule = Sheets("Classement2").Range("A2").End(xlDown).Offset(0, 2)
        Set plage = Sheets("Classement2").Range("A2", derniereCellule)
     
        plage.Sort Key1:=Range("B1"), Order1:=xlDescending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
    End Sub
    change la derniere ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        plage.Sort Key1:=Sheets("Classement2").Range("B1"), Order1:=xlDescending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 275
    Points : 358
    Points
    358
    Par défaut
    Bonjour,

    Tu essaies de trier ta zone "plage", mais tu lui donnes une mauvaise clé de tri...

    Il faut aussi y référencer la feuille

    Comme ceci par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim Fc as WorkSheet
    Set Fc = Sheets("Classement2")
    ...
    ...
    Set derniereCellule = Fc.Range("A2").End(xlDown).Offset(0, 2)
    Set plage = Fc.Range("A2", derniereCellule)
     
        plage.Sort Key1:=Fc.Range("B1"), Order1:=xlDescending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
    Bonne journée

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

Discussions similaires

  1. [XL-2003] Supprimer des données sans effacer les formules sur plusieurs feuilles
    Par graphikris dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 04/04/2013, 12h18
  2. trier et copier des données sur une autre feuille excel
    Par mirage37 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/07/2012, 18h08
  3. Trier des données par ordre d'importance
    Par popoliline dans le forum Access
    Réponses: 19
    Dernier message: 23/08/2006, 20h42
  4. Envoyer des données sans socket
    Par siaoly dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 30/05/2006, 13h04
  5. Trier des objets sans Comparable
    Par Shabata dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 13/03/2006, 14h55

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