[VBA]Erreur code lors d'un tri

Fermé
Skeo36 Messages postés 85 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 18 mai 2012 - 7 mai 2010 à 11:17
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 7 mai 2010 à 16:33
Bonjour!

Voila mon probleme: j'ai une plage de cellule dynamique à trier. Les colonnes vont de A à G mais le nombre de ligne est variable.
j'ai donc pondu ce code pour effectuer un tri:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim reception_end As Long
reception_end = Range("fourni").End(xlDown).Row
Set Target = Range("fourni:G" & reception_end)
Range("Target").Select
Selection.Sort Key1:=Range("C13"), Order1:=xlAscending, Key2:=Range("D13" _
), Order2:=xlAscending, Key3:=Range("E13"), Order3:=xlAscending, _
Key4:=Range("F13"), Order4:=xlAscending, Key5:=Range("G13"), Order5:=xlAscending, Header _
:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub

Le problème est que je fait fasse à une erreur dès que je modifie la moindre cellule de la plage

Auriez vous une idée?

Merci d'avance

A voir également:

1 réponse

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
Modifié par Polux31 le 7/05/2010 à 13:15
Bonjour,

Ici:
Set Target = Range("fourni:G" & reception_end) 
Range("Target").Select 


Target est déjà un objet passé par référence. C'est la plage active de la feuille.
Si tu as besoin d'une autre plage, il faut déclarer un autre objet Range.
Mais tu peux faire aussi comme ça, à condition que les clés soient dans cette plage.
Range("fourni:G" & reception_end).Sort Key1:=Range("C13"), Order1:=xlAscending, Key2:=Range("D13" _ 
), Order2:=xlAscending, Key3:=Range("E13"), Order3:=xlAscending, _ 
Key4:=Range("F13"), Order4:=xlAscending, Key5:=Range("G13"), Order5:=xlAscending, Header _ 
:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom 


;o)




«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
0
Skeo36 Messages postés 85 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 18 mai 2012 2
7 mai 2010 à 14:13
Merci de ta réponse. J'ai bien compris ce que tu voulais dire mais je voudrai savoir à quoi sert target dans ce cas? Ou alors j'ai mal compris... parce que si je remplace le code par celui-ci:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim reception_end As Long
reception_end = Range("fourni").End(xlDown).Row
Set Target = Range("fourni:G" & reception_end)
Range("Target").Select
Range("fourni:G" & reception_end).Sort Key1:=Range("C13"), Order1:=xlAscending, Key2:=Range("D13" _
), Order2:=xlAscending, Key3:=Range("E13"), Order3:=xlAscending, _
Key4:=Range("F13"), Order4:=xlAscending, Key5:=Range("G13"), Order5:=xlAscending, Header _
:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub

alors j'obtient l'erreur "argument nommé introuvable" que je n'est jamais rencontrer... Je ne suis pas sur de ce que cela implique est ce parce que la plage de cellule n'est pas bien déterminée je ne sais pas.... Et la partie en italique n'est elle pas superflue?
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
7 mai 2010 à 16:33
Pour savoir ce que représente Target dans Private Sub Worksheet_SelectionChange(ByVal Target As Range), met un msgbox après le Dim reception_end ...

MsgBox Target.Value
MsgBox Target.Address
MsgBox "Ligne: " & Target.Row & ", Colonne: " & Target.Column

Ensuite clique sur une cellule non vide de ta feuille ...

;o)
0