Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Tout à fait d'accord, mais l'application peut être telle que l'usager terminal pourrait souhaiter conserver un ordre qu'il avait demandé tout en demandant une opération qui en exige un autre. C'est pourquoi j'ai proposé l'indexation, qui ne détruit pas l'ordre des données tout en permettant quand même d'y accéder selon un certain ordre de tri.
Bon je vais essayer d'être plus clair dans mes explications et joindre un fichier exemple.
Je veux, lorsqu'on clique sur un onglet "alpha" , trier une colonne d'un tableau pour que sur l’onglet "alpha" le graphique soit modifié. Enfin lorsque ce tri a été effectué, je veux que l'on soit figé sur l'onglet "alpha".
C'est pour cela qu'au départ je cherchais un code pour savoir si la colonne était triée......
Je pense avoir trouvé quelque chose de plus simple. Si vous voulez bien voir si c'est pas mal.
En fait ma question c'est plus de savoir comment faire pour revenir sur la feuille voulue en évitant le code:
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
compteur = 0
If Sh.Name = "graphs" Then
compteur = compteur + 1
Call Macro1 'Dans Module1, macro pour trier les BPUs
'Une fois trié: je veux qu'on retourne sur la feuille "graphs":
If compteur > 0 Then 'Si on est déjà passé par le tri des BPUs:
Sheets(2).Select
Exit Sub
End If
End If
End Sub
Car ici à la fin j'écris "sheets(2).select", je reviens sur la feuille 2 mais la feuille 2 s'apelle "graphs" donc ca va relancer la procédure ci dessus etc etc...
Je sais pas comment faire pour qu'une fois la colonne triée, je puisse revenir sur la feuille 2 sans repasser par cette procédure..
Bonjour.
Alors supprimez ce sheets(2).Select tout simplement.
Remarque: dans Macro1 je remplacerais ActiveWorkbook.Worksheets("database") par Feuil1. Enfin en vrai, je renommerais plutôt Feuil1 en FDB
Le souci si je supprime "sheets(2).select" c'est que je me retrouverai sur la feuille 1 au final et non la feuille 2!
Parce que j'aurai appelée la procédure du module1 qui va trié une colonne dans le tableau de l'onglet 1.
Donc en fait une fois que l'utilisateur va cliquer sur la feuille 2 pou voir un graphique il va se retrouver sur l'onglet 1, ça me aprait pas très pratique..
Pas beaucoup plus clair, m'enfin, avec ce que je comprends, il faut sortir ta variable déclaration de ta variable 'compteur' pour la mettre en tête de module et modifier un peu la macro évènementielle elle même.
Code:
Dim compteur As Integer
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "graphs" Then
'Si la plage Source n'a pas été triée on appelle la macro et on incremente le compterur sinon on ne fait rien
If compteur = 0 Then Call Macro1 'Dans Module1, macro pour trier les BPUs
compteur = compteur + 1
End If
End Sub
Cette méthode a le désavantage, qu'une fois le classeur fermé et réouvert, le compteur se retrouvera à 0
Pour remedier à cela si necessaire: incrementer une cellule dans une feuille cachée et faire référence à celle-ci en lieu et place du compteur.
Mais il me semble que ton souhait serait plutôt de figer le Graphique! Non?
Dranreb, en effet en réalité, ma macro 1 appelle elle même une procédure permettant de compter le nombre de lignes dans le tableau et du coup je fais un sheets(1).select.. d'où l'activation de cette feuille.
Code:
Sub trier_bpu()
Call nb_lignes
'On trie les bpuS:
ActiveWorkbook.Worksheets(1).AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets(1).AutoFilter.Sort.SortFields.Add Key:=Range("A1:A" & I), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(1).AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Code:
Sub nb_lignes()
Sheets(1).Select
I = Sheets(1).Range("A1").End(xlDown).Row
End Sub
Du coup en enlevant juste le sheets(1).select de la procedure nb_lignes, ca devrait fonctionner.
Du coup hasco , ta méthode avec le compteur est celle que je pensais au départ. Je vais la "mixer" avec le fait que j'enlève le sheets(1).select ce qui provoque une genre de boucle infinie.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD