Bonjour à tous,

Je travaille avec Excel 2007 et je suis sous Windows 7.

Je croyais bien que Jérome m'avait tiré d'affaire il y a quelques jours pour ce même sujet ... Même s'il m'a été d'un grand secours pour réussir la programmation de mon "bout de code", j'ai cru trop vite que tout était gagné. Ce qui a fonctionné au départ ne fonctionne plus aujourd'hui.
A force de tâtonnements et d'essais, j'ai trouvé ce qui se passe, mais ... POURQUOI ? Voilà mon problème.

Je résume la situation pour les "nouveaux".
J'ai un classeur dans lequel j'ai crée des macros (utilisant des UserForms, des boutons de commande intégrés etc.). Dans ce classeur j'ai une petite trentaine de feuilles dont une se nomme : "Facture - Devis en cours". C'est sur cette feuille qu'apparaissent les Factures ou les Devis. A partir de cette feuille, Factures et Devis sont enregistrés, puis la feuille est "effacée" afin de recevoir la Facture ou Devis suivant.

Une des fonctions programmée permet de rouvrir un fichier "Facture - Devis en cours" déjà enregistrer afin de pouvoir le modifier. Le module qui commande ceci fait deux choses :

1 - Ouverture d'un fichier à choisir dans les répertoires.
2 - Placement sur cette feuille ouverte de deux boutons l'un pour "Enregistrer", l'autre pour "Imprimer".

Tout ceci fonctionne très bien. Voici le 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
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
Public Message As String
Public NomFichier As String
Public CheminFichier As String
Public CeClasseur As String
Public Enregistrer As String
Public Imprimer As String
 
Sub Réouverture_Facture_ou_Devis()
 
Dim NomClasseur As Workbook
Dim Bouton_Enr As OLEObject
Dim Bouton_lmp As OLEObject
Dim Ws As Worksheet
Dim Enregistrer As String
Dim Imprimer As String
 
MsgBox "Vous allez ouvrir l'arborescence des fichiers. Choisissez votre répertoire et le fichier à ouvrir."
 
Application.Dialogs(xlDialogOpen).Show
 
Set NomClasseur = ActiveWorkbook
 
Range("C5").Select
 
Set Bouton_Enr = ActiveSheet.OLEObjects.Add("Forms.CommandButton.1")
 
With Bouton_Enr
    .Name = "Enregistrer"
    .Left = 10
    .Top = 30
    .Width = 60
    .Height = 25
    .Object.Caption = "Enregistrer"
 
End With
 
AjoutCodeEnregistrer
 
Set Bouton_Imp = ActiveSheet.OLEObjects.Add("Forms.CommandButton.1")
With Bouton_Imp
    .Name = "Imprimer"
    .Left = 10
    .Top = 60
    .Width = 60
    .Height = 25
    .Object.Caption = "Imprimer"
 
End With
 
AjoutCodeImprimer
 
End Sub
 
Sub AjoutCodeEnregistrer()
'Référence à ajouter Microsoft Visual Basic for Application Extsensibility 5.3
Dim CeClasseur As VBComponent
Dim i As Integer
Dim NumCom As Integer
Dim Nom As String
Dim FacDev As String
Dim CheminFichier As String
Dim NomFichier As String
 
Set CeClasseur = ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName)
 
With CeClasseur.CodeModule
    i = .CountOfLines
    .InsertLines i + 1, "Private Sub Enregistrer_Click()"
    .InsertLines i + 2, "Dim CheminFichier As String"
    .InsertLines i + 3, "Dim NomFichier As String"
    .InsertLines i + 4, "Dim FacDev As String"
    .InsertLines i + 5, "Range(""C5"").Select"
    .InsertLines i + 6, "ActiveCell.Select"
    .InsertLines i + 7, "ActiveCell.Offset(-2,3).Select"
    .InsertLines i + 8, "FacDev=ActiveCell.Value"
    .InsertLines i + 9, "'"
    .InsertLines i + 10, "If FacDev=""Facture"" Then"
    .InsertLines i + 11, "CheminFichier=ThisWorkbook.Path & ""\"""
    .InsertLines i + 12, "NomFichier=ActiveWorkbook.Name"
    .InsertLines i + 13, "'"
    .InsertLines i + 14, "With ActiveWorkbook"
    .InsertLines i + 15, ".SaveAs FileName:=CheminFichier & NomFichier"
    .InsertLines i + 16, ".Close"
    .InsertLines i + 17, "End With"
    .InsertLines i + 18, "'"
    .InsertLines i + 19, "Else: CheminFichier=ThisWorkbook.Path & ""\"""
    .InsertLines i + 20, "NomFichier=ActiveWorkbook.Name"
    .InsertLines i + 21, "'"
    .InsertLines i + 22, "With ActiveWorkbook"
    .InsertLines i + 23, ".SaveAs FileName:=CheminFichier & NomFichier"
    .InsertLines i + 24, ".Close"
    .InsertLines i + 25, "'"
    .InsertLines i + 26, "End With"
    .InsertLines i + 27, "'"
    .InsertLines i + 28, "End If"
    .InsertLines i + 29, "'"
    .InsertLines i + 30, "End Sub"
End With
 
End Sub
 
Sub AjoutCodeImprimer()
 
Dim CeClasseur As VBComponent
Dim j As Integer
Dim NumLigne As Integer
Dim NumColonne As Integer
 
 
Set CeClasseur = ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName)
 
With CeClasseur.CodeModule
    j = .CountOfLines
    .InsertLines j + 1, "Private Sub Imprimer_Click()"
    .InsertLines j + 2, "'"
    .InsertLines j + 3, "Dim NumLigne As Integer"
    .InsertLines j + 4, "Dim NumColonne As Integer"
    .InsertLines j + 5, "'"
    .InsertLines j + 6, "Columns(""J:J"").Find(""----------"", [J1], , , , xlPrevious).Select"
    .InsertLines j + 7, "ActiveCell.Offset(-1, 0).Select"
    .InsertLines j + 8, "'"
    .InsertLines j + 9, "NumLigne = ActiveCell.Row"
    .InsertLines j + 10, "NumColonne = ActiveCell.Column"
    .InsertLines j + 11, "'"
    .InsertLines j + 12, "Range(""A1"" & "":J"" & NumLigne).Select"
    .InsertLines j + 13, "'"
    .InsertLines j + 14, "With Sheets(""Facture - Devis en cours"").PageSetup"
    .InsertLines j + 15, ".PrintArea = ""A1"" & "":J"" & NumLigne"
    .InsertLines j + 16, ".PaperSize = xlPaperA4"
    .InsertLines j + 17, ".CenterHorizontally = True"
    .InsertLines j + 18, ".Orientation = xlPortrait"
    .InsertLines j + 19, ".Zoom = False"
    .InsertLines j + 20, ".FitToPagesWide = 1"
    .InsertLines j + 21, ".FitToPagesTall = 2"
    .InsertLines j + 22, "End With"
    .InsertLines j + 23, "Sheets(""Facture - Devis en cours"").PrintOut"
    .InsertLines j + 24, "End Sub"
End With
 
End Sub
Mon problème vient du fait que ces boutons fonctionnent ... puis ne fonctionnent plus.

Aujourd'hui, j'ai défini ce qui se produit :
Lorsque j'ouvre pour la première fois un fichier (par exemple : "26-11-2011--41-TOTO.xls") celui-ci s'ouvre, les boutons s'affichent et j'ai un module qui se crée (que je peux voir dans l'éditeur VBA). Le code de se module est (me semble-t-il) correct. Voici ce 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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Private Sub Enregistrer_Click()
Dim CheminFichier As String
Dim NomFichier As String
Dim FacDev As String
Range("C5").Select
ActiveCell.Select
ActiveCell.Offset(-2, 3).Select
FacDev = ActiveCell.Value
'
If FacDev = "Facture" Then
CheminFichier = ThisWorkbook.Path & "\"
NomFichier = ActiveWorkbook.Name
'
With ActiveWorkbook
.SaveAs Filename:=CheminFichier & NomFichier
.Close
End With
'
Else: CheminFichier = ThisWorkbook.Path & "\"
NomFichier = ActiveWorkbook.Name
'
With ActiveWorkbook
.SaveAs Filename:=CheminFichier & NomFichier
.Close
'
End With
'
End If
'
End Sub
Private Sub Imprimer_Click()
'
Dim NumLigne As Integer
Dim NumColonne As Integer
'
Columns("J:J").Find("----------", [J1], , , , xlPrevious).Select
ActiveCell.Offset(-1, 0).Select
'
NumLigne = ActiveCell.Row
NumColonne = ActiveCell.Column
'
Range("A1" & ":J" & NumLigne).Select
'
With Sheets("Facture - Devis en cours").PageSetup
.PrintArea = "A1" & ":J" & NumLigne
.PaperSize = xlPaperA4
.CenterHorizontally = True
.Orientation = xlPortrait
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 2
End With
Sheets("Facture - Devis en cours").PrintOut
End Sub
Ce qui suit me semble important, dans la "Zone de liste objet" de la fenêtre du code du module (fenêtre en haut et à gauche), si je déroule cette liste elle comprend :
a - Général
b - Enregistrer
c - Imprimer
d - Worksheet

Dans cette situation, si je reviens vers la feuille que j'ai rouverte et si je click sur les boutons Imprimer et Enregistrer, tout fonctionne normalement.
MAIS.
Si par la suite j'ouvre à nouveau ce même classeur, tout se déroule normalement mais je n'ai plus aucune action si je click sur les boutons de la feuille (En revanche, depuis la fenêtre de code du module, une pression sur F5, provoque sans problème le lancement de l'impression ou de l'enregistrement.

J'ai alors constaté que dans la "Zone de liste Objet", la liste comprenait alors deux lignes supplémentaires :
a - Général
b - CommandButton1
c - CommandButton2
d - Enregistrer
e - Imprimer
d - Worksheet

J'ai également constaté que si, manuellement, dans mon module de code, je remplaçais la ligne :
Sub Enregistrer_click()
par
Sub CommanButton1_click()

et
Sub Imprimer_click()
par
Sub CommandButton2_click()

Et bien les "fameux boutons" de la feuille ouverte fonctionnaient correctement.

Si, bien sûr je rouvre une troisième fois le même fichier, la "Zone de liste objet" comporte deux lignes de plus portant les noms de CommandButton3 et 4 ...

Je pense donc que c'est lors du réenregistrement du fichier qu'il se passe "quelque chose ...".

Avez-vous une idée ? Où est mon erreur ?

Par avance merci pour votre aide.

Danad38