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 :
Erreur d'exécution '400':
Feuille déjà affichée ; affichage modal impossible
J'ai donc tenté le coup en passant la propriété ShowModal du UserForm4 de True à False.

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 : 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
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
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
Quelqu'un a-t-il une suggestion ?