Bonjour à tous,
Voici mon pb :
J'ai créé une macro d'une vingtaine de lignes.
Je voudrais copier ce code dans 1000 fichier différents de et le faire par
programme en VB Excel !
Merci à tous ceux qui peuvent m'aider !
salutations.
Non c'est du sérieux : J'ai environ 1000 fichiers Excel dans lesquels j'ai fait une macro positionnée dans le module 1. Ensuite j'ai modifié le code du module 1 mais je n'ai pas envie de me tapper les 1000 fichiers pour y modifier le code, j'ai donc besoin d'une macro qui me le fera automatiquement. j'ai trouvé ce qu'il me faut mais il me reste un petit pb : c'est que le nouveau code s'ajoute à l'ancien ?? je voudrais supprimer l'ancien mais je n'y parviens pas !!
Voila ! et merci pour les tuyaux !!
"Renfield" a écrit :
Ca ressemble à un ver, ton truc ^^
Non c'est du sérieux : J'ai environ 1000 fichiers Excel dans lesquels j'ai
fait une macro positionnée dans le module 1.
Ensuite j'ai modifié le code du module 1 mais je n'ai pas envie de me tapper
les 1000 fichiers pour y modifier le code, j'ai donc besoin d'une macro qui
me le fera automatiquement. j'ai trouvé ce qu'il me faut mais il me reste un
petit pb : c'est que le nouveau code s'ajoute à l'ancien ?? je voudrais
supprimer l'ancien mais je n'y parviens pas !!
Non c'est du sérieux : J'ai environ 1000 fichiers Excel dans lesquels j'ai fait une macro positionnée dans le module 1. Ensuite j'ai modifié le code du module 1 mais je n'ai pas envie de me tapper les 1000 fichiers pour y modifier le code, j'ai donc besoin d'une macro qui me le fera automatiquement. j'ai trouvé ce qu'il me faut mais il me reste un petit pb : c'est que le nouveau code s'ajoute à l'ancien ?? je voudrais supprimer l'ancien mais je n'y parviens pas !!
Voila ! et merci pour les tuyaux !!
"Renfield" a écrit :
Ca ressemble à un ver, ton truc ^^
Fred
Dans : news:, Régis MATHIEU disait :
Non c'est du sérieux : J'ai environ 1000 fichiers Excel dans lesquels j'ai fait une macro positionnée dans le module 1. Ensuite j'ai modifié le code du module 1 mais je n'ai pas envie de me tapper les 1000 fichiers pour y modifier le code, j'ai donc besoin d'une macro qui me le fera automatiquement. j'ai trouvé ce qu'il me faut mais il me reste un petit pb : c'est que le nouveau code s'ajoute à l'ancien ?? je voudrais supprimer l'ancien mais je n'y parviens pas !!
Bonsoir, J'ai fait exactement ce que tu veux mais c'est au boulot :-( A priori tu as trouvé les objets qui permettent de manipuler les projets. Pourquoi ne pas supprimer simplement le module et réinsérer le nouveau ? Tu as une méthode remove sur la collection VBComponents (de mémoire) Sinon, si tu peux attendre lundi ... :-)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Dans : news:B18654D4-CFEE-408C-8C04-EEF8D4774FAF@microsoft.com,
Régis MATHIEU disait :
Non c'est du sérieux : J'ai environ 1000 fichiers Excel dans lesquels
j'ai fait une macro positionnée dans le module 1.
Ensuite j'ai modifié le code du module 1 mais je n'ai pas envie de me
tapper les 1000 fichiers pour y modifier le code, j'ai donc besoin
d'une macro qui me le fera automatiquement. j'ai trouvé ce qu'il me
faut mais il me reste un petit pb : c'est que le nouveau code
s'ajoute à l'ancien ?? je voudrais supprimer l'ancien mais je n'y
parviens pas !!
Bonsoir,
J'ai fait exactement ce que tu veux mais c'est au boulot :-(
A priori tu as trouvé les objets qui permettent de manipuler les
projets.
Pourquoi ne pas supprimer simplement le module et réinsérer le nouveau ?
Tu as une méthode remove sur la collection VBComponents (de mémoire)
Sinon, si tu peux attendre lundi ... :-)
Non c'est du sérieux : J'ai environ 1000 fichiers Excel dans lesquels j'ai fait une macro positionnée dans le module 1. Ensuite j'ai modifié le code du module 1 mais je n'ai pas envie de me tapper les 1000 fichiers pour y modifier le code, j'ai donc besoin d'une macro qui me le fera automatiquement. j'ai trouvé ce qu'il me faut mais il me reste un petit pb : c'est que le nouveau code s'ajoute à l'ancien ?? je voudrais supprimer l'ancien mais je n'y parviens pas !!
Bonsoir, J'ai fait exactement ce que tu veux mais c'est au boulot :-( A priori tu as trouvé les objets qui permettent de manipuler les projets. Pourquoi ne pas supprimer simplement le module et réinsérer le nouveau ? Tu as une méthode remove sur la collection VBComponents (de mémoire) Sinon, si tu peux attendre lundi ... :-)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Hervé
Bonjour Régis, Regarde si cela te conviens, les explications sont dans le code. Il te faut faire une boucle (indiqué dans le code) pour ouvrir successivement tous les classeurs avant d'intervenir dessus. Attention, il te faut peut être désactiver ton anti virus avant d'enregistrer le classeur où tu vas coller ce code car il risque de le détecter comme étant un virus (Norton vient de me le faire :o(( ) :
Sub Modif() Dim VBP As Object Dim Chemin As String Dim NouveauModule As String Dim AncienModule As String
'adapte le nom de chaque module NouveauModule = "Module2005" AncienModule = "Module2004" 'module supprimé
Chemin = ThisWorkbook.Path & "" & NouveauModule & ".bas" 'export du module dans le même dossier que le classeur 'servant pour la mise à jour (celui où se trouve cette proc) Set VBP = ThisWorkbook.VBProject VBP.VBComponents(NouveauModule).Export Chemin
'BOUCLE..... 'ici il te faut ouvrir les classeurs les uns 'après les autres et passer leur nom à la proc '"RemplacerModule" ainsi que le nom du module à remplacer 'et le chemin du module à importer RemplacerModule "Classeur2.xls", AncienModule, Chemin 'ensuite tu sauvegarde, tu ferme et tu passe au suivant
Set VBP = Nothing End Sub
Sub RemplacerModule(NomClasseur As String, _ AncienModule As String, _ Chemin As String)
Dim VBP As Object
Set VBP = Workbooks(NomClasseur).VBProject With VBP.VBComponents 'suppression de l'ancien module .Remove VBP.VBComponents(AncienModule) 'importation du nouveau module .Import Chemin End With
Set VBP = Nothing End Sub
Hervé.
"Régis MATHIEU" a écrit dans le message de news:
Non c'est du sérieux : J'ai environ 1000 fichiers Excel dans lesquels j'ai fait une macro positionnée dans le module 1. Ensuite j'ai modifié le code du module 1 mais je n'ai pas envie de me
tapper
les 1000 fichiers pour y modifier le code, j'ai donc besoin d'une macro
qui
me le fera automatiquement. j'ai trouvé ce qu'il me faut mais il me reste
un
petit pb : c'est que le nouveau code s'ajoute à l'ancien ?? je voudrais supprimer l'ancien mais je n'y parviens pas !!
Voila ! et merci pour les tuyaux !!
"Renfield" a écrit :
> Ca ressemble à un ver, ton truc ^^ > >
Bonjour Régis,
Regarde si cela te conviens, les explications sont dans le code. Il te faut
faire une boucle (indiqué dans le code) pour ouvrir successivement tous les
classeurs avant d'intervenir dessus. Attention, il te faut peut être
désactiver ton anti virus avant d'enregistrer le classeur où tu vas coller
ce code car il risque de le détecter comme étant un virus (Norton vient de
me le faire :o(( ) :
Sub Modif()
Dim VBP As Object
Dim Chemin As String
Dim NouveauModule As String
Dim AncienModule As String
'adapte le nom de chaque module
NouveauModule = "Module2005"
AncienModule = "Module2004" 'module supprimé
Chemin = ThisWorkbook.Path & "" & NouveauModule & ".bas"
'export du module dans le même dossier que le classeur
'servant pour la mise à jour (celui où se trouve cette proc)
Set VBP = ThisWorkbook.VBProject
VBP.VBComponents(NouveauModule).Export Chemin
'BOUCLE.....
'ici il te faut ouvrir les classeurs les uns
'après les autres et passer leur nom à la proc
'"RemplacerModule" ainsi que le nom du module à remplacer
'et le chemin du module à importer
RemplacerModule "Classeur2.xls", AncienModule, Chemin
'ensuite tu sauvegarde, tu ferme et tu passe au suivant
Set VBP = Nothing
End Sub
Sub RemplacerModule(NomClasseur As String, _
AncienModule As String, _
Chemin As String)
Dim VBP As Object
Set VBP = Workbooks(NomClasseur).VBProject
With VBP.VBComponents
'suppression de l'ancien module
.Remove VBP.VBComponents(AncienModule)
'importation du nouveau module
.Import Chemin
End With
Set VBP = Nothing
End Sub
Hervé.
"Régis MATHIEU" <RgisMATHIEU@discussions.microsoft.com> a écrit dans le
message de news: B18654D4-CFEE-408C-8C04-EEF8D4774FAF@microsoft.com...
Non c'est du sérieux : J'ai environ 1000 fichiers Excel dans lesquels j'ai
fait une macro positionnée dans le module 1.
Ensuite j'ai modifié le code du module 1 mais je n'ai pas envie de me
tapper
les 1000 fichiers pour y modifier le code, j'ai donc besoin d'une macro
qui
me le fera automatiquement. j'ai trouvé ce qu'il me faut mais il me reste
un
petit pb : c'est que le nouveau code s'ajoute à l'ancien ?? je voudrais
supprimer l'ancien mais je n'y parviens pas !!
Bonjour Régis, Regarde si cela te conviens, les explications sont dans le code. Il te faut faire une boucle (indiqué dans le code) pour ouvrir successivement tous les classeurs avant d'intervenir dessus. Attention, il te faut peut être désactiver ton anti virus avant d'enregistrer le classeur où tu vas coller ce code car il risque de le détecter comme étant un virus (Norton vient de me le faire :o(( ) :
Sub Modif() Dim VBP As Object Dim Chemin As String Dim NouveauModule As String Dim AncienModule As String
'adapte le nom de chaque module NouveauModule = "Module2005" AncienModule = "Module2004" 'module supprimé
Chemin = ThisWorkbook.Path & "" & NouveauModule & ".bas" 'export du module dans le même dossier que le classeur 'servant pour la mise à jour (celui où se trouve cette proc) Set VBP = ThisWorkbook.VBProject VBP.VBComponents(NouveauModule).Export Chemin
'BOUCLE..... 'ici il te faut ouvrir les classeurs les uns 'après les autres et passer leur nom à la proc '"RemplacerModule" ainsi que le nom du module à remplacer 'et le chemin du module à importer RemplacerModule "Classeur2.xls", AncienModule, Chemin 'ensuite tu sauvegarde, tu ferme et tu passe au suivant
Set VBP = Nothing End Sub
Sub RemplacerModule(NomClasseur As String, _ AncienModule As String, _ Chemin As String)
Dim VBP As Object
Set VBP = Workbooks(NomClasseur).VBProject With VBP.VBComponents 'suppression de l'ancien module .Remove VBP.VBComponents(AncienModule) 'importation du nouveau module .Import Chemin End With
Set VBP = Nothing End Sub
Hervé.
"Régis MATHIEU" a écrit dans le message de news:
Non c'est du sérieux : J'ai environ 1000 fichiers Excel dans lesquels j'ai fait une macro positionnée dans le module 1. Ensuite j'ai modifié le code du module 1 mais je n'ai pas envie de me
tapper
les 1000 fichiers pour y modifier le code, j'ai donc besoin d'une macro
qui
me le fera automatiquement. j'ai trouvé ce qu'il me faut mais il me reste
un
petit pb : c'est que le nouveau code s'ajoute à l'ancien ?? je voudrais supprimer l'ancien mais je n'y parviens pas !!
Voila ! et merci pour les tuyaux !!
"Renfield" a écrit :
> Ca ressemble à un ver, ton truc ^^ > >
Régis MATHIEU
Bonjour Hervé,
c'est effectivement un bon moyen ! je viens de le tester et ça fonctionne ! je n'ai plus qu'à l'appliquer sur mes fichiers.
Merci encore.
Régis MATHIEU
Bonjour Hervé,
c'est effectivement un bon moyen !
je viens de le tester et ça fonctionne ! je n'ai plus qu'à l'appliquer sur
mes fichiers.
c'est effectivement un bon moyen ! je viens de le tester et ça fonctionne ! je n'ai plus qu'à l'appliquer sur mes fichiers.
Merci encore.
Régis MATHIEU
Régis MATHIEU
Re-bonjour à tous ! Bien du mal à men sortir ! Ci-dessous le code que je teste et le contenu du fichier : "Macro Création Fichier.DIF pour relevé Heures.txt" ne s'ajoute pas dans Module1
Qui peut me dire où est l'erreur ?
Merci de votre aide.
Sub traitement_de_groupe() Application.ScreenUpdating = False Dim F With Application.FileSearch .NewSearch .LookIn = "C:Documents and SettingsAdministrateurBureauDemarey julienTest Duplication MacroDossiers à ImplémenterW34" .Execute 'On Error Resume Next For Each F In .FoundFiles Workbooks.Open F
With ActiveWorkbook.VBProject.VBComponents .Remove .Item("module1") End With
With ActiveWorkbook.VBProject.VBComponents .Add (vbext_ct_StdModule) End With a_inserer = ActiveWorkbook.VBProject.VBComponents("Module1").Name
insertion_macro a_inserer ActiveWorkbook.Close True Next F End With Application.ScreenUpdating = True End Sub
'cette procedure devrait lire le contenu d'un fichier texte et l'ajouter ' au bloc Module1 de chaque fichier excel dans le dossier Sub insertion_macro(a_inserer)
For Each vbcomp In ActiveWorkbook.VBProject.VBComponents If vbcomp.Name = a_inserer Then With vbcomp.CodeModule .AddFromFile ("C:Documents and SettingsAdministrateurBureauDemarey julienTest Duplication MacroMacro Création Fichier.DIF pour relevé Heures.txt") End With End If Exit For
Next vbcomp End Sub
Re-bonjour à tous !
Bien du mal à men sortir !
Ci-dessous le code que je teste et le contenu du fichier : "Macro Création
Fichier.DIF pour relevé Heures.txt" ne s'ajoute pas dans Module1
Qui peut me dire où est l'erreur ?
Merci de votre aide.
Sub traitement_de_groupe()
Application.ScreenUpdating = False
Dim F
With Application.FileSearch
.NewSearch
.LookIn = "C:Documents and SettingsAdministrateurBureauDemarey
julienTest Duplication MacroDossiers à ImplémenterW34"
.Execute
'On Error Resume Next
For Each F In .FoundFiles
Workbooks.Open F
With ActiveWorkbook.VBProject.VBComponents
.Remove .Item("module1")
End With
With ActiveWorkbook.VBProject.VBComponents
.Add (vbext_ct_StdModule)
End With
a_inserer = ActiveWorkbook.VBProject.VBComponents("Module1").Name
insertion_macro a_inserer
ActiveWorkbook.Close True
Next F
End With
Application.ScreenUpdating = True
End Sub
'cette procedure devrait lire le contenu d'un fichier texte et l'ajouter
' au bloc Module1 de chaque fichier excel dans le dossier
Sub insertion_macro(a_inserer)
For Each vbcomp In ActiveWorkbook.VBProject.VBComponents
If vbcomp.Name = a_inserer Then
With vbcomp.CodeModule
.AddFromFile ("C:Documents and
SettingsAdministrateurBureauDemarey julienTest Duplication MacroMacro
Création Fichier.DIF pour relevé Heures.txt")
End With
End If
Exit For
Re-bonjour à tous ! Bien du mal à men sortir ! Ci-dessous le code que je teste et le contenu du fichier : "Macro Création Fichier.DIF pour relevé Heures.txt" ne s'ajoute pas dans Module1
Qui peut me dire où est l'erreur ?
Merci de votre aide.
Sub traitement_de_groupe() Application.ScreenUpdating = False Dim F With Application.FileSearch .NewSearch .LookIn = "C:Documents and SettingsAdministrateurBureauDemarey julienTest Duplication MacroDossiers à ImplémenterW34" .Execute 'On Error Resume Next For Each F In .FoundFiles Workbooks.Open F
With ActiveWorkbook.VBProject.VBComponents .Remove .Item("module1") End With
With ActiveWorkbook.VBProject.VBComponents .Add (vbext_ct_StdModule) End With a_inserer = ActiveWorkbook.VBProject.VBComponents("Module1").Name
insertion_macro a_inserer ActiveWorkbook.Close True Next F End With Application.ScreenUpdating = True End Sub
'cette procedure devrait lire le contenu d'un fichier texte et l'ajouter ' au bloc Module1 de chaque fichier excel dans le dossier Sub insertion_macro(a_inserer)
For Each vbcomp In ActiveWorkbook.VBProject.VBComponents If vbcomp.Name = a_inserer Then With vbcomp.CodeModule .AddFromFile ("C:Documents and SettingsAdministrateurBureauDemarey julienTest Duplication MacroMacro Création Fichier.DIF pour relevé Heures.txt") End With End If Exit For
Next vbcomp End Sub
Fred
http://www.cerbermail.com/?3kA6ftaCvT "Régis MATHIEU" a écrit dans le message de news:
Re-bonjour à tous ! Bien du mal à men sortir ! Ci-dessous le code que je teste et le contenu du fichier : "Macro
Création
Fichier.DIF pour relevé Heures.txt" ne s'ajoute pas dans Module1
Bonjour, J'ai procédé un de manière un peu différente, en utilisant la méthode Import. Dans mon cas, il s'agissait de remplacer le module. Mais je crois que c'est aussi ce que tu veux faire. Voilà la fonction qui réalisait mes actualisations. C'est une macro qui se trouve dans un fichier Excel et qui modifie des fichiers Word. J'ai utilisé l'objet Scripting.File (pour d'autres raisons) mais il est facile de s'en passer ici, puisque seul le nom du fichier est utilisé (avec son chemin). Les fichiers .BAS à insérer se trouvent dans le même répertoire que le fichier XL (contenant la macro) et les fichiers Word à modifier. À utiliser pour chaque fichier retourné par ta recherche.
Sub MAJ_Modele(oFile As Scripting.File) On Local Error GoTo Erreur oWord.Documents.Open oFile.Path Dim oDoc As Word.Document Dim ModulePath As String Set oDoc = oWord.ActiveDocument If oDoc.ReadOnly Then oDoc.Close False Exit Sub End If Dim oVBComponent As VBComponent For Each oVBComponent In oDoc.VBProject.VBComponents If oVBComponent.Name = "Macros" Or oVBComponent.Name = "InitEnv" Then oDoc.VBProject.VBComponents.Remove oVBComponent End If Next With oDoc.VBProject.VBComponents ModulePath = oFile.ParentFolder.Path & "Macros.bas" Set oVBComponent = .Import(ModulePath) oVBComponent.Name = "Macros" ModulePath = oFile.ParentFolder.Path & "InitEnv.bas" Set oVBComponent = .Import(ModulePath) oVBComponent.Name = "InitEnv" End With oWorkSheet.Cells(lg, 1).Value = oFile.Path oWorkSheet.Cells(lg, 2).Value = "OK" oDoc.Save oDoc.Close Exit Sub Erreur: oWorkSheet.Cells(lg, 1).Value = oFile.Path oWorkSheet.Cells(lg, 2).Value = "Echec" oDoc.Close False End Sub
http://www.cerbermail.com/?3kA6ftaCvT
"Régis MATHIEU" <RgisMATHIEU@discussions.microsoft.com> a écrit dans le
message de news:D29A3F65-420F-4F31-B4BD-7B17923F0AFD@microsoft.com...
Re-bonjour à tous !
Bien du mal à men sortir !
Ci-dessous le code que je teste et le contenu du fichier : "Macro
Création
Fichier.DIF pour relevé Heures.txt" ne s'ajoute pas dans Module1
Bonjour,
J'ai procédé un de manière un peu différente, en utilisant la méthode
Import.
Dans mon cas, il s'agissait de remplacer le module. Mais je crois que
c'est aussi ce que tu veux faire.
Voilà la fonction qui réalisait mes actualisations.
C'est une macro qui se trouve dans un fichier Excel et qui modifie des
fichiers Word.
J'ai utilisé l'objet Scripting.File (pour d'autres raisons) mais il est
facile de s'en passer ici, puisque seul le nom du fichier est utilisé
(avec son chemin).
Les fichiers .BAS à insérer se trouvent dans le même répertoire que le
fichier XL (contenant la macro) et les fichiers Word à modifier.
À utiliser pour chaque fichier retourné par ta recherche.
Sub MAJ_Modele(oFile As Scripting.File)
On Local Error GoTo Erreur
oWord.Documents.Open oFile.Path
Dim oDoc As Word.Document
Dim ModulePath As String
Set oDoc = oWord.ActiveDocument
If oDoc.ReadOnly Then
oDoc.Close False
Exit Sub
End If
Dim oVBComponent As VBComponent
For Each oVBComponent In oDoc.VBProject.VBComponents
If oVBComponent.Name = "Macros" Or oVBComponent.Name = "InitEnv"
Then
oDoc.VBProject.VBComponents.Remove oVBComponent
End If
Next
With oDoc.VBProject.VBComponents
ModulePath = oFile.ParentFolder.Path & "Macros.bas"
Set oVBComponent = .Import(ModulePath)
oVBComponent.Name = "Macros"
ModulePath = oFile.ParentFolder.Path & "InitEnv.bas"
Set oVBComponent = .Import(ModulePath)
oVBComponent.Name = "InitEnv"
End With
oWorkSheet.Cells(lg, 1).Value = oFile.Path
oWorkSheet.Cells(lg, 2).Value = "OK"
oDoc.Save
oDoc.Close
Exit Sub
Erreur:
oWorkSheet.Cells(lg, 1).Value = oFile.Path
oWorkSheet.Cells(lg, 2).Value = "Echec"
oDoc.Close False
End Sub
http://www.cerbermail.com/?3kA6ftaCvT "Régis MATHIEU" a écrit dans le message de news:
Re-bonjour à tous ! Bien du mal à men sortir ! Ci-dessous le code que je teste et le contenu du fichier : "Macro
Création
Fichier.DIF pour relevé Heures.txt" ne s'ajoute pas dans Module1
Bonjour, J'ai procédé un de manière un peu différente, en utilisant la méthode Import. Dans mon cas, il s'agissait de remplacer le module. Mais je crois que c'est aussi ce que tu veux faire. Voilà la fonction qui réalisait mes actualisations. C'est une macro qui se trouve dans un fichier Excel et qui modifie des fichiers Word. J'ai utilisé l'objet Scripting.File (pour d'autres raisons) mais il est facile de s'en passer ici, puisque seul le nom du fichier est utilisé (avec son chemin). Les fichiers .BAS à insérer se trouvent dans le même répertoire que le fichier XL (contenant la macro) et les fichiers Word à modifier. À utiliser pour chaque fichier retourné par ta recherche.
Sub MAJ_Modele(oFile As Scripting.File) On Local Error GoTo Erreur oWord.Documents.Open oFile.Path Dim oDoc As Word.Document Dim ModulePath As String Set oDoc = oWord.ActiveDocument If oDoc.ReadOnly Then oDoc.Close False Exit Sub End If Dim oVBComponent As VBComponent For Each oVBComponent In oDoc.VBProject.VBComponents If oVBComponent.Name = "Macros" Or oVBComponent.Name = "InitEnv" Then oDoc.VBProject.VBComponents.Remove oVBComponent End If Next With oDoc.VBProject.VBComponents ModulePath = oFile.ParentFolder.Path & "Macros.bas" Set oVBComponent = .Import(ModulePath) oVBComponent.Name = "Macros" ModulePath = oFile.ParentFolder.Path & "InitEnv.bas" Set oVBComponent = .Import(ModulePath) oVBComponent.Name = "InitEnv" End With oWorkSheet.Cells(lg, 1).Value = oFile.Path oWorkSheet.Cells(lg, 2).Value = "OK" oDoc.Save oDoc.Close Exit Sub Erreur: oWorkSheet.Cells(lg, 1).Value = oFile.Path oWorkSheet.Cells(lg, 2).Value = "Echec" oDoc.Close False End Sub