Userform dynamique

Bonjour à tous !

Je me suis lancé dans la réalisation d'un Userform dynamique composé de plusieurs Frames, labels et optionboutons suite à des petits soucis dans l'utilisation d'une Listview sur certain PC de ma boite. Je décide donc de remplacer cette Listview par une Frame dynamique seulement mon niveau en VBA nécessite encore de solliciter un peu d'aide sur certains points si vous le voulez bien.

J'ai bien avancé et vous propose un exemple en pièce jointe et ci-dessous les points sur lesquels je coince :

1) initialisation de la Frame1 de l'userform sans passer par le bouton "Lister" (j'ai systématiquement un msg d'erreur)

2) je coince sur l'intégration de mes boutons d'options dans des Frames (5 boutons d'option de valeur 1/0.75/0.5/0 et NC par Frame pour ne permettre qu'un choix parmi ces 5 propositions).

3) mes labels de la Frame1 doivent renvoyer la valeur d'une liste de l'onglet "Risque-Moyens de Prévention". J'arrive à chercher la bonne liste dans l'onglet, à créer autant de label qu'il y a d'élément mais tous les labels me renvoient la même valeur? De même je ne parviens pas à respecter la mise en page de mes listes (pas de bouton d'option si cellule vide ou entête de liste "mesure organisationnelle, collective et individuelle).

Je remercie tout ceux qui voudront bien prendre un peu de leur temps pour me guider sur ces questions.

Le fichier :

66classeur-v2.xlsm (182.46 Ko)

Bonjour

Un essai

Bonjour,

Un très grand merci à toi Banzai, je n'avais pas pensé à faire une condition directement sur la plage de cellule concernée et merci encore d'avoir laissé quelques annotations qui me permettent de mieux comprendre les modifications apportées

Après test j'ai commencé à adapter à mon cas :

J'ai laissé apparaitre les entêtes "Mesures organisationnelles, collectives et individuelles" en modifiant la condition suivante :

'If Ws.Cells(I, Colonne).Interior.ColorIndex = xlNone And Ws.Cells(I, Colonne) <> "" Then
'par
      If Ws.Cells(I, Colonne) <> "" Then

J'ai appliqué aux labels de ces entêtes une couleur différente comme ceci :

If Ws.Cells(I, Colonne).Interior.ColorIndex <> xlNone Then
        .BackColor = &HC000C0
        .AutoSize = False
        End If

Problème : non prise en compte de l'AutoSize

J'ai essayé d'interdire la création d'une FrameCotation à coté de ces entêtes comme ceci :

If Me.Controls("Frame1").BackColor = &H8000000F Then
      Set Fra = Me.Controls("Frame1").Add("forms.Frame.1")
      With Fra
        .Name = "FrameCotation_" & Nb
        .Caption = Nb
        .Left = 308
        .Top = 2 + ((Nb - 1) * 30)
        .Width = 220
        .Height = 30
        'Frame1.ScrollHeight = .Top + .Height
      End With
    End If

Problème : les frames se créent tout de même Ma condition n'est pas bonne?

Et pour terminer est-il possible d'intégrer toutes les données (Caption des labels + cotations) dans une seule cellule dont les coordonnées dynamiques correspondent à ActiveCell.Offset(0, 3) selon le modèle suivant :

Mesures organisationnelles

AAAA24 = 1

BBBB24 = 0,5

CCCC24 = 0

DDDD24 = NC

EEEE24 = 1

FFFF24 = 1

Mesures collectives

IIII24 = 0,75

etc.

J'ai conscience que ça fait un peu liste au père noel et que ton temps est précieux, des pistes me serait déjà précieuses. En l'état de mes connaissances je pensais partir sur un code du style :

Vérification que toutes les FramesCotation sont cochées. Sinon msgbox "Toutes les cotations ne sont pas faites".

Concaténation : (valeur cellule & Nb) & "=" & (valeur bouton d'option & Nb) que j'intègre dans un coin de mon onglet

Puis je concatène la liste précédente que j'intègre en coordonnées ActiveCell.Offset(0, 3) de l'onglet actif.

Je suis sûre qu'il y a plus simple

Bonne journée

Bonjour

Tu joins le fichier que tu as modifié afin de comprendre ce que tu veux faire

Reco a écrit :

Et pour terminer est-il possible d'intégrer toutes les données (Caption des labels + cotations) dans une seule cellule dont les coordonnées dynamiques correspondent à ActiveCell.Offset(0, 3) selon le modèle suivant :

Incompréhensible

Tu fais des exemples pour que je comprenne

Reco a écrit :

Vérification que toutes les FramesCotation sont cochées

Le code où est il ?

Re,

Ah oui, ça me paraissait clair à l'écriture mais j'avoue

Je te propose un fichier avec les modifications apportées + un exemple de ce que dans l'idéal j'aimerai réaliser.

En 1 ligne : copier-coller toutes les données de ma Frame1 dans une cellule (le même principe que pour la listview que tu m'avais proposé à l'époque).

Le fichier :

30classeur-v3.xlsm (178.60 Ko)

Bonjour

C'est vrai qu'après quelques lectures de ton problème je ne comprenais toujours pas ce que tu voulais

Mais faire autre chose m'a permit d'y réfléchir

Et voici le résultat

A tester

Re,

Pour l'intégration des données dans une cellule, c'est parfait!

Par contre les labels avec les mesures n'appraissent plus pourtant le code est toujours présent ?

Je m'occupe des boutons en bas de l'userform

Si tu n'as plus le temps, je vais essayer d'adapter tes codes, c'est le premier module de classe pour moi

Bonne journée

Bonjour

A tester

Génial ! Franchement un grand merci ! J'espère pouvoir atteindre un jour ton niveau 8)

Une très bonne soirée à toi et à tous ceux qui suivront ce post.

Rechercher des sujets similaires à "userform dynamique"