Création d'une feuille Menu

Bonjour à tous,

J'aurais besoin de votre aide pour créer une feuille "Menu" à mon classeur contenant de très nombreuses feuilles....

Je vous ai joint un fichier allégé, j'espère qu'il conviendra...

Merci de votre aide et bonne soirée !

433essai-forum-v001.zip (47.33 Ko)

Bonjour Walden,

Dans le code de la feuille Menu, rajoute cette procédure :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Target, [F7,F14]) Is Nothing Then
        Application.ScreenUpdating = False
        For i = 2 To Sheets.Count
            If Sheets(i).Range("A4") = ActiveCell.Value Then
                Sheets(i).Visible = True
            Else
                Sheets(i).Visible = False
            End If
        Next i
    End If
End Sub

Dans la mesure du possible, évite les cellules fusionnées. La gestion de celles-ci en VBA peut devenir problématique.

Bonsoir vba-new et merci !

Je vais tâcher d'appliquer ton code à mon fichier ! Merci du conseil aussi

Bonne soirée,


Re-,

alors j'ai appliqué le code à mon fichier original, il fonctionne parfaitement, mais j'aimerais si possible que la feuille menu soit la seule visible à l'ouverture de mon fichier (que les autres soient masquées !) et qu'elle reste toujours visible. Est-ce possible ? sinon ce n'est pas grave ce code est déjà très bien !

Amicalement

Bonsoir,

je débute depuis quelques mois en VBA sur Excel mais ce petit code permet de sélectionner les feuilles

comportant ton critère, en l'occurence A dans la cellule A4 de chacune de tes feuilles. Les feuilles ne

correspondant pas à ce critère sont simplement masquées.

Sub Affichage_feuille()

Dim Nbf, i As Integer

'compte le nombre de feuille du classeur

Nbf = Worksheets.Count

' boucle

For i = 2 To Nbf

' regarde la valeur de la cellule A4 de chaque feuille

' si la valeur est différente de A, le feuille est masquée mais pas supprimée

If Sheets(i).Range("A4").Value = "A" Then Sheets(i).Visible = True Else: Sheets(i).Visible = False

Next i

End Sub

Pour le clic sur le "A" de ta feuille Menu, je n'ai pas encore trouver la solution.

Il faut utiliser BeforeDoubleClick mais je ne maitrise pas encore.

Cordialement.

@Walden : Une solution en ajoutant cette ligne à ton sub Workbook_Open :

For i = 2 To Sheets.Count: Sheets(i).Visible = False: Next i

Tu peux déclarer ta variable i en type Long si tu le souhaites.

@patrick33 : C'est bien le principe !

Quelques remarques :

- Si tu souhaitais que ta variable Nbf soit de type Integer, c'est râpé. Ce n'est pas en déclarant sur la même ligne que ta variable Nbf sera du même type (Integer) que la variable i.

Pour s'en convaincre, lance ta macro en mode pas-à-pas en affichant la fenêtre des variables locales (dans l'éditeur VBA -> Affichage -> Fenêtre variables locales). Tu verras que Nbf est de type Variant.

Pour déclarer en integer, tu dois le faire pour chaque variable : Dim Nbf As Integer, i As Integer

ou Dim Nbf%, i% en abrégé.

patrick33 a écrit :

Pour le clic sur le "A" de ta feuille Menu, je n'ai pas encore trouver la solution.

Il faut utiliser BeforeDoubleClick mais je ne maitrise pas encore.

Ici, il faudra utiliser la procédure évènementielle Worksheet_SelectionChange. Elle sera activée lorsque l'on sélectionne une autre cellule dans la feuille.

Bonjour, vba-new, patrick33, le forum,

Merci de votre aide et de vos conseils, mon problème est résolu !

Je me permettrai de revenir vers vous si j'ai d'autres questions.

Bonne journée,

Amicalement

Re-,

Grâce à vous, j'ai beaucoup avancé mais j'aurais une nouvelle question... Comment copier une feuille "Modèle" à la suite des autres feuilles et que le nom de l'onglet se modifie selon le texte entré dans 2 cellules ?

Je vous joins le fichier avec de plus amples explications !!

Merci encore de votre aide,

Bonne journée,

Bien amicalement

Re Walden,

On va essayer de répondre à ta question sans que j'aie besoin d'ouvrir le fichier !

Une première question pour toi : est-ce que tu utilises l'enregistreur de macro ? Ça peut être très utile dans la plupart des cas !

Donc commence par lancer l'enregistreur de macro puis fais les manips que tu cites. Arrête ensuite l'enregistreur de macro et poste le code VBA associé ici. On va essayer d'adapter afin de répondre précisément à ta demande.

Effectivement...Merci vba-new ! Mon code était correct pour l'essentiel, mais j'avais commis une erreur dans le nom de ma feuille modèle...

Désolé !

Voici mon code :

    If Not Application.Intersect(Target, [H17]) Is Nothing Then
 Sheets("Modèle").Visible = True
    Sheets("Modèle").Select
    Sheets("Modèle").Copy After:=Sheets(ThisWorkbook.Sheets.Count)
    End If

Merci encore...

Bonne journée

Si, encore une question... comment faire pour que la feuille nouvellement créée (Modèle (2)) soit renommée lorsque j'entre du texte dans 2 cellules en particulier ?? Mon problème étant que j'ai du désactiver la commande

[code][ActiveSheet.Name = "[B4].Value & " - " & [C4] & " - " & [D4]/code]

pour cette feuille Modèle et ce afin de conserver ce nom de "Modèle"...

Merci !

Est-ce que ton problème est résolu ?


Dans ton code, je vois 3 cellules (B4, C4, D4).

Voici un code à adapter et à mettre dans le code de la feuille Modèle :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim nom As String
    Dim c As Worksheet

    If ActiveSheet.Name = "Modèle" Then Exit Sub
    If Not Application.Intersect(Target, [D4]) Is Nothing And Target.Count = 1 Then
        nom = [B4] & " - " & [C4] & " - " & [D4]
        'détecte si la feuille existe déjà
        On Error Resume Next
        Set c = Sheets(nom)
        On Error GoTo 0
        'si elle existe on affiche un message et on sort de la procédure
        If Not c Is Nothing Then MsgBox "La feuille """ & nom & """ existe déjà.", vbExclamation: Exit Sub
        ActiveSheet.Name = [B4] & " - " & [C4] & " - " & [D4]
    End If
End Sub

MERCI !!! C'est parfait !

Problème résolu !

Bien amicalement

Bonjour,

merci vba-news pour tes remarques pertinentes qui font avancer des personnes comme moi

qui sont en phase "d'apprentissage" en vba.

Rechercher des sujets similaires à "creation feuille menu"