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 :

Ouvrir une feuille en cliquant sur une cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour à tous,

    Dans un tableau d'une feuille de calcul Excel, j'ai une liste de numéros de 1 à 28. Ces numéros sont dans la colonne A, de la ligne 11 à 38. Ils correspondent à des feuilles Excel, du même fichier, ces feuilles se nomment Fich1, Fich2, Fich3,...Fich28.

    J'essaie de mettre en place une macro qui me permettrait d'ouvrir la feuille Fich selon le numéro dans la cellule. Par exemple, je clique en A11 où se trouve le numéro 1 alors la feuille Fich1 s'affiche mais pas les autres.

    J'ai fait cette macro mais elle ne fonctionne que pour la cellule A11

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Selection = Range("A11") Then
    Sheets("Fich1").Activate
    Else
    Exit Sub
    End If
    End Sub
    Merci par avance pour votre aide

    J'ai tenté une approche avec cette macro, mais je n'arrive à mettre la suite pour sélectionner la feuille à partir du numéro dans la cellule

    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    Dim nomfeuille As String, WS As Object
    
        Application.ScreenUpdating = False
        
    'Je rends toutes les feuilles visibles
    
        For Each WS In ActiveWorkbook.Worksheets
        WS.Visible = True
    Next WS
    
    'Je sélectionne la feuille de mon fichier à partir du numéro dans la cellule
        nomfeuille = 'Je ne sais pas quoi mettre ici  
    ActiveWorkbook.Sheets(nomfeuille).Activate
        
    'Je masque les autres feuilles
        For Each WS In ActiveWorkbook.Worksheets
            If WS.name <> nomfeuille Then WS.Visible = xlSheetVeryHidden
            Sheets("Recap").Visible = True
            Next WS
    End Sub
    J'ai trouvé, voici le code.

    ça fonctionne, mais dites moi si l'on peut faire mieux.

    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
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    Dim nomfeuille As String, WS As Object
     
        Application.ScreenUpdating = False
     
    'Je rends toutes les feuilles visibles
     
        For Each WS In ActiveWorkbook.Worksheets
        WS.Visible = True
    Next WS
     
    'Je sélectionne la feuille de mon fichier à partir du numéro dans la cellule
        nomfeuille = ("Fich" & Selection.Cells.Value)
        ActiveWorkbook.Sheets(nomfeuille).Activate
     
    'Je masque les autres feuilles
        For Each WS In ActiveWorkbook.Worksheets
            If WS.Name <> nomfeuille Then WS.Visible = xlSheetVeryHidden
            Sheets("Recap").Visible = True
            Next WS
     
    End Sub
    Je rencontre un problème, si je clique sur une cellule en dehors de celles de la colonne A, j'ai un message d'erreur et cela est normal puisque aucune feuille ne correspond à la cellule cliquée.

    Quelle est la solution ?

    Merci par avance pour votre aide

  2. #2
    Membre actif
    Homme Profil pro
    Technicien Méthodes
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Points : 269
    Points
    269
    Par défaut
    Bonjour,

    je te propose ces 2 codes. Si tu ne masque pas les feuilles, le 1er est inutile, mais je trouve que c'est plus propre.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Private Sub Worksheet_Activate()
     
    'A chaque fois que tu reviens sur ta feuille "de base" masque toutes les feuilles FichX
     
    Dim wb As Workbook
    Dim sh As Worksheet
     
    Set wb = ThisWorkbook
     
    For Each sh In wb.Worksheets
        If Left(sh.Name, 4) = "Fich" Then
            sh.Visible = xlSheetHidden
        End If
    Next
     
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    Dim MaPlage As Range
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim sh As Worksheet
     
    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Feuille de base") 'pense à adapter le nom
    Set MaPlage = ws.Range("A11:A38")
     
    If Not Intersect(Target, MaPlage) Is Nothing Then
        For Each sh In wb.Worksheets
            If sh.Name = "Fich" & Target Then
                sh.Visible = xlSheetVisible 'si tu ne masque pas les feuille, tu peux supprimer cette ligne
                sh.Activate
                Exit For
            End If
        Next
    End If
     
    End Sub

  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    J'ai trouvé la solution la voici :

    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
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    Dim nomfeuille As String, WS As Object
    If Not Application.Intersect(Target, Range("A11:A38")) Is Nothing Then
        Application.ScreenUpdating = False
     
    'Je rends toutes les feuilles visibles
     
        For Each WS In ActiveWorkbook.Worksheets
        WS.Visible = True
    Next WS
     
    'Je sélectionne la feuille de mon fichier à partir du numéro dans la cellule
        nomfeuille = ("Fich" & Selection.Cells.Value)
        ActiveWorkbook.Sheets(nomfeuille).Activate
     
    'Je masque les autres feuilles
        For Each WS In ActiveWorkbook.Worksheets
            If WS.Name <> nomfeuille Then WS.Visible = xlSheetVeryHidden
            Sheets("Recap").Visible = True
            Next WS
    End If
    End Sub

  4. #4
    Membre actif
    Homme Profil pro
    Technicien Méthodes
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Points : 269
    Points
    269
    Par défaut
    Re,

    Je ne comprends pas pourquoi tu affiche toutes les feuilles, pour ensuite les masquer, au lieu de n'afficher que celle qui t'interesse

  5. #5
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour.

    Le plus important dans les procédures d'évènements, ce sont leurs variables "paramètres"; en l'occurence ne pas oublier d'utiliser Target
    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
    Function FeuilleOK(ByVal Nom As String) As Boolean
             On Error Resume Next
             FeuilleOK = Worksheets(Nom).Name > ""
    End Function
     
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Not Intersect([A11:A38], Target) Is Nothing Then
            Feuille = "Fich" & Target
     
            If FeuilleOK(Feuille) Then
                For Each Ws In Worksheets
                     If Ws.Name = Feuille Then Ws.Visible = xlSheetVisible Else _
                    If Ws.Name <> Me.Name Then Ws.Visible = xlSheetVeryHidden
                Next
     
                Worksheets(Feuille).Activate
            End If
        End If
    End Sub

  6. #6
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Merci à tous pour vos bons conseils

  7. #7
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Pour ce genre de procédure, je préfère utiliser le double-clic au lieu du changement de sélection …
    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
    Function ExisteFeuille(S) As Boolean
             On Error Resume Next
             ExisteFeuille = Worksheets(S).Index > 0
    End Function
     
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        If Not Intersect([A11:A28], Target) Is Nothing Then
            Choix = "Fich" & Target
     
            If ExisteFeuille(Choix) Then
                For Each Ws In Worksheets
                       If Ws.Name = Choix Then Ws.Visible = xlSheetVisible Else _
                    If Ws.Name <> Me.Name Then Ws.Visible = xlSheetVeryHidden
                Next
     
                Cancel = True
                Worksheets(Choix).Activate
            End If
        End If
    End Sub

  8. #8
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    En effet, le double-click est beaucoup mieux, pas de problème de clique par erreur.
    Merci beaucoup
    René

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

Discussions similaires

  1. Réponses: 20
    Dernier message: 30/08/2012, 14h15
  2. [XL-2003] Ouvrir un dossier depuis une liste de numéro sur une feuille ".xls"
    Par supercopain dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/05/2011, 12h23
  3. Réponses: 22
    Dernier message: 03/02/2009, 21h21
  4. ouvrir un popup en cliquant sur une case de tableau
    Par ledawa dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/08/2008, 15h08
  5. Comment trier une DBGRID en cliquant sur une colonne
    Par sessime dans le forum Bases de données
    Réponses: 8
    Dernier message: 09/10/2004, 16h18

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