OVH Cloud OVH Cloud

Coipe Code VBA dans plusieurs fichiers Excel

7 réponses
Avatar
Régis MATHIEU
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.

7 réponses

Avatar
Renfield
Ca ressemble à un ver, ton truc ^^
Avatar
Régis MATHIEU
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 ^^




Avatar
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
Avatar
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 ^^
>
>


Avatar
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
Avatar
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
Avatar
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