Bonjour Forum,

J'ai un bug dans une de mes macros et je me demande si c'est corrigeable ou si c'est l'idée qui est carrément mauvaise...

Je m'explique :

- J'ai trois fichiers : BdD.xls, SuiviDOC.xls et RechercheCR.xls
- Dans BdD.xls une macro avant fermeture appelle SuiviDOC.xls et y reporte des infos

Voici une partie du code :

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
' Private Sub Workbook_Open()
Private Sub Workbook_BeforeClose(Cancel As Boolean)
 
Dim BDD As Workbook
Set BDD = ActiveWorkbook
BDD.Sheets(1).Activate
Dim dlb As Integer
    dlb = BDD.Sheets(1).Range("A65536").End(xlUp).Row
 
Application.DisplayAlerts = False
 
Dim TABL As Workbook
Set TABL = Workbooks.Open("T:\CHSF_Conception\Logiciels\SuiviDOC\SuiviDOC.xls")
Dim dlt As Integer
   dlt = TABL.Sheets(1).Range("A65536").End(xlUp).Row + 1
 
 
Dim cex As Boolean
cex = True
 
For j = 9 To dlt
If (TABL.Sheets(1).Cells(j, 4) = BDD.Sheets(1).Cells(dlb, 4) & " n°" & BDD.Sheets(1).Cells(dlb, 11) And TABL.Sheets(1).Cells(j, 13) = BDD.Sheets(1).Cells(dlb, 6)) Then
cex = False
End If
Next j
 
If cex = True Then
        TABL.Sheets(1).Cells(dlt, 1) = BDD.Sheets(1).Cells(dlb, 7)
        TABL.Sheets(1).Cells(dlt, 2) = BDD.Sheets(1).Cells(dlb, 10)
 ' (...)
End If
 
TABL.Activate
Application.Save
TABL.Close
End Sub
Important : lorsque je lance à la main BdD et que je le ferme, la macro fonctionne parfaitement


- Ma deuxième macro se trouve dans un formulaire de RechercheCR et appelle BdD pour y reporter des infos (ce triple appel est dû au fait que les fichiers sont publics et que différents intervenants sont susceptibles de changer différentes infos à différents stades du projet). Voici un extrait du code :

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
Private Sub CommandButton1_Click()
 
Dim RECH As Workbook
Set RECH = ActiveWorkbook
 
    Dim ProjectPath$
    ProjectPath = ActiveWorkbook.Path
 
     Application.DisplayAlerts = False
' (...)
 
' ETAT est un classeur associé à la base donnée et qui stocke les données de suivi
Dim ETAT As Workbook
Set ETAT = Workbooks.Open(ProjectPath & "\BdD.xls")
 
' (...)
Dim lig As Integer
lig = 6
    ETAT.Sheets(1).Cells(lig, 1).Value = lig - 1
'(...)
 
ETAT.Activate
ETAT.Close
 
 
SIGNET.Hide
End Sub
Le problème : quand j'execute cette macro, ça bug dans la macro BeforeClose() de la BdD.xls à cette ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 dlt = TABL.Sheets(1).Range("A65536").End(xlUp).Row + 1
avec ce msg d'erreur : variable d'objet ou variable de bloc With non définie
ma question : peut-on corriger le problème ou est-ce la philosophie d'une macro BeforeClose() appellé par un UserForm dans un autre fichier qui coince?

En vous remerciant,
Marc