Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2526 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Excel - Boutons macro commande

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA] Excel - Boutons macro commande

n°1759480
paul30
Posté le 15-07-2008 à 11:04:15  profilanswer
 

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

mood
Publicité
Posté le 15-07-2008 à 11:04:15  profilanswer
 

n°1759493
pyrof
Posté le 15-07-2008 à 11:19:22  profilanswer
 

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

n°1759495
kiki29
Posté le 15-07-2008 à 11:21:03  profilanswer
 

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

n°1759575
paul30
Posté le 15-07-2008 à 13:07:26  profilanswer
 

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.
 

n°1759589
paul30
Posté le 15-07-2008 à 13:50:18  profilanswer
 

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.

n°1759597
pyrof
Posté le 15-07-2008 à 13:58:50  profilanswer
 

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

n°1759619
paul30
Posté le 15-07-2008 à 14:23:23  profilanswer
 

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
n°1759657
paul30
Posté le 15-07-2008 à 14:43:31  profilanswer
 

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()"

n°1759681
pyrof
Posté le 15-07-2008 à 15:13:31  profilanswer
 

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

n°1759710
paul30
Posté le 15-07-2008 à 15:44:09  profilanswer
 

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  ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Excel - Boutons macro commande

 

Sujets relatifs
commande pythonquel programme pour traiter des données dans excel?
Probleme d'automatisation en VBA sous Excel[VBA] Pb d'automatisation Solver
user avec commande ps[VBA] rechercher des mots dans Word
[VBA/Excel]Filtre Auto et copie des lignes résultantes 
Plus de sujets relatifs à : [VBA] Excel - Boutons macro commande


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR