Bonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je mets à
jour un module et un module de classe (Mod_JMO & cAccesFile). Le but est de
supprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1 et
cAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les techniques
que je peux utiliser pour laisser le temps à VBE de supprimer les éléments
pour que les noms soient dispo lors de l'import et éviter l'apparition du
'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes les
macros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre une
pause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo + vbQuestion,
"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
Bonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je mets à
jour un module et un module de classe (Mod_JMO & cAccesFile). Le but est de
supprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1 et
cAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les techniques
que je peux utiliser pour laisser le temps à VBE de supprimer les éléments
pour que les noms soient dispo lors de l'import et éviter l'apparition du
'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes les
macros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre une
pause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo + vbQuestion,
"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
Bonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je mets à
jour un module et un module de classe (Mod_JMO & cAccesFile). Le but est de
supprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1 et
cAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les techniques
que je peux utiliser pour laisser le temps à VBE de supprimer les éléments
pour que les noms soient dispo lors de l'import et éviter l'apparition du
'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes les
macros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre une
pause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo + vbQuestion,
"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que tu
cherches,
mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de feuille)
contenant
le code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit
' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr les
modules
' de feuille et le module ThisWorkbook, 3 pr les modules de
UserForm)
If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2
fois Option Explicit
' si la déclaration explicite est cochée dans les
préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End SubBonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets à
jour un module et un module de classe (Mod_JMO & cAccesFile). Le but
est de
supprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1
et
cAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniques
que je peux utiliser pour laisser le temps à VBE de supprimer les
éléments
pour que les noms soient dispo lors de l'import et éviter l'apparition
du
'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes
les
macros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre
une
pause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,
"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que tu
cherches,
mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de feuille)
contenant
le code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit
' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr les
modules
' de feuille et le module ThisWorkbook, 3 pr les modules de
UserForm)
If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2
fois Option Explicit
' si la déclaration explicite est cochée dans les
préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End Sub
Bonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets à
jour un module et un module de classe (Mod_JMO & cAccesFile). Le but
est de
supprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1
et
cAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniques
que je peux utiliser pour laisser le temps à VBE de supprimer les
éléments
pour que les noms soient dispo lors de l'import et éviter l'apparition
du
'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes
les
macros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre
une
pause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,
"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que tu
cherches,
mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de feuille)
contenant
le code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit
' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr les
modules
' de feuille et le module ThisWorkbook, 3 pr les modules de
UserForm)
If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2
fois Option Explicit
' si la déclaration explicite est cochée dans les
préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End SubBonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets à
jour un module et un module de classe (Mod_JMO & cAccesFile). Le but
est de
supprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1
et
cAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniques
que je peux utiliser pour laisser le temps à VBE de supprimer les
éléments
pour que les noms soient dispo lors de l'import et éviter l'apparition
du
'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes
les
macros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre
une
pause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,
"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Ces infos sont très interessantes, je les mets de côté, de mon côté j'ai mis
une pause de 2 secondes entre la suppression des éléments et l'import des
fichiers. Ca fonctionne bien.
Merci bcp.
John
"Michel Gaboly" a écrit dans le message de
news:Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que tu
cherches,mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de feuille)
contenantle code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr les
modules' de feuille et le module ThisWorkbook, 3 pr les modules de
UserForm)If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM > ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule' Le DeleteLines sert à éviter éviter d'avoir 2
fois Option Explicit' si la déclaration explicite est cochée dans les
préférences.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End SubBonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets àjour un module et un module de classe (Mod_JMO & cAccesFile). Le but
est desupprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1
etcAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniquesque je peux utiliser pour laisser le temps à VBE de supprimer les
élémentspour que les noms soient dispo lors de l'import et éviter l'apparition
du'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes
lesmacros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre
unepause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Ces infos sont très interessantes, je les mets de côté, de mon côté j'ai mis
une pause de 2 secondes entre la suppression des éléments et l'import des
fichiers. Ca fonctionne bien.
Merci bcp.
John
"Michel Gaboly" <michel@Suppgaboly.com> a écrit dans le message de
news:3FCB3EBC.94298FE6@Suppgaboly.com...
Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que tu
cherches,
mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de feuille)
contenant
le code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit
' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr les
modules
' de feuille et le module ThisWorkbook, 3 pr les modules de
UserForm)
If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM > ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2
fois Option Explicit
' si la déclaration explicite est cochée dans les
préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End Sub
Bonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets à
jour un module et un module de classe (Mod_JMO & cAccesFile). Le but
est de
supprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1
et
cAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniques
que je peux utiliser pour laisser le temps à VBE de supprimer les
éléments
pour que les noms soient dispo lors de l'import et éviter l'apparition
du
'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes
les
macros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre
une
pause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,
"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Ces infos sont très interessantes, je les mets de côté, de mon côté j'ai mis
une pause de 2 secondes entre la suppression des éléments et l'import des
fichiers. Ca fonctionne bien.
Merci bcp.
John
"Michel Gaboly" a écrit dans le message de
news:Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que tu
cherches,mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de feuille)
contenantle code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr les
modules' de feuille et le module ThisWorkbook, 3 pr les modules de
UserForm)If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM > ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule' Le DeleteLines sert à éviter éviter d'avoir 2
fois Option Explicit' si la déclaration explicite est cochée dans les
préférences.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End SubBonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets àjour un module et un module de classe (Mod_JMO & cAccesFile). Le but
est desupprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1
etcAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniquesque je peux utiliser pour laisser le temps à VBE de supprimer les
élémentspour que les noms soient dispo lors de l'import et éviter l'apparition
du'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes
lesmacros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre
unepause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Ces infos sont très interessantes, je les mets de côté, de mon côté j'ai mis
une pause de 2 secondes entre la suppression des éléments et l'import des
fichiers. Ca fonctionne bien.
Merci bcp.
John
"Michel Gaboly" a écrit dans le message de
news:Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que tu
cherches,mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de feuille)
contenantle code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr les
modules' de feuille et le module ThisWorkbook, 3 pr les modules de
UserForm)If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM > ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule' Le DeleteLines sert à éviter éviter d'avoir 2
fois Option Explicit' si la déclaration explicite est cochée dans les
préférences.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End SubBonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets àjour un module et un module de classe (Mod_JMO & cAccesFile). Le but
est desupprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1
etcAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniquesque je peux utiliser pour laisser le temps à VBE de supprimer les
élémentspour que les noms soient dispo lors de l'import et éviter l'apparition
du'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes
lesmacros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre
unepause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Ces infos sont très interessantes, je les mets de côté, de mon côté j'ai mis
une pause de 2 secondes entre la suppression des éléments et l'import des
fichiers. Ca fonctionne bien.
Merci bcp.
John
"Michel Gaboly" <michel@Suppgaboly.com> a écrit dans le message de
news:3FCB3EBC.94298FE6@Suppgaboly.com...
Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que tu
cherches,
mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de feuille)
contenant
le code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit
' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr les
modules
' de feuille et le module ThisWorkbook, 3 pr les modules de
UserForm)
If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM > ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2
fois Option Explicit
' si la déclaration explicite est cochée dans les
préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End Sub
Bonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets à
jour un module et un module de classe (Mod_JMO & cAccesFile). Le but
est de
supprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1
et
cAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniques
que je peux utiliser pour laisser le temps à VBE de supprimer les
éléments
pour que les noms soient dispo lors de l'import et éviter l'apparition
du
'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes
les
macros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre
une
pause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,
"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Ces infos sont très interessantes, je les mets de côté, de mon côté j'ai mis
une pause de 2 secondes entre la suppression des éléments et l'import des
fichiers. Ca fonctionne bien.
Merci bcp.
John
"Michel Gaboly" a écrit dans le message de
news:Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que tu
cherches,mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de feuille)
contenantle code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr les
modules' de feuille et le module ThisWorkbook, 3 pr les modules de
UserForm)If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM > ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule' Le DeleteLines sert à éviter éviter d'avoir 2
fois Option Explicit' si la déclaration explicite est cochée dans les
préférences.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End SubBonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets àjour un module et un module de classe (Mod_JMO & cAccesFile). Le but
est desupprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1
etcAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniquesque je peux utiliser pour laisser le temps à VBE de supprimer les
élémentspour que les noms soient dispo lors de l'import et éviter l'apparition
du'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes
lesmacros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre
unepause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Bonsoir,
A la place d'une pause, tu pourrais aussi essayer un DoEvents entre tes
deux
boucles For ou, si le malade est rebelle, une bouclette de ce style :
For i=1 To 10
DoEvents
Next i
(très cochonne la bouclette, mais si ça marche..)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Ces infos sont très interessantes, je les mets de côté, de mon côté j'ai
mis
une pause de 2 secondes entre la suppression des éléments et l'import
des
fichiers. Ca fonctionne bien.
Merci bcp.
John
"Michel Gaboly" a écrit dans le message de
news:Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que
tu
cherches,mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de
feuille)
contenantle code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le
classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr
les
modules' de feuille et le module ThisWorkbook, 3 pr les modules
de
UserForm)If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM > > ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule' Le DeleteLines sert à éviter éviter d'avoir
2
fois Option Explicit' si la déclaration explicite est cochée dans
les
préférences.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End SubBonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets àjour un module et un module de classe (Mod_JMO & cAccesFile). Le
but
est desupprimer ces éléments dans toutes les macros complémentaires sauf
la
principale (MacroJMO) et d'importer ces éléments qui ont été
exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des
Mod_JMO1
etcAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniquesque je peux utiliser pour laisser le temps à VBE de supprimer les
élémentspour que les noms soient dispo lors de l'import et éviter
l'apparition
du'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde
toutes
lesmacros complémentaires ça ne fonctionne pas. Je voudrai éviter de
mettre
unepause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en
+.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export
fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import
fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import
fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Bonsoir,
A la place d'une pause, tu pourrais aussi essayer un DoEvents entre tes
deux
boucles For ou, si le malade est rebelle, une bouclette de ce style :
For i=1 To 10
DoEvents
Next i
(très cochonne la bouclette, mais si ça marche..)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Ces infos sont très interessantes, je les mets de côté, de mon côté j'ai
mis
une pause de 2 secondes entre la suppression des éléments et l'import
des
fichiers. Ca fonctionne bien.
Merci bcp.
John
"Michel Gaboly" <michel@Suppgaboly.com> a écrit dans le message de
news:3FCB3EBC.94298FE6@Suppgaboly.com...
Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que
tu
cherches,
mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de
feuille)
contenant
le code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit
' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le
classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr
les
modules
' de feuille et le module ThisWorkbook, 3 pr les modules
de
UserForm)
If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM > > ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir
2
fois Option Explicit
' si la déclaration explicite est cochée dans
les
préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End Sub
Bonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets à
jour un module et un module de classe (Mod_JMO & cAccesFile). Le
but
est de
supprimer ces éléments dans toutes les macros complémentaires sauf
la
principale (MacroJMO) et d'importer ces éléments qui ont été
exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des
Mod_JMO1
et
cAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniques
que je peux utiliser pour laisser le temps à VBE de supprimer les
éléments
pour que les noms soient dispo lors de l'import et éviter
l'apparition
du
'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde
toutes
les
macros complémentaires ça ne fonctionne pas. Je voudrai éviter de
mettre
une
pause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en
+.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,
"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export
fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import
fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import
fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Bonsoir,
A la place d'une pause, tu pourrais aussi essayer un DoEvents entre tes
deux
boucles For ou, si le malade est rebelle, une bouclette de ce style :
For i=1 To 10
DoEvents
Next i
(très cochonne la bouclette, mais si ça marche..)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Ces infos sont très interessantes, je les mets de côté, de mon côté j'ai
mis
une pause de 2 secondes entre la suppression des éléments et l'import
des
fichiers. Ca fonctionne bien.
Merci bcp.
John
"Michel Gaboly" a écrit dans le message de
news:Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que
tu
cherches,mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de
feuille)
contenantle code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le
classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr
les
modules' de feuille et le module ThisWorkbook, 3 pr les modules
de
UserForm)If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM > > ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule' Le DeleteLines sert à éviter éviter d'avoir
2
fois Option Explicit' si la déclaration explicite est cochée dans
les
préférences.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End SubBonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets àjour un module et un module de classe (Mod_JMO & cAccesFile). Le
but
est desupprimer ces éléments dans toutes les macros complémentaires sauf
la
principale (MacroJMO) et d'importer ces éléments qui ont été
exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des
Mod_JMO1
etcAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniquesque je peux utiliser pour laisser le temps à VBE de supprimer les
élémentspour que les noms soient dispo lors de l'import et éviter
l'apparition
du'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde
toutes
lesmacros complémentaires ça ne fonctionne pas. Je voudrai éviter de
mettre
unepause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en
+.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export
fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import
fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import
fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que tu
cherches,
mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de feuille)
contenant
le code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit
' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr les
modules
' de feuille et le module ThisWorkbook, 3 pr les modules de
UserForm)
If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2
fois Option Explicit
' si la déclaration explicite est cochée dans les
préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End SubBonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets à
jour un module et un module de classe (Mod_JMO & cAccesFile). Le but
est de
supprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1
et
cAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniques
que je peux utiliser pour laisser le temps à VBE de supprimer les
éléments
pour que les noms soient dispo lors de l'import et éviter l'apparition
du
'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes
les
macros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre
une
pause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,
"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que tu
cherches,
mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de feuille)
contenant
le code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit
' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr les
modules
' de feuille et le module ThisWorkbook, 3 pr les modules de
UserForm)
If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2
fois Option Explicit
' si la déclaration explicite est cochée dans les
préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End Sub
Bonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets à
jour un module et un module de classe (Mod_JMO & cAccesFile). Le but
est de
supprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1
et
cAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniques
que je peux utiliser pour laisser le temps à VBE de supprimer les
éléments
pour que les noms soient dispo lors de l'import et éviter l'apparition
du
'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes
les
macros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre
une
pause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,
"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que tu
cherches,
mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de feuille)
contenant
le code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit
' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr les
modules
' de feuille et le module ThisWorkbook, 3 pr les modules de
UserForm)
If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2
fois Option Explicit
' si la déclaration explicite est cochée dans les
préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End SubBonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets à
jour un module et un module de classe (Mod_JMO & cAccesFile). Le but
est de
supprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1
et
cAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniques
que je peux utiliser pour laisser le temps à VBE de supprimer les
éléments
pour que les noms soient dispo lors de l'import et éviter l'apparition
du
'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes
les
macros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre
une
pause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,
"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Finalement je suis revenu sur ce post, ma pause n'a tenu qu'un temps, la
solution que j'ai usité est la 2ème : celle où l'on supprime le code des
modules que je rempli avec le code du même module de ThisWorkbook.
Merci encore.
ça à l'air de marcher très bien et plus vite en plus.
John
"Michel Gaboly" a écrit dans le message de
news:Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que tu
cherches,mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de feuille)
contenantle code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr les
modules' de feuille et le module ThisWorkbook, 3 pr les modules de
UserForm)If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM > ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule' Le DeleteLines sert à éviter éviter d'avoir 2
fois Option Explicit' si la déclaration explicite est cochée dans les
préférences.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End SubBonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets àjour un module et un module de classe (Mod_JMO & cAccesFile). Le but
est desupprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1
etcAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniquesque je peux utiliser pour laisser le temps à VBE de supprimer les
élémentspour que les noms soient dispo lors de l'import et éviter l'apparition
du'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes
lesmacros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre
unepause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Finalement je suis revenu sur ce post, ma pause n'a tenu qu'un temps, la
solution que j'ai usité est la 2ème : celle où l'on supprime le code des
modules que je rempli avec le code du même module de ThisWorkbook.
Merci encore.
ça à l'air de marcher très bien et plus vite en plus.
John
"Michel Gaboly" <michel@Suppgaboly.com> a écrit dans le message de
news:3FCB3EBC.94298FE6@Suppgaboly.com...
Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que tu
cherches,
mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de feuille)
contenant
le code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit
' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr les
modules
' de feuille et le module ThisWorkbook, 3 pr les modules de
UserForm)
If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM > ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2
fois Option Explicit
' si la déclaration explicite est cochée dans les
préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End Sub
Bonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets à
jour un module et un module de classe (Mod_JMO & cAccesFile). Le but
est de
supprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1
et
cAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniques
que je peux utiliser pour laisser le temps à VBE de supprimer les
éléments
pour que les noms soient dispo lors de l'import et éviter l'apparition
du
'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes
les
macros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre
une
pause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,
"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name
<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,
NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Finalement je suis revenu sur ce post, ma pause n'a tenu qu'un temps, la
solution que j'ai usité est la 2ème : celle où l'on supprime le code des
modules que je rempli avec le code du même module de ThisWorkbook.
Merci encore.
ça à l'air de marcher très bien et plus vite en plus.
John
"Michel Gaboly" a écrit dans le message de
news:Re,
2 idées :
1 - Dans le Workbook_Open, utiliser une gestion d'errerur et renommer
les 2 VbComponents concernés.
2 - Modifier la technique de mise à jour, en conservant les modules
existants, mais en en remplaçant le code, en utilisant la propriété
CountOfLines et les méthodes DeleteLines et AddFromString.
Tu peux t'inspirer de ces exemples. Il ne font pas exactement ce que tu
cherches,mais je te fais confiance pour adapter ;-))
Pour transférer un module d'un classeur vers le classeur actif :
Nb - Il faut que le module (un module standard, pas un module de feuille)
contenantle code à récupérer ait été nommé "MSource"
Sub RecopieModule()
Dim NewM As Object, NewCode As String
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MSource").CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option
Explicit' si la déclaration explicite est cochée dans les préférences
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub
Pour transférer tous les modules standards d'un classeur vers le classeur
actif :
Sub TransfertModules()
Dim M As Object, NewM As Object, NewCode As String
For Each M In ThisWorkbook.VBProject.VBComponents
' Test type module (1 pour les modules standards, 100 pr les
modules' de feuille et le module ThisWorkbook, 3 pr les modules de
UserForm)If M.Type = 1 Then
' Stockage du code du module (lu dans CE CLASSEUR)
With M.CodeModule
NewCode = .Lines(1, .CountOfLines)
End With
' Ajout d'un module au CLASSEUR ACTIF
Set NewM > ActiveWorkbook.VBProject.VBComponents.Add(1)
' MAJ du code du module créé
With
ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule' Le DeleteLines sert à éviter éviter d'avoir 2
fois Option Explicit' si la déclaration explicite est cochée dans les
préférences.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End If
Next M
End SubBonjour à tous,
j'utilise le code n°1 en fin de post pour mettre à jour mes macros
complémentaires par rapport à ma macro complémentaire principale. Je
mets àjour un module et un module de classe (Mod_JMO & cAccesFile). Le but
est desupprimer ces éléments dans toutes les macros complémentaires sauf la
principale (MacroJMO) et d'importer ces éléments qui ont été exporter de
MacroJMO.
Quand ma fonction a fini de s'executer je me retrouve avec des Mod_JMO1
etcAccesFile1 à la place de Mod_JMO & cAccesFile. Quels sont les
techniquesque je peux utiliser pour laisser le temps à VBE de supprimer les
élémentspour que les noms soient dispo lors de l'import et éviter l'apparition
du'1'.
J'ai testé de mettre une fonction SaveAllProjects qui sauvegarde toutes
lesmacros complémentaires ça ne fonctionne pas. Je voudrai éviter de mettre
unepause parec que j'ai 15 macros à mettre à jour et j'en aurai de + en +.
Merci d'avance.
John
Code 1 :
Public Function MAJ_Mod_JMO()
Dim i As Integer, fichier1 As String, fichier2 As String
On Error Resume Next
If MsgBox("Lancer la mise à jour des macros ?", vbYesNo +
vbQuestion,"Validation") = vbNo Then Exit Function
fichier1 = MakeFileName(GetTempDir, "Mod_JMO.bas")
fichier2 = MakeFileName(GetTempDir, "cAccesFile.bas")
ThisWorkbook.VBProject.VBComponents("Mod_JMO").Export fichier1
ThisWorkbook.VBProject.VBComponents("cAccesFile").Export fichier2
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("Mod_JMO")
Application.VBE.VBProjects(i).VBComponents.Remove
Application.VBE.VBProjects(i).VBComponents("cAccesFile")
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
End If
Next
' SaveAllProjects
For i = 1 To Application.VBE.VBProjects.Count
If Application.VBE.VBProjects(i).name <>
GetFileInfo(ThisWorkbook.name, Nom) And
Application.VBE.VBProjects(i).name<> "VBAProject" Then
Application.VBE.VBProjects(i).VBComponents.Import fichier1
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
Application.VBE.VBProjects(i).VBComponents.Import fichier2
Workbooks(GetFileInfo(Application.VBE.VBProjects(i).FileName,NomComplet)).Save
End If
Next
Kill fichier1
Kill fichier2
' SaveAllProjects
End Function
--
Cordialement,
Michel Gaboly
http://www.gaboly.com