[VBA] Excel - Boutons macro commande

Excel - Boutons macro commande [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 15-07-2008 à 11:04:15    

bonjour a tous
 
Je débute aujourd'hui le VBA. Je dois reprendre le travail non achevé d'un stagiaire.
Ayant quelques notions de fortran et de C, et ayant de plus feuilleté un bouquin sur le VBA, je comprends les bases.
 
Cepandant j'ai une question.
 
J'ai un bouton de tri dont voici le code :
 
Application.Goto Reference:="zone_a_trier_contrat"
    Selection.Sort Key1:=Range("A3" ), Order1:=xlAscending, Header:=xlNo, _
                                                          OrderCustom:=1,MatchCase:=False,Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
        Range("A1" ).Select
 
Comme vous pouvez le constater, en "cliquant" sur le bouton intitulé "tri" (ce bouton est placé ds la case A1, mais bref, cela n'a pas d'importance), la colonne A est trié par ordre alphabétique croissant, a partir de la case A3.
Ce que j'aimerais faire, c'est qu'en recliquant sur le bouton, la colonne se trie par ordre alphabétique décroissant, mais je ne vois pas trop comment faire.
 
Je me doute bien qu'il faudra quelque part changer le "Ascending" en "Descending", mais apres...
Je pourrai bien sur créer un nouveau bouton qui fasse directement le tri par ordre décroissant, mais c'est pas tres pratique et plutot encombrant. Je souhaite donc faire 2 fonctions en 1 seul bouton.
 
Avez vous des suggestions, par avance merci

Reply

Marsh Posté le 15-07-2008 à 11:04:15   

Reply

Marsh Posté le 15-07-2008 à 11:19:22    

Bonjour
 
Voici un exemple :
 
Public sens
Sub Macro1()
Select Case sens
    Case xlAscending
    Selection.Sort Key1:=Range("A6" ), Order1:=xlDescending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
        sens = xlDescending
    Case xlDescending
    Selection.Sort Key1:=Range("A6" ), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlAscending
        sens = xlAscending
    Case Else
    Selection.Sort Key1:=Range("A6" ), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlAscending
        sens = xlAscending
    End Select
End Sub

Reply

Marsh Posté le 15-07-2008 à 11:21:03    

Salut,


Option Explicit
 
Dim bSens As Boolean
 
Sub Tst()
 
    Select Case bSens
        Case True
            .......Sort Key1:=Range("A3" ), Order1:=xlAscending, ....
        Case False
            ......Sort Key1:=Range("A3" ), Order1:=xlDescending, ....
    End Select
 
    bSens = Not bSens
End Sub

Reply

Marsh Posté le 15-07-2008 à 13:07:26    

Merci a vous 2 pour vos propositions.
 

kiki29 a écrit :

Salut,


Option Explicit
 
Dim bSens As Boolean
 
Sub Tst()
 
    Select Case bSens
        Case True
            .......Sort Key1:=Range("A3" ), Order1:=xlAscending, ....
        Case False
            ......Sort Key1:=Range("A3" ), Order1:=xlDescending, ....
    End Select
 
    bSens = Not bSens
End Sub



 
 
Concernant celle çi, il n'y a pas d'erreur de compilation, tout semble etre correct, sauf que seul le tri par ordre décroissant (descending) semble  fonctionner. Après ré-appuie sur le bouton, rien ne se passe. C'est comme si bsens avait tout le tps la même valeur.
 

Reply

Marsh Posté le 15-07-2008 à 13:50:18    

en fait une fois que l'on a appuyé sur le bouton de tri, on sort du programme.
Si l'on ré appuie sur le bouton, on y ré entre, en chargeant la valeur de bSens par défault (ici, false, puisque le tri s'effectue seuelement par ordre descendant). Au lieu de charger la valeur bSens = not bSens
 
Je pense que c'est d'ici que vient le pb: l'instruction " bSens = not bSens " est donc ici inutile, puisque l'ordinateur ne la garde pas en mémoire une fois la sortie du programme.

Reply

Marsh Posté le 15-07-2008 à 13:58:50    

c'est tout à fait normal puisque la variable bsens est déclarée Dim et nom Public
 
Dim met les valeurs à 0 à la fin de la macro
Public conserve les valeurs

Reply

Marsh Posté le 15-07-2008 à 14:23:23    

pyrof a écrit :

c'est tout à fait normal puisque la variable bsens est déclarée Dim et nom Public

 


 
Code :
  1. Public Sub test()
  2. Public sens As Boolean
  3.    
  4.     Select Case sens
  5. ...
 

apres avoir modifié le dim en public, j'obtiens une erreur de compilation, qui pointe dès la deuxieme ligne : "
Public sens As Boolean", le mot public étant surligné en gras, ce mot semble donc être la source d'erreur.

 

edit: voila le message d'erreur exact:
"erreur de compilation
attribut incorrect dans une procedure Sub ou Function" ; le mot public étant surligné


Message édité par paul30 le 15-07-2008 à 14:25:55
Reply

Marsh Posté le 15-07-2008 à 14:43:31    

pyrof, apres avoir essayé ton programme, j'ai la même erreur que précedemment.
En effet le compilateur n'accepte pas d'avoir une ligne au dessus de celle déclarant la subroutine,a savoir "Sub Macro1()"

Reply

Marsh Posté le 15-07-2008 à 15:13:31    

La macro que j'ai fait fonctionne très sur mon poste
 
Mais tu mélanges les lignes il faut :
 

Public sens As Boolean
Sub test()
Select Case sens


 
et non  
 

Public Sub test()
Public sens As Boolean
Select Case sens

Reply

Marsh Posté le 15-07-2008 à 15:44:09    

probleme résolu en plaçant static devant le nom de la subroutine.
 
En effet j'ai regardé le bouquin sur le VBA a ma disposition, pour apprendre que "static" permettait aux variables de conserver leurs valeur entre les differents appels de la procédure.
 

Code :
  1. Static Sub test()
  2. Dim sens As Boolean
  3. Select Case sens
  4. ...


 
En tout cas merci pour les idées (select case...), qui m'ont été d'une grande aide  ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed