Problème avec l'objet range

Résolu/Fermé
Grangibs Messages postés 3 Date d'inscription jeudi 29 janvier 2015 Statut Membre Dernière intervention 1 février 2015 - Modifié par jordane45 le 29/01/2015 à 18:08
Grangibs Messages postés 3 Date d'inscription jeudi 29 janvier 2015 Statut Membre Dernière intervention 1 février 2015 - 1 févr. 2015 à 13:11
Bonjour,


Je crée une macro pour trier un tableau.

Quand j'écris ça :
Worksheets("Classements Clubs").Range("B4:AB13").Sort Key1:=Range("C4"), order1:=xlDescending

Pas de soucis, la macro s'exécute.
Par contre si j'écris ça :
Dim MaPlage As Range
Set MaPlage = Range("B4:AB13")
Worksheets("Classements Clubs").Range(MaPlage).Sort Key1:=Range("C4"), order1:=xlDescending

J'ai un message d'erreur : Erreur d'exécution 1004, erreur définie par l'application ou par l'objet.

Merci de votre aide car je sèche sur cette erreur

EDIT : Ajout des balises de code

4 réponses

jordane45 Messages postés 36864 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 janvier 2023 4 466
29 janv. 2015 à 18:11
Bonjour,

Tu mets une RANGE .. dans une RANGE .. normal qu'il n'aime pas....
donc soit tu modifies maplage en STRING
Dim MaPlage As String
Set MaPlage = "B4:AB13"

.... soit tu écris ça :
Worksheets("Classements Clubs").MaPlage.Sort Key1:=Range("C4"), order1:=xlDescending


ou encore mieux...
Dim MaFeuille as WorkSheet
Dim MaPlage as Range

set MaFeuille = Worksheets("Classements Clubs")
set MaPlage  = MaFeuille.Range("B4:AB13")
MaPlage.Sort Key1:=Range("C4"), order1:=xlDescending

0
Grangibs Messages postés 3 Date d'inscription jeudi 29 janvier 2015 Statut Membre Dernière intervention 1 février 2015
Modifié par Grangibs le 30/01/2015 à 11:45
Merci de votre réponse rapide et merci également pour les conseils pour améliorer la programmation.

ça marche très bien pour une plage fixe.

Désolé d'abuser de votre gentillesse mais je n'arrive pas à faire la même chose dans le cas où j'ai une plage définie par des variables.

Dim MaPlage As Range
Dim MaCellule As Range
Dim Ligne As Integer
Dim Colonne As Integer

Ligne = 2
Colonne = 2

Set MaPlage = Range(Cells(Ligne, Colonne), Cells(Ligne + 9, Colonne + 1))
Set MaCellule = ActiveSheet.Cells(Ligne, Colonne + 1)

Worksheets("Classements").MaPlage.Sort Key1:=MaCellule, Order1:=xlAscending


J'ai le message d'erreur 438 : Propriété ou méthode non géré par cet objet.

Si je fait :
Worksheets("Classements").Range("B2:C11").Sort Key1:=MaCellule, Order1:=xlAscending


la macro s'exécute normalement donc le problème vient de MaPlage et pas de MaCellule

Si je fait :
MaPlage.select


j'ai bien la plage souhaitée qui est sélectionnée donc MaPlage a l'air d'être bien initialisée.
0
eriiic Messages postés 24493 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 26 janvier 2023 7 155
1 févr. 2015 à 00:44
Bonjour,

Je dirais que dans maPlage tu as déjà le sheet de défini, le re-spécifier est superflu.
Trop pour tester, je te laisse le faire ;-)

eric
0
Grangibs Messages postés 3 Date d'inscription jeudi 29 janvier 2015 Statut Membre Dernière intervention 1 février 2015
1 févr. 2015 à 13:11
Bonjour,

Effectivement, en ajoutant la feuille lors de la définition de MaPlage et en mettant juste

MaPlage.Sort Key1:=MaCellule, Order1:=xlAscending

je n'ai plus de soucis.

Merci d'avoir pris le temps de me répondre.
0