Afficher un certain nombre de frame

Bonjour,

J'aimerai afficher un certain nombre de frame en fonction d'une cellule récupérée.

Par exemple je récupère 3, je voudrais afficher seulement frame1 et frame2 dans mon userform

Merci beaucoup de vos réponses.

Bonjour et bienvenue sur le forum

Tu devrais joindre ton fichier…

Bye !

Salut,

Tu peux utiliser ce genre de code sur un bouton par exemple

if cells(X,Y).value  = 3 then

            UserformTOTO.frame1.visible = True

             UserformTOTO.frame2.visible = True

else

            UserformTOTO.frame1.visible = False

             UserformTOTO.frame2.visible = False

end if

ECG

Je vous joins mon fichier demain à 9h30.

La cellule récupérer et une variable entre 1 et 8 je pensais à une boucle for plutôt

Tu peux faire une boucle For mais pour 2 frame a afficher cela ne changera pas grand chose ^^

Avec le code que je t'ai mis tu as tout en mains je dirais, il suffit de l'adapter

ECG

Voici mon fichier.

Le but étant de rendre visible ou non un certain nombre de frame en fonction d'une valeur récupérée.

Merci beaucoup

53test-frame.xlsm (29.07 Ko)

Finalement j'ai eu une solution la voici !

Private Sub CommandButton1_Click()

    If Cells(1, 1) <> "" And IsNumeric(Cells(1, 1)) Then
        NbF = 0
        'compte le nombre de frame
        For Each ctrl In UserForm1.Controls
            'Si le type du Controle est une Frame +1
            If TypeOf ctrl Is MSForms.Frame Then
                NbF = NbF + 1
                ctrl.Visible = False
            End If

        Next

        NbF = Cells(1, 1) - 1   'nombre de frame a afficher
        For nf = 1 To NbF
            Me.Controls("Frame" & nf).Visible = True
        Next nf
    End If
End Sub

Bonsoir,

Niquel si tu as ce que tu voulais c'est le principal , quelques conseils/remarques :

Conseils:

- Le for each ctrl est utile surtout dans les cas ou ton programme permet d'ajouter/retirer en dynamique des contrôles, dans le cas présent une simple boucle For est suffisante car tu connais le maximum de frame que tu auras. Surtout que si tu rajoutes d'autres frame que tu ne veux pas cacher pour une raisons diverses il faudra remanier le code

- Utilise des noms reconnaissable pour tes contrôles dans ton userform le plus possible à la place de "frame1", c'est une bonne pratique à avoir

Remarques:

- Le

If Cells(1, 1) <> ""

n'est pas utile il me semble car le "" est considéré comme numérique de souvenir

- Attention si on entre un nombre à virgule considéré comme numérique, comment doit réagir ton programme ? Genre 2.7 va afficher qu’1 frame, c’est bien ce que tu veux ?

- Idem si on entre 3000, cela doit faire planter ton programme car tu n’as pas 2999 frames, il te faut utiliser ton Nbf pour comparer le max

Enfin une autre solution est directement de mettre en visible= false dans ton userform toute les frames et d'afficher que ce que tu veux

Par exemple pour une raison X si tu ne veux pas du tout que l'utilisateur voit un certain frame, le jour ou la macro bug dans le .visible= false et que cela réussi à afficher l'userform, tu auras toute les frames de visibles dans ton cas, ce qui pour certaines applications n'est pas du tout souhaitable et peut être pour toi.

Dans le cas de cette solution en passant tout en non visible le code devient aussi plus simple :

Private Sub CommandButton1_Click()

If  IsNumeric(Cells(1, 1)) Then
   For nf = 1 To Cells(1, 1) - 1
       Me.Controls("Frame" & nf).Visible = True
   Next
End If
End Sub

Il n'y a pas de solutions unique mais je tenais à préciser tout ça

ECG

Merci beaucoup pour tout ces conseils, effectivement dans l'initialisation j'ai noté que tout les frame soit invisible. Encore merci pour tout !

Cordialement.

pagesalex

Rechercher des sujets similaires à "afficher certain nombre frame"