Place un classement de zone en module pour l'appeler à chaque fois.

Charly88

XLDnaute Occasionnel
Bonjour à tous, ça fait diablement plaisir de revenir ici et avec une question un peu sérieuse :)

Alors, j'ai le code ci-dessous qui me fait un classement sur une zone A10:EE300 si je double clique sur une cellule de la ligne 10 :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, cancel As Boolean)

'On remercie Robert pour l'info.
Dim Laplage As Range
Dim LaClef As String

LaClef = ActiveCell.Address ' variable de la clef de classement
Set Laplage = Range("A10:EE10") ' la zone où sont les clefs possibles : la ligne 10 jusqu'à EE

If Application.Intersect(target, Laplage) Is Nothing Then Exit Sub 'si le doubleclic se fait ailleurs que dans "A10:EE10", sort de la procédure
cancel = True 'empêche le mode édition lié au double-clic


Range("A11:EE300").Select
   
    Selection.Sort Key1:=Range(LaClef), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortTextAsNumbers

Range(LaClef).Select

End Sub

C'est très pratique et je remercie encore Robert qui m'a donné ou avait écrit l'essentiel.

Le truc c'est que j'ai 12 pages dans ce cas et je n'aime coller 12 fois le même code, je préfèrerais qu'une fonction placée dans un module soit appelée dans chaque feuille.

Seulement je maitrise mal les fonctions et je ne sais pas du tout comment lui transmettre le Byval target ni ne sais quoi faire du Cancel qui sont déjà dans le code de la page.
Bref à l'aide, je patauge dans mon ignorance.

Pour Byval je n'ai pas compris ce que c'était en regardant rapidement l'aide, sa valeur cela semble être le contenu de la cellule... mais il n'y a pas plantage si je double clique sur une cellule qui n'est pas dans la plage mais qui a un contenu qui est dans la plage... Alors c'est quoi cette bête ?

Merci pour les éclaircissements et l'éventuelle solution.
 
C

Compte Supprimé 979

Guest
Re : Place un classement de zone en module pour l'appeler à chaque fois.

Salut Charly88,

Tu peux utiliser ce code uniquement, à mettre dans ThisWorkbook
Code:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal target As Range, cancel As Boolean)
'On remercie Robert pour l'info.
  Dim Laplage As Range
  Dim LaClef As String
  LaClef = ActiveCell.Address  ' variable de la clef de classement
  Set Laplage = Sh.Range("A10:EE10")  ' la zone où sont les clefs possibles : la ligne 10 jusqu'à EE
  If Application.Intersect(target, Laplage) Is Nothing Then Exit Sub  'si le doubleclic se fait ailleurs que dans "A10:EE10", sort de la procédure
  cancel = True  'empêche le mode édition lié au double-clic
  Sh.Range("A11:EE300").Sort Key1:=Sh.Range(LaClef), Order1:=xlAscending, Header:=xlGuess, _
                             OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                             [COLOR=red][B]DataOption1:=xlSortTextAsNumbers[/B][/COLOR]
  Sh.Range(LaClef).Select
End Sub

A+

Nota : attention avec DataOptionX
cela peut poser des incompatibilités entre version d'Excel
 

Charly88

XLDnaute Occasionnel
Re : Place un classement de zone en module pour l'appeler à chaque fois.

Merci Bruno !
1) ... Par contre je devine que cela va fonctionner pour toutes les feuilles de mon classeur, mes 12 + les autres ? Donc soit je mets un contrôle (la feuille fait-elle partie de la liste, je pense avec un variant que je pourrais utiliser ailleurs), soit je reste sur ma première idée...

D'autres pistes pour appeler la fonction placée en module... ?


2) Je rajoute une 2è question : quelqu'un peut-il me dire s'il y a un moyen de savoir s'il y plusieurs feuilles sélectionnées à un instant T ? Cette fonction plante si on fait le double clique en ayant sélectionner plusieurs feuilles (quand excel mets le Groupe dans son titre pour ne pas être ambigu), et j'aurais besoin de ce contrôle pour bloquer la macro.
Je pense bien faire une boucle qui vérifie pour chaque feuille si elle est sélectionnée et qui les compte mais c'est lourd.

3) ha et pour le DataOptionX, si je le vire tout simplement, je dois évacuer le problème non ? Je bosse sous 2003 et 2007.
 
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Place un classement de zone en module pour l'appeler à chaque fois.

Re,

Réponse à la question 1
Code:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal target As Range, cancel As Boolean)
  Dim Laplage As Range, LaClef As String
  Dim TabSht As String
[COLOR=blue][B]  
  ' Tableau des feuilles qui sont OK
  TabSht = "Feuil1 Feuil3"
  ' Vérifier si feuille Ok, sinon on sort
  If InStr(1, TabSht, Sh.Name) = 0 Then Exit Sub
[/B][/COLOR]  
  ' variable de la clef de classement
  LaClef = ActiveCell.Address
  ' la zone où sont les clefs possibles : la ligne 10 jusqu'à EE
  Set Laplage = Sh.Range("A10:EE10")
  ' Si le doubleclic se fait ailleurs que dans "A10:EE10", sort de la procédure
  If Application.Intersect(target, Laplage) Is Nothing Then Exit Sub
  ' Empêche le mode édition lié au double-clic
  cancel = True
  ' Tri des lignes
  Sh.Range("A11:EE300").Sort Key1:=Sh.Range(LaClef), Order1:=xlAscending, Header:=xlGuess, _
                              OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                              DataOption1:=xlSortTextAsNumbers
  Sh.Range(LaClef).Select
End Sub

2) Je ne sais pas si c'est possible :confused:

3) En 2003 et 2007 no soucy

A+
 

edjo123

XLDnaute Junior
bonjour

je suis nouvelle sur le site et j'arrive pas à voir où envoyer de nouveaux posts, du coup j'envoie ma question ici en espérant que quelqu'un y repondra.

Voila mon problème, je demande à l'utilisateur de rentrer un nombre via une inputbox.Jusque la pas de pb

Ce que j'aimerais faire c'est insérer un nombre de colonnes correspondant au nombre rentré par l'utilisateur entre deux colonnes bien précises .

Quelqu'un pourrait il me proposer une solution ?

Merci d'avance
 

Charly88

XLDnaute Occasionnel
Re : Place un classement de zone en module pour l'appeler à chaque fois.

Merci Bhbh !

Après si quelqu'un a tout de même une piste sur comment faire pour mettre cela en module. C'est peut-être un peu tordu (surtout maintenant qu'une solution est trouvée) mais j'aimerais bien piger comment ça fonctionne.


Pour les lecteurs suivants, edjo123 a réussi à créer son fil.
 

Discussions similaires

Statistiques des forums

Discussions
312 302
Messages
2 087 035
Membres
103 436
dernier inscrit
PascalH