Bonjour le Forum,
Mon UserForm2 lance une procédure lorsqu'il est activé.
Dans cette procédure, j'ai une boucle For Each... Next qui demande l'ouverture d'un UserForm4.
Mon problème est le suivant :
Le UserForm4 est montré lors de la première itération de la boucle, je ne peux plus l'afficher...
L'erreur renvoyé est :
J'ai donc tenté le coup en passant la propriété ShowModal du UserForm4 de True à False.Erreur d'exécution '400':
Feuille déjà affichée ; affichage modal impossible
Je n'ai alors effectivement plus de message d'erreur, mais mon UserForm4 n'est plus "prioritaire" sur ma procédure, c'est-à-dire qu'il est bien affiché mais la procédure continue de dérouler...
Résultat, lorsque j'accède au UserForm4, il n'est plus utile car la procédure est terminée. Mon UserForm4 ne renvoie donc pas les valeurs rentrées et n'étant plus dans la boucle (dans le sens où j'y accède une fois la procédure terminée), il n'apparait qu'une fois...
Voici le code utilisé pour le UserForm2 :
Code du UserForm4 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 Private Sub UserForm_Activate() UserForm2.Repaint DoEvents Dim Fl1 As Worksheet, Fl2 As Worksheet Dim Ctrl As Control Dim n As Integer Dim Fichier As String Dim c As Range Application.ScreenUpdating = False Set Fl1 = ThisWorkbook.Worksheets(1) Set Fl2 = ThisWorkbook.Worksheets(5) ... 'finalise le classement par ordre alphabétique (positionne "101 - AMP" après "16 - Développement" par exemple) i = 0 For Each c In Fl1.Range("IV1:IV" & Fl1.Range("IV65536").End(xlUp).Row).Cells If c.Value Like "10*" Then Fl1.Range("IV" & Fl1.Range("IV65536").End(xlUp).Row + 1).Value = c.Value i = i + 1 End If Next c If Not i = 0 Then If i > 1 Then Fl1.Range("IV1:IV" & i).Delete (xlShiftUp) Else Fl1.Range("IV1").Delete (xlShiftUp) End If End If n = 0 'la boucle qui pose problème, mais est-ce vraiment la boucle... For Each c In Fl1.Range("IV1:IV" & Fl1.Range("IV65536").End(xlUp).Row).Cells Fl1.Range("A" & 7 + n * 34) = c.Value Application.ScreenUpdating = True UserForm4.Label14 = c.Value UserForm4.Label15 = Fl1.Range("A" & 7 + n * 24).Address UserForm4.Show Application.ScreenUpdating = False n = n + 1 Next c
Quelqu'un a-t-il une suggestion ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Private Sub CommandButton1_Click() Dim Fl1 As Worksheet Dim c As Range Dim ld As Integer, cd As Integer Set Fl1 = ThisWorkbook.Worksheets(1) ld = Fl1.Range(UserForm4.Label15).Row cd = Fl1.Range(UserForm4.Label15).Column Fl1.Cells(ld + 4, cd + 83).Value = UserForm4.TextBox1 Fl1.Cells(ld + 7, cd + 83).Value = UserForm4.TextBox2 Fl1.Cells(ld + 10, cd + 83).Value = UserForm4.TextBox3 Fl1.Cells(ld + 13, cd + 83).Value = UserForm4.TextBox4 Fl1.Cells(ld + 16, cd + 83).Value = UserForm4.TextBox5 Fl1.Cells(ld + 19, cd + 83).Value = UserForm4.TextBox6 UserForm4.Hide End Sub
Partager