[VBA EXCEL] - Boucles et UserForm
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 :
Citation:
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:
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:
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 ?