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’ :

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
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^^)
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…
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
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.
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