Excel - Boutons macro commande [VBA] - VB/VBA/VBS - Programmation
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
Marsh Posté le 15-07-2008 à 11:21:03
Salut,
|
Marsh Posté le 15-07-2008 à 13:07:26
Merci a vous 2 pour vos propositions.
kiki29 a écrit : Salut,
|
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.
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.
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
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 :
|
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é
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()"
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 |
et non
Public Sub test() |
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 :
|
En tout cas merci pour les idées (select case...), qui m'ont été d'une grande aide
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