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