[VBA]Erreur code lors d'un tri

Skeo36 Messages postés 85 Date d'inscription   Statut Membre Dernière intervention   -  
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   -
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

1 réponse

Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
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   Statut Membre Dernière intervention   2
 
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   Statut Membre Dernière intervention   1 204
 
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