IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Double click sheet hide [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Djromé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 172
    Par défaut Double click sheet hide
    Salut les Kracks,

    Je reviens vers vous avec une macro qui fonctionne, mais que je souhaite améliorer pour notre utilisation quotidienne.
    Cette macro me permet en un double-click sur les cellules situées entre B2:B22 d'ouvrir l'onglet portant le même nom ou de le créer et de copier le contenu de la sheet (Working).
    Cependant, si je double click sur tous les autres cellules B2:B22 de chacun des onglets, la macro run!
    Je souhaiterai donc obtenir une restriction à la sheet(Working) qui seule elle contient les bonnes valeurs!
    Donc seule un double-click sur les cellules de B2:B22 de la sheet (working) doivent fonctionner!
    Pouvez-vous m'aider à résoudre se trouble?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Option Explicit
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     
        Dim WSname As String
        Dim WScheck As Worksheet
        Dim WScheckname As String
     
        If Not Intersect(Target, Range("B2:B22")) Is Nothing Then
            WSname = Range("B" & Target.Row)
            On Error Resume Next
            Set WScheck = Sheets(WSname)
            If WScheck Is Nothing Then 'Doesn't exist so create it
                Sheets("Example").Copy Before:=Sheets(Worksheets.Count)
                ActiveSheet.Name = WSname
                ActiveSheet.Visible = True
                Set WScheck = Nothing
                On Error GoTo 0
            Else 'Does exist so activate it           
    Sheets(WSname).Visible=True
    Sheets(WSname).Activate
                Set WScheck = Nothing
                On Error GoTo 0
            End If
        End If
    End Sub
    D'avance merci.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Par défaut
    (Si j'ai bien compris) un petit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If ActiveSheet.Name = "Working" Then
        If Not Intersect(Target, Range("B2:B22")) Is Nothing Then
    '...
    encadrant ton code devrait suffire non ?
    (Si tu souhaites que ça ne se lance que sur la feuille/onglet "Working")

  3. #3
    Membre confirmé Avatar de Djromé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 172
    Par défaut
    Merci pour ta réponse Erohares,

    Malheureusement, ça n'a pas l'air de marcher!

    En double-cliquant sur les cellules d'un autre onglet celà créé quand même une nouvelle feuille! Il me créé une "Working2"

    Salutations

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Par défaut
    Je ne comprends pas pourquoi... (chez moi ça marche)

    Le code donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
        Dim WSname As String
        Dim WScheck As Worksheet
        Dim WScheckname As String
     
        If ActiveSheet.Name = "Working" Then
     
            If Not Intersect(Target, Range("B2:B22")) Is Nothing Then
                WSname = Range("B" & Target.Row)
                On Error Resume Next
                Set WScheck = Sheets(WSname)
                If WScheck Is Nothing Then 'Doesn't exist so create it
                    Sheets("Example").Copy Before:=Sheets(Worksheets.Count)
                    ActiveSheet.Name = WSname
                    ActiveSheet.Visible = True
                    Set WScheck = Nothing
                    On Error GoTo 0
                Else 'Does exist so activate it
        Sheets(WSname).Visible = True
        Sheets(WSname).Activate
                    Set WScheck = Nothing
                    On Error GoTo 0
                End If
            End If
        End If
    Avant cette macro il n'y a rien qui fait changer le classeur de feuille courante ? L'ajout dans ma macro vérifie que la feuille courante est bien "Working" sinon on sort du if et il ne fait rien.
    Je ne vois pas pourquoi ça ne fonctionne pas...

    Où est-ce que tu as placés ces macros dans le projet VBA ? (je n'arrive même pas à la lancer comme tu l'as écrite (!). C'est bien avec un double-clic qu'elle est censée se lancer ?)

  5. #5
    Membre confirmé Avatar de Djromé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 172
    Par défaut
    Re-bonjour erohares,

    Effectivement, lorsque je le fais sur un nouveau workbook, le code marche trés bien!

    Cependant, dans mon fichier, le même code sur n'importe qu'elles autres feuilles me créé autant de nouvel onglet qu'excel le permet...!

    Il faut savoir que c'est un fichier assez complexe comprenant une feuille de contrôle permettant de tracer tout les changements faits dans le classeur, cela doit sans doute prendre la main à un certain moment que je n'arrive pas trouver (j'ai essayé de marquer la macro par le "point" en faisant le pas-à-pas, mais sans résultat!

    Ca m'était déjà arrivé pour une autre macro et je crois que j'ai du mettre cette dernière en stand by pendant le run de l'autre!


    En tous cas, merci beaucoup pour ton aide!

    Au plaisir!

  6. #6
    Membre confirmé Avatar de Djromé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 172
    Par défaut
    Salut Erohares,

    Je viens de voir pourquoi celà bugger chez moi, tout simplement car le code était installé sur tous les onglets!
    Si je le laisse uniquement sur "Working" tout fonctionne trés bien, et d'ailleurs je t'en remercie!

    Salutations

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Double click Cell-Sheet
    Par Djromé dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/01/2010, 21h09
  2. [VB.NET] DataGrid et double click
    Par mic56 dans le forum Windows Forms
    Réponses: 15
    Dernier message: 01/11/2006, 04h37
  3. Question sur double click
    Par cjacquel dans le forum MFC
    Réponses: 2
    Dernier message: 30/04/2005, 11h53
  4. [C#] [WinForms] Double click ListBox
    Par fxp17 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/04/2005, 14h58
  5. OnMouseUp et double click
    Par DBBB dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/12/2004, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo