Bonjour,
Alors voilà je suis encore débutante sur VBA malgré que j'apprenne beaucoup en passant par developpez.net. Dès que je bloque et jusqu'à présent j'ai toujours fini par trouver une réponse à chacun de mes problèmes… Jusqu'à aujourd'hui
Je ne sais pas trop par où commencer pour expliquer mon problème car en réalité je n’ai absolument aucune idée d’où ça vient alors je vais commencer par le début peut-être ^^
Je travaille sur un logiciel de suivi de contrôles et nous devons référencer les contrôles de toutes les entités de l'entreprise worldwide en un minimum de temps. Il est possible de le faire par import cependant pour les utilisateurs ne connaissant ni le logiciel et encore moins le formalisme du fichier d'import j'ai créé un fichier plus "sexy" afin que ça leur parle et en des termes métier "Risque et contrôle permanent". Dans la première version pas de VBA.
Pour importer les contrôles il est nécessaire de définir un scope (organisation géographique, entités, processus, etc.) . Dans le fichier d’import le fil d’Ariane est repris, s’il y a plusieurs codes pour un champ alors chaque fil d’Ariane est séparé du symbole « | ».
Dans cette première version nous avions décidé de limiter l'ajout des codes à un seul par champ car c’était trop fastidieux pour eux et à mettre en place pour nous… seulement depuis la diffusion du fichier certains utilisateurs nous ont signalé qu'ils aimeraient avoir la possibilité d’ajouter plusieurs codes… Ça c’était l’intro
Dans la nouvelle version du fichier que je travaille voilà le code VBA de la feuille ‘Controls’ :
La Feuil1 est une feuille intermédiaire qui va chercher le fil d’ariane des codes saisis dans les userform via un recherchev (j’ai pas trouvé mieux^^)
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim plage1 As Range Dim plage2 As Range Dim plage3 As Range Dim plage4 As Range Dim plage5 As Range Dim plage6 As Range Set plage1 = Range("G6:G1250") Set plage2 = Range("H6:H1250") Set plage3 = Range("I6:I1250") Set plage4 = Range("J6:J1250") Set plage5 = Range("K6:K1250") Set plage6 = Range("N6:N1250") Worksheets("Feuil1").Range("A3:B7").Clear Worksheets("Feuil1").Range("A11:B15").Clear Worksheets("Feuil1").Range("A19:B23").Clear Worksheets("Feuil1").Range("A27:B31").Clear Worksheets("Feuil1").Range("A35:B39").Clear Worksheets("Feuil1").Range("A43:B47").Clear Worksheets("Feuil1").Range("C2").Clear Worksheets("Feuil1").Range("C10").Clear Worksheets("Feuil1").Range("C18").Clear Worksheets("Feuil1").Range("C26").Clear Worksheets("Feuil1").Range("C34").Clear Worksheets("Feuil1").Range("C42").Clear If Not Application.Intersect(Target, plage1) Is Nothing Then UserForm1.Show Target = Worksheets("Feuil1").Range("C2") Application.SendKeys "{Esc}" End If If Not Application.Intersect(Target, plage2) Is Nothing Then UserForm2.Show Target = Worksheets("Feuil1").Range("C10") Application.SendKeys "{Esc}" End If If Not Application.Intersect(Target, plage3) Is Nothing Then UserForm3.Show Target = Worksheets("Feuil1").Range("C18") Application.SendKeys "{Esc}" End If If Not Application.Intersect(Target, plage4) Is Nothing Then UserForm4.Show Target = Worksheets("Feuil1").Range("C26") Application.SendKeys "{Esc}" End If If Not Application.Intersect(Target, plage5) Is Nothing Then UserForm5.Show Target = Worksheets("Feuil1").Range("C34") Application.SendKeys "{Esc}" End If If Not Application.Intersect(Target, plage6) Is Nothing Then UserForm6.Show Target = Worksheets("Feuil1").Range("C42") Application.SendKeys "{Esc}" End If End Sub
Ci-dessous un extrait du code du userform1 sachant que le bug arrive après avoir cliqué sur Save, le fil d’ariane est bien repris dans la cellule mais j‘ai le message d’erreur et excel redémarre… Cela se passe sur certains userform et pas sur d’autres… Encore plus bizarre, je n’ai pas le bug sur une autre feuille qui utilise aussi le userfom1…
Je ne sais pas si tout est très clair sans le fichier mais je donnerai toutes les informations nécessaires pour pouvoir résoudre ce problème.
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 Private Sub AddEntity1_Click() If entityLevel1.Value = "BU" Then entity1.Caption = "BU_" & entityCode1 Else If entityLevel1.Value = "EFU" Then entity1.Caption = "EFU_" & entityCode1 End If End If entity1.Visible = True If entityLevel1.Value = "" Or entityCode1.Value = "" Then MsgBox "Both fields are mandatory" Else If Worksheets("Feuil1").Range("C3").Text = "#N/A" Then MsgBox "The entity does not exist in Contrast, please check you have entered the good code or contact the Contrast support team" AddSecondEntity.Visible = False Else BreadcrumbTrail.Visible = True BreadcrumbTrail.Value = Worksheets("Feuil1").Range("C3").Text AddSecondEntity.Visible = True End If End If End Sub Private Sub Save_Click() Unload Me End Sub Private Sub AddEntity2_Click() If entityLevel2.Value = "BU" Then entity2.Caption = "BU_" & entityCode2 Else If entityLevel2.Value = "EFU" Then entity2.Caption = "EFU_" & entityCode2 End If End If entity2.Visible = True If entityLevel2.Value = "" Or entityCode2.Value = "" Then MsgBox "Both fields are mandatory" Else If Worksheets("Feuil1").Range("C4").Text = "#N/A" Then MsgBox "The entity does not exist in Contrast, please check you have entered the good code or contact the Contrast support team" AddThirdEntity.Visible = False Else BreadcrumbTrail.Visible = True BreadcrumbTrail.Value = Worksheets("Feuil1").Range("C3").Value & "|" & Worksheets("Feuil1").Range("C4").Value AddThirdEntity.Visible = True End If End If End Sub
J'ai conscience que mon code peut être largement amélioré mais étant encore novice je n'ai pas toute la connaissance pour le faire...
Un grand merci par avance pour votre aide
Aline
Partager