ça aussi je l'ai déjà fait...
tu peux me faire une capture d'écran plus large?
histoire que je vois dans quel onglet tu trouves le menu déroulant.
Pièce jointe 523787
Version imprimable
ça aussi je l'ai déjà fait...
tu peux me faire une capture d'écran plus large?
histoire que je vois dans quel onglet tu trouves le menu déroulant.
Pièce jointe 523787
HA HAAAAA !
j'ai réussi à refaire apparaître Fireapple dans le VBA. par contre le complément est toujours aussi vide.... ce qui m’énerve le plus dans tout ça c'est que je suis sur d'avoir oublié juste un tout petit truc. un petit détail.
bon. si je trouve pas d'où ça vient je vais partager un fichier excel et passez par un bouton qui l'ouvrira. et je trouverai une formule qui ferme le fichier à chaque fin d’exécution. ce sera moche. mais bon on fait comme on peut au bout d'un moment.
rien à faire.
Tant pis.
J'ai trouvé une solution bis. je vais créer des boutons dans les fichiers excel qui ouvrent directement celui avec le code (je crois qu'il n'est pas nécessaire de passer le fichier en .xlsm et qu'on peut rester en .xlsx si on a juste des boutons).
quand le programme aura fini son exécution il fermera le fichier qui contient le code. le fichier code étant ouvert en arrière-plan l'utilisateur ne le verra même pas. c'est pas très joli et un peu ghetto mais c'est dans mon domaine de compétence et ça fonctionne.
je suis quand même déçu de ne pas pouvoir utilisé la méthode .xlam. ça avait l'aire sympa et surtout vous avez passé pas mal de temps à m'aider dans cette direction. je vais quand même essayer de récupérer le plus possible votre code qui a l'aire plus stable.
en vous remerciant sincèrement,
je vous souhaite une bonne continuation.
On peut manipuler les objets du code avec ... du code. Puissant, office !
Voici un truc que j'utilise avec des fichiers Excel, mais je pense que c'est valable pour n'importe quel composant Office.
:mouarf:Code:
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157 Option Explicit ' Upgrade le code et les écrans de saisie ' Si ça se plante, faire Outils/références et cocher ' Microsoft Visual Basic for Applications Extensibility 5.3 ' Libérer aussi les macros : développeur / securite macros / cocher développeur ' Fonctionnement : ' Le fichier à upgrader doit être ouvert à coté de celui là ' Dans le répertoire du présent fichier doivent se trouver TOUTES les feuilles (Forms) ' et TOUS les modules du fichier à upgrader : ' - Pas de nouveux éléments ' Ne prends pas l'objet "ThisWorkbook" ' Ne s'occupe pas du code dans les feuilles ' Prends les objets du fichier désigné et les remplace par ceux du répertoire. ' Ne touche pas aux autres modules Sub MetAJourVersion() Dim LieuFichiers As String Dim Controle As Integer Dim LeProjet As Variant Dim NomProjet As String Dim NbModule As Integer Dim Module As Variant Dim NomModule As String Dim ModuleImport As Variant Dim I As Integer Dim NomFichier As String Dim NbSources As Integer Dim Source(20) As String Dim VBE_Num As String Dim VBE_NumProg As Integer Dim VBE_NumFic As Integer Dim VBE_NameProg As String Dim VBE_NameFic As String Select Case Workbooks.Count ' C'est ceux que voit l'utilisateur Case Is = 1 MsgBox "Ouvrir le fichier à upgrader" Exit Sub Case Is = 2 'Ok Case Else MsgBox "Trop de fichiers Excel ouverts" Exit Sub End Select LieuFichiers = ThisWorkbook.Path & "\" ' Récupère l'objet VBE VBE_Num = Application.VBE.VBProjects.Count ' Il y a d'autres trucs ... VBE_NameProg = Application.VBE.ActiveVBProject.Name VBE_NumProg = 0 VBE_NumFic = 0 For I = 1 To VBE_Num VBE_NameFic = Application.VBE.VBProjects(I).Name If VBE_NameFic = VBE_NameProg Then If VBE_NumProg = 0 Then VBE_NumProg = I Else Stop End If ElseIf VBE_NameFic = "VBAProject" Then ' Pas top ... If VBE_NumFic = 0 Then VBE_NumFic = I Set LeProjet = Application.VBE.VBProjects(I) Else MsgBox "Plusieurs VBE nommés 'VBAProject'" Stop End If End If Next I If VBE_NumFic = 0 Or VBE_NumProg = 0 Then Stop ' Regarde si le kit de mise à jour est complet et si on a bien un fichier de gestion des interfaces NbSources = 0 ' On prends les fichiers NomFichier = Dir(LieuFichiers & "*.bas") Do While NomFichier <> "" NbSources = NbSources + 1 Source(NbSources) = NomFichier NomFichier = Dir Loop NomFichier = Dir(LieuFichiers & "*.frm") Do While NomFichier <> "" NbSources = NbSources + 1 Source(NbSources) = NomFichier NomFichier = Dir Loop If NbSources = 0 Then Stop Controle = 0 NbModule = 0 For Each Module In LeProjet.VBComponents ' On vérifie l'existance de l'ancienne version Select Case Module.Type Case Is = vbext_ct_StdModule ' 1 Module standard NbModule = NbModule + 1 NomModule = Module.Name & ".bas" For I = 1 To NbSources If NomModule = Source(I) Then Controle = Controle + 1 Next I Case Is = vbext_ct_ClassModule ' 2 Module de classe ' Pas utilisé Case Is = vbext_ct_MSForm ' 3 Feuille Microsoft NbModule = NbModule + 1 NomModule = Module.Name & ".frm" For I = 1 To NbSources If NomModule = Source(I) Then Controle = Controle + 1 Next I Case Else ' On touche pas End Select Next Module If NbSources <> NbModule Or Controle <> NbModule Then MsgBox "Discordance de nombre de modules" Stop End If ' Remove ne s'exécute pas forcément tant que le code tourne ' Donc on renomme, on importe le nouveau ' Et ensuite on détruit l'ancien NbModule = LeProjet.VBComponents.Count For I = NbModule To 1 Step -1 ' C'est osé, destructif ... en marche arrière, ça passe Select Case LeProjet.VBComponents(I).Type Case Is = vbext_ct_StdModule ' 1 Module standard Set Module = LeProjet.VBComponents(I) NomModule = Module.Name Module.Name = NomModule & "_OLD" Set ModuleImport = LeProjet.VBComponents.Import(LieuFichiers & NomModule & ".bas") DoEvents LeProjet.VBComponents.Remove Module ' On l'enlève DoEvents Case Is = vbext_ct_ClassModule ' 2 Module de classe ' Pas utilisé Case Is = vbext_ct_MSForm ' 3 Feuille Microsoft Set Module = LeProjet.VBComponents(I) NomModule = Module.Name Module.Name = NomModule & "_OLD" Set ModuleImport = LeProjet.VBComponents.Import(LieuFichiers & NomModule & ".frm") DoEvents LeProjet.VBComponents.Remove Module DoEvents Case Else ' On touche pas End Select Next I MsgBox "Fichier " & LeProjet.Name & " mis à jour" End Sub