J'ai actuellemnt une macro qui m'ouvre une feuille différente selon sur quelle cellule d'une ligne je double-clique. Comme j'ai une centaine de feuilles différentes à ouvrir l'écriture de la macro devient fastidieuse. Pour simplifier j'ai copier, sur ma feuille où je double-clique, le nom de la feuille de destination dans une colonne cachée (IV) en face de chaque ligne correspondante.
Grâce à ça je dois pouvoir réduire ma macro à juste quelques lignes par rapport à plus de 300 lignes actuellement.
Je n'arrive malheureusement pas à trouver les termes exact des fonctions à utiliser.
Ce que je cherche à trouver:
Quand je double-clique sur une cellule
Alors j'ouvre la feuille dont le nom est en colonne (IV) de la ligne correspondante à ma cellule sélectionnée.
Ce que j'ai actuellement:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Range("D17:IG212,D503:IU698,D989:IG1184"), Target) Is Nothing Then Exit Sub
Cancel = True
If Target.Row = 18 Or Target.Row = 504 Or Target.Row = 990 Then
Sheets("Feuille2").Visible = True
Worksheets("Feuille2").Select
ElseIf Target.Row = 20 Or Target.Row = 506 Or Target.Row = 992 Then
Sheets("Feuille3").Visible = True
Worksheets("Feuille3").Select
-
-
-
End If
Sheets("Feuille1").Visible = xlSheetVeryHidden
Exit Sub
End Sub
Re : Simplifier une macro pour ouvrir des feuilles avec double clic
bonjour Pat2A
En supposant avoir compris:
A tester
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Range("D17:IG212,D503:IU698,D989:IG1184" ), Target) Is Nothing Then Exit Sub
Cancel = True
Sheets(range("IV" & target.row)).Visible=true
Sheets(range("IV" & target.row)).Select
-
-
End If
Sheets("Feuille1").Visible = xlSheetVeryHidden
Exit Sub
End Sub
Re : Simplifier une macro pour ouvrir des feuilles avec double clic
Bonjour Pat, bonjour le forum,
Peut-être comme ça :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Range("D17:IG212,D503:IU698,D989:IG1184"), Target) Is Nothing Then Exit Sub
Cancel = True
Sheets(Cells(Target.Row, 256).Value).Visible = True
Worksheets(Cells(Target.Row, 256).Value).Select
Sheets("Feuille1").Visible = xlSheetVeryHidden
End Sub
Re : Simplifier une macro pour ouvrir des feuilles avec double clic
Bonjour Pat2A, le forum
Tu peut remplacer :
VB:
If Target.Row = 18 Or Target.Row = 504 Or Target.Row = 990 Then
Sheets("Feuille2").Visible = True
Worksheets("Feuille2").Select
ElseIf Target.Row = 20 Or Target.Row = 506 Or Target.Row = 992 Then
Sheets("Feuille3").Visible = True
Worksheets("Feuille3").Select
-
-
-
End If
Re : Simplifier une macro pour ouvrir des feuilles avec double clic
Salut à tous
Le temps que mes petits neurones se mettent en route, déjà plein de réponses. Mais comme je n'aime pas travailler pour rien...
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim X As Long, F As String, Flg As Boolean
If Intersect(Range("D17:IG212,D503:IU698,D989:IG1184"), Target) Is Nothing Then Exit Sub
Cancel = True
X = Target.Row
If Int(X / 2) <> (X / 2) Or X < 18 Then Exit Sub
Select Case X
Case Is < 504
F = "feuille" & ((X - 14) / 2)
Case Is < 990
F = "feuille" & ((X - 500) / 2)
Case Else
F = "feuille" & ((X - 986) / 2)
End Select
Loop
For X = 1 To Sheets.Count
If Sheets(X).Name = F Then
Sheets(X).Visible = True
Sheets(X).Activate
Sheets("Feuille1").Visible = xlSheetVeryHidden
Exit Sub
Else
Flg = True
End If
Next X
If Flg Then MsgBox "pas de feuille trouvée !"
End Sub
Ne pouvant tirer des infos intéressante que de la macro, je ne me suis pas préoccupé du texte. Mais j'ai de sérieux doutes sur la justesse de ce qui est donné.
- Les noms des feuilles et leurs positions
- La séquence fournie : 2 ne me semble pas suffisant
- Les limites : on exclu de D17 à IG212 => que doit-il se passer sur double-click en A17 ou IH17 ?
J'ai donc mis des garde-fou, limitant la macro.
A+
Re : Simplifier une macro pour ouvrir des feuilles avec double clic
Merci messieurs pour vos réponses, j'ai utilisé le code le plus simple, celui de Robert et nyko283, celui de pierrejean ne fonctionnant pas dans mon exemple. Ca fonctionne très bien sauf si je double-clique sur des cellules protégées il va alors ouvrir la feuille correspondant à la cellule précédemment sélectionnée.
Je pensait que le
Code:
If Intersect(Range("D17:IG212,D503:IU698,D989:IG1184" ), Target) Is Nothing Then Exit Sub
limitait l'utilisasion de la macro uniquement si je double-clique dans cette plage de cellules??
Qu'en pensez-vous?
Y-a-t-il un moyen simple de limiter la macro à cette plage?
Concernant le code de Gorfael, je vais déjà essayer de le comprendre avant de l'utiliser. Mais peut-être répond-t-il à mon intérrogation?
Re : Simplifier une macro pour ouvrir des feuilles avec double clic
Bonjour le fil, bonjour le forum,
Le code fonctionne bien chez moi, si je double-clique sur une cellule ne faisant pas partie de la plage ça va bien à Exit Sub... Es-tu sûr de la plage ?
Le code fonctionne bien chez moi, si je double-clique sur une cellule ne faisant pas partie de la plage ça va bien à Exit Sub... Es-tu sûr de la plage ?
En fait cela est dû au fait que toutes mes cellules en dehors de la plage sont protégées et si je déprotège la feuille alors il n'y a plus le problème mais j'aimerai éviter d'en arriver là.
Merci pour ton aide.
Re : Simplifier une macro pour ouvrir des feuilles avec double clic
En effet, si ce que tu souhaite est que :
Si tu double clic sur n'importe quelle cellule de la feuille en dehors des plages citées dans le code a savoir "D17:IG212,D503:IU698,D989:IG1184" alors le code est correct.
Mais si tu veux que la macro se lance uniquement si tu double clic sur une cellule à l'interieur de l'une de ces plages alors il faut rajouter "Not" apres le "If" pour donner:
VB:
If Not Intersect(Range("D17:IG212,D503:IU698,D989:IG1184" ), Target) Is Nothing Then Exit Sub
Si tu double clic sur n'importe quelle cellule de la feuille en dehors des plages citées dans le code a savoir "D17:IG212,D503:IU698,D989:IG1184" alors le code est correct.
Mais si tu veux que la macro se lance uniquement si tu double clic sur une cellule à l'interieur de l'une de ces plages alors il faut rajouter "Not" apres le "If" pour donner:
VB:
If Not Intersect(Range("D17:IG212,D503:IU698,D989:IG1184" ), Target) Is Nothing Then Exit Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Range("D17:IG212,D503:IU698,D989:IG1184"), Target) Is Nothing Then Exit Sub
Cancel = True
Sheets(Cells(Target.Row, 256).Value).Visible = True
Worksheets(Cells(Target.Row, 256).Value).Select
Sheets("SAMP Mamba").Visible = xlSheetVeryHidden
Exit Sub
End Sub
Le problème vient certainement des cellules protégées car le double clic n'a aucun effet sur elles, la cellule sélectionnée précédente dans la plage active reste sélectionnée et le programme pense que le double clic s'est fait sur elle, il ouvre alors la feuille correspondante. Je ne vois pas d'autre explication...
Re : Simplifier une macro pour ouvrir des feuilles avec double clic
Regarde le fichier joint,
La feuil 1 et 2 sont 2 exemple différent suivant si tu veux que la macro se lance à l'interieur ou l'extérieur de la zone non protéger, le reste de la feuille est verrouiller.
si le code est lancé alors la feuille 4 est masqué et la feuille 3 est affiché.
clique sur le bouton de la feuille 3 pour réaffiché la feuille 4.
Re : Simplifier une macro pour ouvrir des feuilles avec double clic
Ok, j'ai vérifier, cela fonctionne bien sur ton classeur.
J'ai peut-être un conflit avec la macro de protection automatique du classeur. C'est une hypothèse, je ne sais plus trop d'où cela vient...
En tout cas merci pour votre aide.