Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------
Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------
Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------
Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------
Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------
Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------
Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de celle -ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extraire
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les macros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la pro cédure
nomme les fichiers texte.
"Christophe" a écrit dans le message de news:
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" wrote:Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Show quoted text -
Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de celle -ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extraire
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les macros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la pro cédure
nomme les fichiers texte.
"Christophe" <c...@mail.doc.gov> a écrit dans le message de news:
1169720563.282653.99...@q2g2000cwa.googlegroups.com...
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" <michde...@hotmail.com> wrote:
Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Show quoted text -
Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de celle -ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extraire
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les macros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la pro cédure
nomme les fichiers texte.
"Christophe" a écrit dans le message de news:
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" wrote:Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Show quoted text -
Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de celle-ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extraire
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les macros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la procédure
nomme les fichiers texte.
"Christophe" a écrit dans le message de news:
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" wrote:Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Show quoted text -
Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de celle-ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extraire
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les macros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la procédure
nomme les fichiers texte.
"Christophe" <c...@mail.doc.gov> a écrit dans le message de news:
1169720563.282653.99...@q2g2000cwa.googlegroups.com...
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" <michde...@hotmail.com> wrote:
Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Show quoted text -
Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de celle-ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extraire
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les macros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la procédure
nomme les fichiers texte.
"Christophe" a écrit dans le message de news:
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" wrote:Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Show quoted text -
| essaie d'ouvrir des fichiers temporaires xls
De quoi ont l'air tes fichiers temporaires dans l'explorateur Windows ?
(leur orthographe)
"Christophe" a écrit dans le message de news:
Michel:
Merci. Je viens de tester ta macro qui à n'en pas douter fonction
parfaitement comme le confireme Marianne. Malheureusement pour ma part
je rencontre encore un problème (Run-time error 1004) au niveau de
Set Wk = Workbooks.Open(Fichier) dans Sub ExtraireLeCode(Fichier As
String, Chemin As String)
En fait la macro essaie d'ouvrir des fichiers temporaires xls créés
lorsque l'on ouvre par exemple un fichier excel joint dans LotusNotes
et ne les trouve pas parce qu'il s'agit de fichier temporaires qui ont
été vraissemblablement renommés ou supprimés ce qui explique le
plantage. Existe t-il un moyen de ne pas considérer les fichiers exel
que l'on ne trouve plus?
Sincères salutations.
Christophe
On Jan 25, 4:18 pm, "MichDenis" wrote:Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de cel le-ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extrai re
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les mac ros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la p rocédure
nomme les fichiers texte.
"Christophe" a écrit dans le message de news:
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" wrote:Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit fai re
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Sho w quoted text -- Hide quoted text -
- Show quoted text -
| essaie d'ouvrir des fichiers temporaires xls
De quoi ont l'air tes fichiers temporaires dans l'explorateur Windows ?
(leur orthographe)
"Christophe" <c...@mail.doc.gov> a écrit dans le message de news:
1170080197.841667.117...@s48g2000cws.googlegroups.com...
Michel:
Merci. Je viens de tester ta macro qui à n'en pas douter fonction
parfaitement comme le confireme Marianne. Malheureusement pour ma part
je rencontre encore un problème (Run-time error 1004) au niveau de
Set Wk = Workbooks.Open(Fichier) dans Sub ExtraireLeCode(Fichier As
String, Chemin As String)
En fait la macro essaie d'ouvrir des fichiers temporaires xls créés
lorsque l'on ouvre par exemple un fichier excel joint dans LotusNotes
et ne les trouve pas parce qu'il s'agit de fichier temporaires qui ont
été vraissemblablement renommés ou supprimés ce qui explique le
plantage. Existe t-il un moyen de ne pas considérer les fichiers exel
que l'on ne trouve plus?
Sincères salutations.
Christophe
On Jan 25, 4:18 pm, "MichDenis" <michde...@hotmail.com> wrote:
Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de cel le-ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extrai re
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les mac ros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la p rocédure
nomme les fichiers texte.
"Christophe" <c...@mail.doc.gov> a écrit dans le message de news:
1169720563.282653.99...@q2g2000cwa.googlegroups.com...
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" <michde...@hotmail.com> wrote:
Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit fai re
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Sho w quoted text -- Hide quoted text -
- Show quoted text -
| essaie d'ouvrir des fichiers temporaires xls
De quoi ont l'air tes fichiers temporaires dans l'explorateur Windows ?
(leur orthographe)
"Christophe" a écrit dans le message de news:
Michel:
Merci. Je viens de tester ta macro qui à n'en pas douter fonction
parfaitement comme le confireme Marianne. Malheureusement pour ma part
je rencontre encore un problème (Run-time error 1004) au niveau de
Set Wk = Workbooks.Open(Fichier) dans Sub ExtraireLeCode(Fichier As
String, Chemin As String)
En fait la macro essaie d'ouvrir des fichiers temporaires xls créés
lorsque l'on ouvre par exemple un fichier excel joint dans LotusNotes
et ne les trouve pas parce qu'il s'agit de fichier temporaires qui ont
été vraissemblablement renommés ou supprimés ce qui explique le
plantage. Existe t-il un moyen de ne pas considérer les fichiers exel
que l'on ne trouve plus?
Sincères salutations.
Christophe
On Jan 25, 4:18 pm, "MichDenis" wrote:Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de cel le-ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extrai re
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les mac ros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la p rocédure
nomme les fichiers texte.
"Christophe" a écrit dans le message de news:
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" wrote:Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit fai re
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Sho w quoted text -- Hide quoted text -
- Show quoted text -
| essaie d'ouvrir des fichiers temporaires xls
De quoi ont l'air tes fichiers temporaires dans l'explorateur Windows ?
(leur orthographe)
"Christophe" a écrit dans le message de news:
Michel:
Merci. Je viens de tester ta macro qui à n'en pas douter fonction
parfaitement comme le confireme Marianne. Malheureusement pour ma part
je rencontre encore un problème (Run-time error 1004) au niveau de
Set Wk = Workbooks.Open(Fichier) dans Sub ExtraireLeCode(Fichier As
String, Chemin As String)
En fait la macro essaie d'ouvrir des fichiers temporaires xls créés
lorsque l'on ouvre par exemple un fichier excel joint dans LotusNotes
et ne les trouve pas parce qu'il s'agit de fichier temporaires qui ont
été vraissemblablement renommés ou supprimés ce qui explique le
plantage. Existe t-il un moyen de ne pas considérer les fichiers exel
que l'on ne trouve plus?
Sincères salutations.
Christophe
On Jan 25, 4:18 pm, "MichDenis" wrote:Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de cel le-ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extrai re
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les mac ros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la p rocédure
nomme les fichiers texte.
"Christophe" a écrit dans le message de news:
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" wrote:Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit fai re
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Sho w quoted text -- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
| essaie d'ouvrir des fichiers temporaires xls
De quoi ont l'air tes fichiers temporaires dans l'explorateur Windows ?
(leur orthographe)
"Christophe" <c...@mail.doc.gov> a écrit dans le message de news:
1170080197.841667.117...@s48g2000cws.googlegroups.com...
Michel:
Merci. Je viens de tester ta macro qui à n'en pas douter fonction
parfaitement comme le confireme Marianne. Malheureusement pour ma part
je rencontre encore un problème (Run-time error 1004) au niveau de
Set Wk = Workbooks.Open(Fichier) dans Sub ExtraireLeCode(Fichier As
String, Chemin As String)
En fait la macro essaie d'ouvrir des fichiers temporaires xls créés
lorsque l'on ouvre par exemple un fichier excel joint dans LotusNotes
et ne les trouve pas parce qu'il s'agit de fichier temporaires qui ont
été vraissemblablement renommés ou supprimés ce qui explique le
plantage. Existe t-il un moyen de ne pas considérer les fichiers exel
que l'on ne trouve plus?
Sincères salutations.
Christophe
On Jan 25, 4:18 pm, "MichDenis" <michde...@hotmail.com> wrote:
Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de cel le-ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extrai re
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les mac ros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la p rocédure
nomme les fichiers texte.
"Christophe" <c...@mail.doc.gov> a écrit dans le message de news:
1169720563.282653.99...@q2g2000cwa.googlegroups.com...
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" <michde...@hotmail.com> wrote:
Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit fai re
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Sho w quoted text -- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
| essaie d'ouvrir des fichiers temporaires xls
De quoi ont l'air tes fichiers temporaires dans l'explorateur Windows ?
(leur orthographe)
"Christophe" a écrit dans le message de news:
Michel:
Merci. Je viens de tester ta macro qui à n'en pas douter fonction
parfaitement comme le confireme Marianne. Malheureusement pour ma part
je rencontre encore un problème (Run-time error 1004) au niveau de
Set Wk = Workbooks.Open(Fichier) dans Sub ExtraireLeCode(Fichier As
String, Chemin As String)
En fait la macro essaie d'ouvrir des fichiers temporaires xls créés
lorsque l'on ouvre par exemple un fichier excel joint dans LotusNotes
et ne les trouve pas parce qu'il s'agit de fichier temporaires qui ont
été vraissemblablement renommés ou supprimés ce qui explique le
plantage. Existe t-il un moyen de ne pas considérer les fichiers exel
que l'on ne trouve plus?
Sincères salutations.
Christophe
On Jan 25, 4:18 pm, "MichDenis" wrote:Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de cel le-ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extrai re
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les mac ros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la p rocédure
nomme les fichiers texte.
"Christophe" a écrit dans le message de news:
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" wrote:Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit fai re
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Sho w quoted text -- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
| essaie d'ouvrir des fichiers temporaires xls
De quoi ont l'air tes fichiers temporaires dans l'explorateur Windows ?
(leur orthographe)
"Christophe" a écrit dans le message de news:
Michel:
Merci. Je viens de tester ta macro qui à n'en pas douter fonction
parfaitement comme le confireme Marianne. Malheureusement pour ma part
je rencontre encore un problème (Run-time error 1004) au niveau de
Set Wk = Workbooks.Open(Fichier) dans Sub ExtraireLeCode(Fichier As
String, Chemin As String)
En fait la macro essaie d'ouvrir des fichiers temporaires xls créés
lorsque l'on ouvre par exemple un fichier excel joint dans LotusNotes
et ne les trouve pas parce qu'il s'agit de fichier temporaires qui ont
été vraissemblablement renommés ou supprimés ce qui explique le
plantage. Existe t-il un moyen de ne pas considérer les fichiers exel
que l'on ne trouve plus?
Sincères salutations.
Christophe
On Jan 25, 4:18 pm, "MichDenis" wrote:Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de celle-ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extraire
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les macros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la procédure
nomme les fichiers texte.
"Christophe" a écrit dans le message de news:
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" wrote:Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Show quoted text -- Masquer
le texte des messages précédents -
- Afficher le texte des messages précédents -
| essaie d'ouvrir des fichiers temporaires xls
De quoi ont l'air tes fichiers temporaires dans l'explorateur Windows ?
(leur orthographe)
"Christophe" <c...@mail.doc.gov> a écrit dans le message de news:
1170080197.841667.117...@s48g2000cws.googlegroups.com...
Michel:
Merci. Je viens de tester ta macro qui à n'en pas douter fonction
parfaitement comme le confireme Marianne. Malheureusement pour ma part
je rencontre encore un problème (Run-time error 1004) au niveau de
Set Wk = Workbooks.Open(Fichier) dans Sub ExtraireLeCode(Fichier As
String, Chemin As String)
En fait la macro essaie d'ouvrir des fichiers temporaires xls créés
lorsque l'on ouvre par exemple un fichier excel joint dans LotusNotes
et ne les trouve pas parce qu'il s'agit de fichier temporaires qui ont
été vraissemblablement renommés ou supprimés ce qui explique le
plantage. Existe t-il un moyen de ne pas considérer les fichiers exel
que l'on ne trouve plus?
Sincères salutations.
Christophe
On Jan 25, 4:18 pm, "MichDenis" <michde...@hotmail.com> wrote:
Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de celle-ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extraire
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les macros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la procédure
nomme les fichiers texte.
"Christophe" <c...@mail.doc.gov> a écrit dans le message de news:
1169720563.282653.99...@q2g2000cwa.googlegroups.com...
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" <michde...@hotmail.com> wrote:
Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Show quoted text -- Masquer
le texte des messages précédents -
- Afficher le texte des messages précédents -
| essaie d'ouvrir des fichiers temporaires xls
De quoi ont l'air tes fichiers temporaires dans l'explorateur Windows ?
(leur orthographe)
"Christophe" a écrit dans le message de news:
Michel:
Merci. Je viens de tester ta macro qui à n'en pas douter fonction
parfaitement comme le confireme Marianne. Malheureusement pour ma part
je rencontre encore un problème (Run-time error 1004) au niveau de
Set Wk = Workbooks.Open(Fichier) dans Sub ExtraireLeCode(Fichier As
String, Chemin As String)
En fait la macro essaie d'ouvrir des fichiers temporaires xls créés
lorsque l'on ouvre par exemple un fichier excel joint dans LotusNotes
et ne les trouve pas parce qu'il s'agit de fichier temporaires qui ont
été vraissemblablement renommés ou supprimés ce qui explique le
plantage. Existe t-il un moyen de ne pas considérer les fichiers exel
que l'on ne trouve plus?
Sincères salutations.
Christophe
On Jan 25, 4:18 pm, "MichDenis" wrote:Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de celle-ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extraire
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les macros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la procédure
nomme les fichiers texte.
"Christophe" a écrit dans le message de news:
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" wrote:Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Show quoted text -- Masquer
le texte des messages précédents -
- Afficher le texte des messages précédents -
| essaie d'ouvrir des fichiers temporaires xls
De quoi ont l'air tes fichiers temporaires dans l'explorateur Windows ?
(leur orthographe)
"Christophe" a écrit dans le message de news:
Michel:
Merci. Je viens de tester ta macro qui à n'en pas douter fonction
parfaitement comme le confireme Marianne. Malheureusement pour ma part
je rencontre encore un problème (Run-time error 1004) au niveau de
Set Wk = Workbooks.Open(Fichier) dans Sub ExtraireLeCode(Fichier As
String, Chemin As String)
En fait la macro essaie d'ouvrir des fichiers temporaires xls créés
lorsque l'on ouvre par exemple un fichier excel joint dans LotusNotes
et ne les trouve pas parce qu'il s'agit de fichier temporaires qui ont
été vraissemblablement renommés ou supprimés ce qui explique le
plantage. Existe t-il un moyen de ne pas considérer les fichiers exel
que l'on ne trouve plus?
Sincères salutations.
Christophe
On Jan 25, 4:18 pm, "MichDenis" wrote:Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de celle-ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extraire
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les macros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la procédure
nomme les fichiers texte.
"Christophe" a écrit dans le message de news:
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" wrote:Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Show quoted text -- Hide
quoted text -
- Show quoted text -
| essaie d'ouvrir des fichiers temporaires xls
De quoi ont l'air tes fichiers temporaires dans l'explorateur Windows ?
(leur orthographe)
"Christophe" <c...@mail.doc.gov> a écrit dans le message de news:
1170080197.841667.117...@s48g2000cws.googlegroups.com...
Michel:
Merci. Je viens de tester ta macro qui à n'en pas douter fonction
parfaitement comme le confireme Marianne. Malheureusement pour ma part
je rencontre encore un problème (Run-time error 1004) au niveau de
Set Wk = Workbooks.Open(Fichier) dans Sub ExtraireLeCode(Fichier As
String, Chemin As String)
En fait la macro essaie d'ouvrir des fichiers temporaires xls créés
lorsque l'on ouvre par exemple un fichier excel joint dans LotusNotes
et ne les trouve pas parce qu'il s'agit de fichier temporaires qui ont
été vraissemblablement renommés ou supprimés ce qui explique le
plantage. Existe t-il un moyen de ne pas considérer les fichiers exel
que l'on ne trouve plus?
Sincères salutations.
Christophe
On Jan 25, 4:18 pm, "MichDenis" <michde...@hotmail.com> wrote:
Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de celle-ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extraire
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les macros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la procédure
nomme les fichiers texte.
"Christophe" <c...@mail.doc.gov> a écrit dans le message de news:
1169720563.282653.99...@q2g2000cwa.googlegroups.com...
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" <michde...@hotmail.com> wrote:
Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Show quoted text -- Hide
quoted text -
- Show quoted text -
| essaie d'ouvrir des fichiers temporaires xls
De quoi ont l'air tes fichiers temporaires dans l'explorateur Windows ?
(leur orthographe)
"Christophe" a écrit dans le message de news:
Michel:
Merci. Je viens de tester ta macro qui à n'en pas douter fonction
parfaitement comme le confireme Marianne. Malheureusement pour ma part
je rencontre encore un problème (Run-time error 1004) au niveau de
Set Wk = Workbooks.Open(Fichier) dans Sub ExtraireLeCode(Fichier As
String, Chemin As String)
En fait la macro essaie d'ouvrir des fichiers temporaires xls créés
lorsque l'on ouvre par exemple un fichier excel joint dans LotusNotes
et ne les trouve pas parce qu'il s'agit de fichier temporaires qui ont
été vraissemblablement renommés ou supprimés ce qui explique le
plantage. Existe t-il un moyen de ne pas considérer les fichiers exel
que l'on ne trouve plus?
Sincères salutations.
Christophe
On Jan 25, 4:18 pm, "MichDenis" wrote:Remplace ceci :
Dim Comp As VBComponent
Par
Dim Comp As Object
Et si tu veux garder
Dim Comp As VBComponent
tu dois déclarer la bibliothèque suivante :
"Microsoft Visual basic for application extensibility 5.3"
| Est-ce que tu peux confirmer que dans ce cas les macros
| peuvent être identifiées sans que les fichiers Excel soient
| ouverts?
Non, la macro doit ouvrir les fichiers un à un pour en extraire
le code. Tous les fichiers Excel dont le projet VBA est protégé
par mot de passe sont inaccessibles par la macro. À chaque
classeur que la macro va rencontrer tu auras un message te
spécifiant le nom du classeur qu'elle ne peut pas copier le code.
Si tu lances la macro, telle qu'elle est écrite, l'exécution de celle-ci
pourrait prendre un bon moment (quelques minutes) car avant d'ouvrir
chacun des classeurs, elle doit scanner chacun des lecteurs pour extraire
la liste des fichiers Excel que le lecteur possède.
Chaque fichier texte est baptisé du nom du fichier Excel dont les macros
proviennent.... j'espère que tu n'as pas de doublons dans les noms de
tes fichiers Excel sinon il faudra modifier légèrement comment la procédure
nomme les fichiers texte.
"Christophe" a écrit dans le message de news:
Bonjour Michel:
Merci mille fois pour le post. Est-ce que tu peux confirmer que dans
ce cas les macros peuvent être identifiées sans que les fichiers
Excel soient ouverts?
J'obtiens une Compile error: "User-defined type not defined" au niveau
de la ligne/bloc Dim Comp As VBComponent, Temp As String
Remerciements et sinceres salutations.
Christophe
On Jan 24, 6:52 pm, "MichDenis" wrote:Voici une procédure qui copie dans un fichier texte toutes
les macros de chacun des fichiers des lecteurs C:, D: et J
Chaque fichier texte est créé dans le répertoire "c:Denis"
la macro se charge de créer ce répertoire si il n'existe pas.
Dans chaque fichier texte, on retrouve en haut,
le nom et le chemin complet du fichier.xls d'où provient
le code. De même, chaque module d'où provient le code
est identifié ... il est suivi du code qui lui appartient.
Attention, le code risque d'être longuet si la procédure doit faire
une recherche sur la totalité des lecteurs. Pour ce faire, tu peux
mettre à true ou à false cette ligne de code :
.SearchSubFolders = False dans la procédure Test
Comme ce code n'a pas été testé à fond, il est toujours
possible qu'il y ait des petits pépins !!! ;-)
'----------------------------------------------------
Sub test11()
Dim X As Integer, A As Integer
Dim Chemin As String
' Où sera copié le code de chaque ficnier
'chaque fichier aura un fichier texte si
'code trouvé dans ce répertoire
Chemin = "c:Denis"
Application.ScreenUpdating = False
For Each elt In Array("c:", "D:" , "J:")
With Application.FileSearch
.NewSearch
.LookIn = elt
.FileName = "*.xls"
.SearchSubFolders = True
If .Execute > 0 Then
X = .FoundFiles.Count
For A = 1 To X
If .FoundFiles(A) <> ThisWorkbook.FullName Then
ExtraireLeCode .FoundFiles(A), Chemin
End If
Next
End If
End With
Next
End Sub
'-------------------------------------------
Sub ExtraireLeCode(Fichier As String, Chemin As String)
Dim Code As String, Wk As Workbook
Dim Comp As VBComponent, Temp As String
Application.DisplayAlerts = False
Set Wk = Workbooks.Open(Fichier)
If Wk.HasPassword Then
Wk.Password = InputBox( _
"Entrer le mot de passe pour ce fichier: " & Wk.FullName)
End If
If Wk.VBProject.Protection = vbext_pp_locked Then
MsgBox "Le code de ce fichier est protégé." & _
" Le code n'a pas été copié." & vbCrLf & vbCrLf & _
Wk.FullName, vbCritical _
+ vbOKOnly, "Attention"
Wk.Close False
Exit Sub
End If
Code = vbCrLf & Wk.FullName & vbCrLf & vbCrLf
For Each Comp In Wk.VBProject.VBComponents
With Comp.codemodule
Temp = ""
On Error Resume Next
Temp = .Lines(1, .CountOfLines)
If Err = 0 Then
Code = Code & vbCrLf
Code = Code & Comp.Name & vbCrLf & vbCrLf
Code = Code & Temp & vbCrLf
Code = Code & vbCrLf
Else
Err = 0
End If
End With
Next
If Code <> vbCrLf & Wk.FullName & vbCrLf & vbCrLf Then
EcrireCodeDansFichierTexte _
Replace(Wk.Name, ".xls", ""), Chemin, Code
End If
Wk.Close False
End Sub
'-------------------------------------------
Sub EcrireCodeDansFichierTexte(SonNom As String, _
Chemin As String, Code As String)
Dim F As Long
If Dir(Chemin, vbDirectory) = "" Then
VBA.MkDir Chemin
End If
F = FreeFile
Vers = Chemin & SonNom & ".txt"
Open Vers For Output As #F
Write #F, Code
Close #F
End Sub
'-------------------------------------------- Hide quoted text -- Show quoted text -- Hide
quoted text -
- Show quoted text -