XL 2016 Problème de formulaire, checkbox dynamiques

Jingxi

XLDnaute Nouveau
Bonjour à tous,

Je me permets de faire appel à vos lumières de développeurs et plus particulièrement pour mon problème, qui je l'imagine, ne sera qu'une formalité pour l'ensemble des kings que nous avons ici sur ce forum.

Voici mon problème:
Je souhaiterais avoir un formulaire qui s'ouvre automatiquement que l'on active la feuille Admin. Jusque là, pas de trop problème. Dans ce formulaire, j'ai créé des checkbox dynamiques qui sont créées en fonction de l'ensemble des feuilles du classeur et qui sont automatiquement renommées avec le nom de ces feuilles.
J'ai donc bien deux colonnes dont la partie de gauche reprend certains forumalires administratifs et la partie de droite, les checkbox correspondant à une partie exécution.
Complémentairement, j'ai également créé trois boutons afin de pouvoir appliquer mon choix des checkbox, simplement annuler et fermer le forumlaire et un autre pour réafficher l'ensemble des feuilles en les réactivant toutes.

Je suis arrivé tant bien que mal (Je suis novice, en effet en VBA) après lecture de nombreuses infos sur le net mais je sèche littéralement sur les références et les événements qui doivent déclencher en cliquant sur les boutons.

En gros, j'ai des boutons, des checkbox mais mes tentatives d'appliquer des événements ne fonctionnent pas.

Je souhaite simplement avoir la possibilité de restreindre les feuilles qui me seraient nécessaires pour appliquer des notes dans celles-ci, afin de me permettre de naviguer plus aisément en sélectionnant la feuille que de scroller de gauche à droite pour avoir accès aux premières et/ou dernières feuilles.

J'ai créé quelque chose de dynamique afin de pouvoir y ajouter des feuilles et qu'automatiquement des checkbox complémentaires viennent s'intégrer dans le formulaire.

En parallèle, je souhaite adapter dynamiquement le formuaire pour que ce ne soit pas trop moche.

Je vous fournis mon chier en annexe allégé mais reprenant le code que j'y ai intégré. Soyez indulgent sur ma grande méconnaissance mais j'ai essayé de faire quelque chose pour ne pas arriver à vous demander de tout faire. C'esst le meilleur moyen d'apprendre ;)


Merci pour votre aide.
 

Pièces jointes

  • WPM_Template_Vlight.xlsm
    128.3 KB · Affichages: 5

patricktoulon

XLDnaute Barbatruc
Bonsoir
je suis pas sur que cela soit une bonne pratique de construire a partir d'un module mais bon ça ira
par contre le "onAction" pour les activX n'existe pas il ta faut faire une classe d'event
après c'est pas trop compliqué tu n'a que 3 bouton finalement à classer a moins que les click des checkboxs doivent interagir entre eux
quel est le but de ce formulaire ?
 

Jingxi

XLDnaute Nouveau
Bonsoir
je suis pas sur que cela soit une bonne pratique de construire a partir d'un module mais bon ça ira
par contre le "onAction" pour les activX n'existe pas il ta faut faire une classe d'event
après c'est pas trop compliqué tu n'a que 3 bouton finalement à classer a moins que les click des checkboxs doivent interagir entre eux
quel est le but de ce formulaire ?

Bonjour Patrick,

Merci déjà de t'être arrêté sur mon problème.
Le but de ce formulaire est de pouvoir cacher les feuilles dont les cases ne sont pas cochées. Dans le futur, je vais probablement apporter quelques modifications à ce formulaire avec d'autres utilités. Un peu comme un tableau de bord où j'aurai la possibilité d'importer des feuilles d'autres classeurs sur une feuille de ce classeur, imprimer l'ensemble de mon classeur en conservant une certaine mise en page.

J'ai cru comprendre en effet que le onAction pour les ActivX c'est mort. J'ai lu cela en effet.
Par contre, je n'ai pas encore vraiment assimilé le class Event.

Pour les checkbox, non elles ne doivent pas interagir entre elles. Elles sont seulement là pour afficher ou désafficher des feuilles.

Merci de ton aide.
 

cathodique

XLDnaute Barbatruc
Bonjour @Jingxi :), @patricktoulon ;),

@Jingxi : Je n'ai fait que suivre ta procédure pas à pas et mis en commentaires les lignes qui à mon avis ne sont pas nécessaires (plutôt font que ton code ne fonctionnait pas).
En retour ton code à appeler via "UserForm_Activate".
VB:
Sub CreateForm()
    Dim ws As Worksheet
    Set ws = Sheets("Admin")

    ' Supprimer le formulaire existant s'il y en a un
'    On Error Resume Next
''    Unload UserForm1
'    On Error GoTo 0

    ' Créer un nouveau formulaire
'    Load UserForm1
    UserForm1.caption = "Sheets All"

    Dim sheet As Worksheet
    Dim checkBox As MSForms.checkBox
    Dim topPos As Integer
    topPos = 10

    ' Côté gauche
    For Each sheet In ThisWorkbook.Sheets
        If sheet.Name Like "Administrative*" Or sheet.Name Like "General Notes*" Or sheet.Name Like "Design Notes*" Or sheet.Name Like "Admin*" Or sheet.Name Like "DBB*" Then
            Set checkBox = UserForm1.Controls.Add("Forms.CheckBox.1", , True)
            With checkBox
                .caption = sheet.Name
                .Top = topPos
                .Left = 10
                topPos = topPos + 20
            End With
        End If
    Next sheet

    ' Côté droit
    topPos = 10
    For Each sheet In ThisWorkbook.Sheets
        If sheet.Name <> "Administrative" And sheet.Name <> "General Notes" And sheet.Name <> "Design Notes" And sheet.Name <> "Admin" And sheet.Name <> "DBB" Then
            Set checkBox = UserForm1.Controls.Add("Forms.CheckBox.1", , True)
            With checkBox
                .caption = sheet.Name
                .Top = topPos
                .Left = 120
                topPos = topPos + 20
            End With
        End If
    Next sheet

    ' Ajouter les boutons
    AddButton UserForm1, "OK", "OK", 10, topPos + 10
    AddButton UserForm1, "Cancel", "Cancel", 80, topPos + 10
    AddButton UserForm1, "ShowAll", "Show All", 150, topPos + 10

    ' Afficher le formulaire
'    UserForm1.Show
End Sub
Bonne journée.
 

Jingxi

XLDnaute Nouveau
Bonjour @Jingxi :), @patricktoulon ;),

@Jingxi : Je n'ai fait que suivre ta procédure pas à pas et mis en commentaires les lignes qui à mon avis ne sont pas nécessaires (plutôt font que ton code ne fonctionnait pas).
En retour ton code à appeler via "UserForm_Activate".
VB:
Sub CreateForm()
    Dim ws As Worksheet
    Set ws = Sheets("Admin")

    ' Supprimer le formulaire existant s'il y en a un
'    On Error Resume Next
''    Unload UserForm1
'    On Error GoTo 0

    ' Créer un nouveau formulaire
'    Load UserForm1
    UserForm1.caption = "Sheets All"

    Dim sheet As Worksheet
    Dim checkBox As MSForms.checkBox
    Dim topPos As Integer
    topPos = 10

    ' Côté gauche
    For Each sheet In ThisWorkbook.Sheets
        If sheet.Name Like "Administrative*" Or sheet.Name Like "General Notes*" Or sheet.Name Like "Design Notes*" Or sheet.Name Like "Admin*" Or sheet.Name Like "DBB*" Then
            Set checkBox = UserForm1.Controls.Add("Forms.CheckBox.1", , True)
            With checkBox
                .caption = sheet.Name
                .Top = topPos
                .Left = 10
                topPos = topPos + 20
            End With
        End If
    Next sheet

    ' Côté droit
    topPos = 10
    For Each sheet In ThisWorkbook.Sheets
        If sheet.Name <> "Administrative" And sheet.Name <> "General Notes" And sheet.Name <> "Design Notes" And sheet.Name <> "Admin" And sheet.Name <> "DBB" Then
            Set checkBox = UserForm1.Controls.Add("Forms.CheckBox.1", , True)
            With checkBox
                .caption = sheet.Name
                .Top = topPos
                .Left = 120
                topPos = topPos + 20
            End With
        End If
    Next sheet

    ' Ajouter les boutons
    AddButton UserForm1, "OK", "OK", 10, topPos + 10
    AddButton UserForm1, "Cancel", "Cancel", 80, topPos + 10
    AddButton UserForm1, "ShowAll", "Show All", 150, topPos + 10

    ' Afficher le formulaire
'    UserForm1.Show
End Sub
Bonne journée.
Bonjour Cathodique,

Merci de ton intervention, en fait j'appelle ma procédure via la worksheet directement avec
VB:
Private Sub Worksheet_Activate()
    CreateForm
End Sub
Si je commente l'affichage du Userform
VB:
UserForm1.Show
, celui-ci ne se déclenche pas à l'ouverture de la feuille Admin.

En effet, supprimer le formulaire précédent n'est pas nécessaire.

Donc si je suis ce que tu me dis, j'appelle la procédure vi le userform plutot que la feuille Admin ?
 

Jingxi

XLDnaute Nouveau
re
Bonjour @cathodique
@Jingxi
voila il faut voir la vidéo

Patrick,

Je suis sous le charme ... Tout en restant dans le raisonnable hein 😅
Franchement, expliqué comme cela, c'est du bonheur et c'est tellement clair.

C'est parfait pour moi (pour commencer) et en effet, j'aurais dû commencer par construire plus judicieusement.

Je ne manquerai pas d'aller voir tes exemples et ton travail car ca m'intéresse d'approfondir la chose.

Pour ce qui est de la partie administrative, en effet, tu as parfaitement compris que ceci se présentait sur la partie gauche et que toutes les autres devaient être en partie droite ou séparées comme tu l'as fait.

En tous les cas, ta vidéo est réellement explicite. Je vais me permettre de la conserver pour y revenir et réanalyser calmement ce que tu expliques.

Je vais en effet faire évoluer cela car mon idée sera sans doute d'imprimer les feuilles qui auront été sélectionnées dans la checkbox et qui, par logique, auront eu des modifications de données inscrites. Ca m'évitera comme cela de réimprimer tout le temps l'ensemble du classeur.

J'ai fait pas mal d'erreurs en effet. Mais je voulais absolument essayer et tenter quelque chose car je ne supporte pas arriver comme cela et demander sans même avoir essayé.

Voilà. Long message mais cela valait sincèrement ce message pour l'aide que tu m'as apportée. Je me permettrai de refaire appel à toi en tous les cas car l'idée de construire le userform également m'intéresse.

A très bientôt.
 

Jingxi

XLDnaute Nouveau
Re le bouton Imprimer en plus
ca va te permettre de voir ce qui a été ajouté ou et comment

wowww ... super.

En parallèle, j'ai vu que tu avais créé des boîtes de dialogue perso et notamment le calendrier qui apparaît dans les cellules au clic droit etc ....
Je vais m'en inspirer car dans ma feuille administrative, je dois inclure des dates dans plusieurs cellules (notamment la F5 qui elle ne bougera pas de position, la E94 et la G95 qui elle risque de bouger en fonction des tableaux incorporés si ajout de ligne ou suppression de ligne).
Je cherchais justement à y incorporer une date en sélectionnant dans un petit calendrier. Je vais y regarder plus longuement plus tard. Je vais voir aussi que quand j'active la checkbox et que le texte devient noir, il y aura alors la condition de remplir cette date, sinon un message d'erreur s'affichera.

Je fais cela car j'ai des collègues qui se foutent pas mal si c'est bien rempli ou pas. Je veux les forcer à remplir les dates quand la checkbox est activée (Je parle bien entendu des cellules E94 et G95)

J'avoue que ces quelques outils, que tu mets à disposition, offrent des complémentarités à améliorer le fichier excel pour faciliter les choses.

Merci encore pour le bouton imprimer c'est parfait.
 

Statistiques des forums

Discussions
312 820
Messages
2 092 410
Membres
105 410
dernier inscrit
TahYou-K3n