Bonjour à tous
Je soumets à la communauté le problème suivant étant assez novice en VBA :
Une macro dans la feuille « Envoi » d’un classeur « A » d’Excel automatise la déclaration du Nbre d’itérations maxi dans Excel (En lieu et place de le faire manuellement dans Options / Formules).
Durant 5 séquences successives (0 à 4) le Nbre d’itérations maxi est différent (Seq 0 :2 Itérations, Seq 1 : 10 It, seq 2 ; 80 it etc.)
2 cellules de la feuille « Envoi » contiennent respectivement le N° de séquence en cours et le Nbre d’itérations maxi à configurer transmis à la macro (BW62 et BX61).
Les N° de séquences (en simulation de fonctionnement) sont obtenus dans une liste de choix de données dans le classeur « A » et l’automatisation fonctionne parfaitement.
Par contre la même configuration des N° de séquences exécutée à partir d’un autre classeur « B » ne s’effectue pas dans la macro du classeur « A » bien que les liaisons soient établies entre les 2 et que les 2 cellules de la feuille « Envoi » prennent bien en compte les choix de séquence du classeur « B » ; il est vrai que dans ce cas le classeur « A » est devenu inactif puisque c’est le « B » qui est actif.
L’extrait de programme que je soumets concerne le début, et les 2 1ères séquences ; les 3 autres sont similaires avant la réinitialisation à la 1ère séquence :
Mes recherches infructueuses concernent l’instruction « Doevents » qui redonne la main au classeur Excel « A » pour attendre le N° de séquence suivante et la ligne « Sheets("Envoi").Activate » qui réactive la feuille du classeur « A ».
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
46
47
48
49
50
51
52
53
54
55
56 Rem : Classeur CM avec While Went Private Sub Workbook_Open() Dim N°seq As Integer, N°Itr As Integer, RtItr As Integer, Reinit As Byte, a0 As Byte, a1 As Byte, a2 As Byte, a3 As Byte, a4 As Byte Depart: With Application .Iteration = True .MaxChange = 0.01 .MaxIterations = 2: Rem: Configuration initiale du Nbre maxi d'itérations End With Rem: N°seq = BW62 = N° de séquence en cours de fonctionnement (0 à 4 pour 5 séquences successives de fonctionnement) Rem: N°Itr = BX61 = Nbre d'itérations max configurées par séquence (Nbre variable) Rem: a0-a1-a2-a3-a4: Ne recevoir qu'une seule fois le Nbre d'itérations dans les boucles While-Went Rem: BZ42 = Reinit: réinitialisation a0 = 0: a1 = 0: a2 = 0: a3 = 0: a4 = 0 Rem: séquence 0 Attente d'un message d'Excel dans le classeur « B » While N°seq = 0 Rem: Test de la séquence suivante N°seq = Range("BW62").Value: Rem: Test de la séquence suivante àpartir d'Excel If a0 <> 1 Then Rem:Test du seul passage de ce qui suit With Application Sheets("Envoi").Activate: Rem:Activer la feuille "Envoi" du classeur de la macro (CM) N°Itr = Range("BX61").Value: Rem:Nbre maxi d'itérations à récupérer dans Excel .MaxIterations = N°Itr: Rem: Configuration dans Excel du Nbre maxi d'itérations [Envoi!BU63] = .MaxIterations: Rem:Affichage dans Excel du Nbre maxi d'itérations Rem:Affichage MsgBox N°seq & " " & N°Itr & ", " & a0 & a1 & a2 & a3 & a4 a0 = 1: a4 = 0: Rem: 1 seul passage détecté End With End If Reinit = Range("BZ42").Value If Reinit = 1 Then a0 = 0 DoEvents Wend Rem: séquence 1 Message placé dans le classeur « B » l While N°seq = 1 N°seq = Range("BW62").Value If a1 <> 1 Then With Application Sheets("Envoi").Activate N°Itr = Range("BX61").Value .MaxIterations = N°Itr a1 = 1: a0 = 0 [Envoi!BU63] = .MaxIterations Rem:MsgBox N°seq & " " & N°Itr & ", " & a0 & a1 & a2 & a3 & a4 End With End If Reinit = Range("BZ42").Value If Reinit = 1 Then a1 = 0 DoEvents Wend
J’ai déjà testé de mettre cette ligne dans la boucle While…Went mais il devient impossible de laisser la main au classeur « B » et la boucle reste visible sur le curseur Excel ce que je ne souhaite pas.
A noter que pour chaque séquence, la configuration des itérations ne s’effectue qu’une seule fois (1 boucle) ce qui convient parfaitement.
Je remercie d’avance quelqu’un qui puisse me donner de nouvelles pistes d’écriture ou de correction de la macro pour que la configuration des itérations puisse s’effectuer à partir d’un autre classeur que celui de la macro.
Partager