comment afficher un usf aleatoirement

G

greg

Guest
bonjour tous le monde,

je souhaite une aide pour faire afficher un userform aleatoirement parmi un dizaine dans un usf.
 
M

Minick

Guest
Salut,

Je te propose ceci:

Sub Alea()
Dim Usf As Byte

Randomize
Usf = Int((10 * Rnd) + 1)

Select Case Usf
Case 1
UserForm1.Show
Case 2
UserForm2.Show
Case 3
UserForm3.Show
Case 4
UserForm4.Show
Case 5
UserForm5.Show
Case 6
UserForm6.Show
Case 7
UserForm7.Show
Case 8
UserForm8.Show
Case 9
UserForm9.Show
Case 10
UserForm10.Show
End Select
End Sub


Mais il y a peut etre moyen de ne pas utiliser le Select Case
si on arrivait à passer le N° de USF en parametre on resumerait le
code à 1 ligne quelque soit le nombre de USF possible.

Je cherche et je reviens si j'ai la solution.
ou si quelqu'un a la solution cela m'interesse aussi :eek:)

@+ Minick
 
M

michel

Guest
bonjour Greg , bonjour Minick

tu peus tester cette procédure pour boucler sur les USF :


Sub BouclerSurUSF()
'nécéssite activer la reference Microsoft Visual Basic for applications extensibilty 5.3
Dim VbComp As VBComponent
Dim LaForm As Object, ObjComp As Object
Dim i As Byte, USF As Byte

Randomize
USF = Int((10 * Rnd) + 1)

Set ObjComp = ThisWorkbook.VBProject.VBComponents
For Each VbComp In ObjComp ' boucle USF
If VbComp.Type = 3 Then
i = i + 1

If i = USF Then
Set LaForm = ThisWorkbook.VBProject.VBComponents.Item(i)
VBA.UserForms.Add(VbComp.Name).Show
End If

End If
Next
End Sub


bonne journee
MichelXld
 
M

Minick

Guest
Bonjour Michel,

Ca marche impec chez moi
mais j'ai du cocher l'option Faire confiance au project Visual Basic
du menu Outils/Macro/Sécurité.../Sources fiables


Personnellement j'en étais arrivé à chercher comment declarer une variable
de type VBComponent, il me manquait simplement cette reference,
je crois que j'aurai jamais trouvé :eek:(


Merci Michel
et desolé greg de m'etre incrusté dans ton fils


bon dimanche

@+ Minick
 
M

michel

Guest
rebonjour

décidemment cela ne va pas fort aujourd'hui , je viens de m'apercevoir que je n'avais pas envoyé la bonne version

Sub BouclerSurUSF_V02()
'nécéssite activer la reference Microsoft Visual Basic for applications extensibilty 5.3
Dim VbComp As VBComponent
Dim ObjComp As Object
Dim i As Byte, USF As Byte

Randomize
USF = Int((10 * Rnd) + 1)

Set ObjComp = ThisWorkbook.VBProject.VBComponents
For Each VbComp In ObjComp ' boucle USF
If VbComp.Type = 3 Then
i = i + 1

If i = USF Then VBA.UserForms.Add(VbComp.Name).Show

End If
Next
End Sub


Minick , si cela peut te rassurer ,moi c'est la façon d'afficher l'USF qui m'a pris un temps certain :
"VBA.UserForms.Add(VbComp.Name).Show"
il m'a fallu cherché sur plusieurs sources du Net avant de trouver la solution


bonne journée
MichelXld
 
M

Minick

Guest
re,

C'est vrai qu'il fallait y penser aussi a la facon d'afficher la form.

une petite suggestion:

J'ajouterai Exit For quand le USF rend la main.

Je sais, je chipote mais si il y a un grand nombre de VBComponent ca peut aider a gagner un peu de temps


Encore merci michel, je me coucherai moins bete ce soir ;o)

@+ Minick
 

Discussions similaires

Réponses
7
Affichages
523

Membres actuellement en ligne

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin