[RESOLU] Savoir si une colonne a été triée en VBA

richert90

XLDnaute Occasionnel
Bonjour

J'aimerais savoir en VBA, comment faire pour savoir si une colonne est triée

"if colonne1A est triée then
xxxx
else
xxxx
end if "

Merci d'avance
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Savoir si une colonne a été triée en VBA

Roland_M:
c'est plus long de rechercher s'il elle est triée que de la trier directement
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.
 

richert90

XLDnaute Occasionnel
Re : Savoir si une colonne a été triée en VBA

Rebonjour à tous,

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.

Merci d'avance
 

Pièces jointes

  • Tests.xlsm
    189.4 KB · Affichages: 47
  • Tests.xlsm
    189.4 KB · Affichages: 42
  • Tests.xlsm
    189.4 KB · Affichages: 53

richert90

XLDnaute Occasionnel
Re : Savoir si une colonne a été triée en VBA

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..
 

Dranreb

XLDnaute Barbatruc
Re : Savoir si une colonne a été triée en VBA

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
 

richert90

XLDnaute Occasionnel
Re : Savoir si une colonne a été triée en VBA

Bonjour,

Merci pour la réponse

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..

Il y a aucun moyen de contourner cela ?
 
G

Guest

Guest
Re : Savoir si une colonne a été triée en VBA

bonjours,

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?

A+
 

richert90

XLDnaute Occasionnel
Re : Savoir si une colonne a été triée en VBA

Re,

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.
 
Dernière édition:

richert90

XLDnaute Occasionnel
Re : Savoir si une colonne a été triée en VBA

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.

Merci
 
G

Guest

Guest
Re : Savoir si une colonne a été triée en VBA

Re,

Tu ne réponds pas à : Mais il me semble que ton souhait serait plutôt de figer le Graphique! Non?

Question posée dans mon précédent post.
A+
 

Discussions similaires

Réponses
2
Affichages
211
Réponses
13
Affichages
250
Réponses
5
Affichages
196

Membres actuellement en ligne

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia