Macro en quittant un onglet

Résolu/Fermé
fadmaam Messages postés 34 Date d'inscription mardi 5 mai 2015 Statut Membre Dernière intervention 3 novembre 2015 - 27 oct. 2015 à 15:15
fadmaam Messages postés 34 Date d'inscription mardi 5 mai 2015 Statut Membre Dernière intervention 3 novembre 2015 - 27 oct. 2015 à 17:06
Bonjour,

Je souhaiterais faire tourner une macro lorsque je quitte un onglet. Actuellement la macro tourne dès que je modifie une cellule et ça prend donc bcp de temps.

Voici le code que j'ai actuellement:


Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Row = 1 Then Exit Sub
Valeur = Target
If Application.Intersect(Columns("A:C"), Target) Is Nothing Then Exit Sub 'si le changement a lieu ailleurs que dans les colonnes A, B ou C, sort de la procédure
Range("A2:AZ500").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("C2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal

Set c = Columns("A:AZ").Find(Valeur, LookIn:=xlValues)
c.Select

End Sub


J'ai essayé avec la fonction "deactivate" (en gardant juste la partie "Range... -> normal") mais ça ne fonctionne pas. Je présume que c'est parce qu'il faut préciser dans quel onglet il faut sélectionner les données à trier mais je ne sais pas comment faire...

Merci d'avance pour votre aide...


Cordialement,
FadY
A voir également:

2 réponses

Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
27 oct. 2015 à 15:33
Bonjour,

Le code avec Deactivate devrait marcher mais effectivement, il faut alors préciser dans quel onglet on l'exécute. Donc je procéderais comme cela :

Private Sub Worksheet_Deactivate()

Dim Valeur As String

'Valeur = Target : il va falloir changer cette donnée car en quittant l'onglet, il est évident que la 'target' ne sera pas la bonne cellule.

'pour pallier à ce problème, je vous propose ce code :

Valeur = InputBox("Tapez le nom de la valeur à rechercher :")

If InputBox = "" Then
   MsgBox("Aucune saisie.")
   Exit Sub
End If

Sheets("le nom de votre feuille").Range("A2:AZ500").Select 
Selection.Sort Key1:=Sheets("le nom de votre feuille").Range("A2"), Order1:=xlAscending, Key2:=Sheets(le nom de votre feuille").Range("C2") _ 
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _ 
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _ 
:=xlSortNormal 

Set c = Sheets("le nom de votre feuille").Columns("A:AZ").Find(Valeur, LookIn:=xlValues) 
Sheets("le nom de votre feuille").c.Select 

End Sub 


Cordialement.
0
fadmaam Messages postés 34 Date d'inscription mardi 5 mai 2015 Statut Membre Dernière intervention 3 novembre 2015
27 oct. 2015 à 16:09
Bonjour Kuartz,

Merci pour votre réponse.

J'ai corrigé le code et voici ce que ça donne :

Private Sub Worksheet_Deactivate()
Sheets("Contract Portfolio").Range("A2:AZ250").Select
Selection.Sort Key1:=Sheets("Contract Portfolio").Range("A2"), Order1:=xlAscending, _
Key2:=Sheets("Contract Portfolio").Range("C2"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
End Sub


J'ai enlevé le reste car en fait ça ne sert plus à grand chose si on quitte l'onglet...

Par contre, j'ai un message d'erreur :"Select method of Range clas failed".
Désolé, je ne suis vraiment pas doué :-(


FadY
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > fadmaam Messages postés 34 Date d'inscription mardi 5 mai 2015 Statut Membre Dernière intervention 3 novembre 2015
27 oct. 2015 à 16:33
Excuse moi de t'avoir dérangé en te proposant quelque chose de simple

Blacklist
0
fadmaam Messages postés 34 Date d'inscription mardi 5 mai 2015 Statut Membre Dernière intervention 3 novembre 2015 > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
27 oct. 2015 à 17:06
Monsieur,

Je suis navré mais il n'y avait rien d'autre sur mon écran que la réponse de Kuartz lorsque j'ai répondu tout à l'heure. J'étais occupé à essayer sa solution et n'ai sans doute pas rafraichi la page avant de répondre.


FadY
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
Modifié par Kuartz le 27/10/2015 à 16:55
Bonjour michel_m,

J'espère que vous n'êtes pas en colère contre moi...

fadmaam, vous auriez dû prêter attention à la réponse de michel_m.

Ce qui plante sur le code, c'est la ligne :

Sheets("Contract Portfolio").Range("A2:AZ250").Select


Et pour cause, vous sélectionnez des cellules d'une feuille où vous n'êtes pas.

Le code modifié et fonctionnel :

Private Sub Worksheet_Deactivate()
Sheets("Contract Portfolio").Range("A2:AZ250").Sort Key1:=Sheets("Contract Portfolio").Range("A2"), Order1:=xlAscending, _
    Key2:=Sheets("Contract Portfolio").Range("C2"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, _
    MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
End Sub


Cordialement.
0
fadmaam Messages postés 34 Date d'inscription mardi 5 mai 2015 Statut Membre Dernière intervention 3 novembre 2015
27 oct. 2015 à 17:02
Merci !
Ca fonctionne nickel ;-)

Cordialement,
FadY
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 27/10/2015 à 16:34
Bonjour
SUPPRIME SUITE A ATTITUDE DEDAIGNEUSE DE FADMANN
Michel
0
fadmaam Messages postés 34 Date d'inscription mardi 5 mai 2015 Statut Membre Dernière intervention 3 novembre 2015
27 oct. 2015 à 17:00
???
0