OVH Cloud OVH Cloud

Détecter la présence de macro

8 réponses
Avatar
jch_couvreur
Bonjour,


J'ai un répertoire avec une foule de fichier excel:
Ceux qui n'ont pas de macro restent tels quels, ceux qui contiennent
une macro doivent être modifiés...
Comment faire pour détecterla présence de macro dans un fichier
excel sans l'ouvrir?

Merci de votre aide

JtR

8 réponses

Avatar
Bob Phillips
Pas possible AFAIK. Le fichier doit etre ouvert.

--

HTH

RP
(remove nothere from the email address if mailing direct)


"jcouture" wrote in message
news:
Bonjour,


J'ai un répertoire avec une foule de fichier excel:
Ceux qui n'ont pas de macro restent tels quels, ceux qui contiennent
une macro doivent être modifiés...
Comment faire pour détecterla présence de macro dans un fichier
excel sans l'ouvrir?

Merci de votre aide

JtR


Avatar
Michel Pierron
Bonjour Bob;
C'est possible avec DSOFile.dll et "HASMACROS" property.
MP

"Bob Phillips" a écrit dans le message
de news:
Pas possible AFAIK. Le fichier doit etre ouvert.

--

HTH

RP
(remove nothere from the email address if mailing direct)


"jcouture" wrote in message
news:
Bonjour,


J'ai un répertoire avec une foule de fichier excel:
Ceux qui n'ont pas de macro restent tels quels, ceux qui contiennent
une macro doivent être modifiés...
Comment faire pour détecterla présence de macro dans un fichier
excel sans l'ouvrir?

Merci de votre aide

JtR






Avatar
Clément Marcotte
Bonjour,

C'est possible avec DSOFile.dll et "HASMACROS" property.


(Presque) plus maintenant. La nouvelle version de DSOFIle (2.0), qui
date de quelques jours, ne le permet plus. Ceux qui ont la version 1.4
le peuvent toujours. Pour peu que j'ai pu le constater, il y a quand
même moyen de faire coexister les deux versions sur la même machine,
pour peu qu'elles soient dans des dossiers différents.

Cependant, comme les objets et méthodes diffèrent d'une version à
l'autre, il faut adapter les procédures en conséquence.

Un fil récent là-dessus et les résultat de mes expériences:

http://groups.google.com/groups?hl=fr&lr=&c2coff=1&threadm=%23bnthkm5EHA.3828%40TK2MSFTNGP09.phx.gbl&rnum=1&prev=/groups%3Fq%3Dsummaryproperties%2Bgroup:microsoft.public.fr.excel%26hl%3Dfr%26lr%3D%26c2coff%3D1%26scoring%3Dd%26selm%3D%2523bnthkm5EHA.3828%2540TK2MSFTNGP09.phx.gbl%26rnum%3D1

Avatar
Clément Marcotte
Bonjour,

Cela semble être encore bon pour la version 1.4:

http://download.microsoft.com/download/office97dev/utility/2/win98/en-us/dsofile.exe



"Clément Marcotte" a écrit dans le
message de news:
Bonjour,

C'est possible avec DSOFile.dll et "HASMACROS" property.


(Presque) plus maintenant. La nouvelle version de DSOFIle (2.0), qui
date de quelques jours, ne le permet plus. Ceux qui ont la version
1.4

le peuvent toujours. Pour peu que j'ai pu le constater, il y a quand
même moyen de faire coexister les deux versions sur la même machine,
pour peu qu'elles soient dans des dossiers différents.

Cependant, comme les objets et méthodes diffèrent d'une version à
l'autre, il faut adapter les procédures en conséquence.

Un fil récent là-dessus et les résultat de mes expériences:


http://groups.google.com/groups?hl=fr&lr=&c2coff=1&threadm=%23bnthkm5EHA.3828%40TK2MSFTNGP09.phx.gbl&rnum=1&prev=/groups%3Fq%3Dsummaryproperties%2Bgroup:microsoft.public.fr.excel%26hl%3Dfr%26lr%3D%26c2coff%3D1%26scoring%3Dd%26selm%3D%2523bnthkm5EHA.3828%2540TK2MSFTNGP09.phx.gbl%26rnum%3D1








Avatar
Bob Phillips
Bonjour Michel,

Merci pour cette information.

Je n'ai pas su que DSOFile DocumentProperties a une propriété de HasMacros.
J'oublie souvent DSOFile. Un au dossier.

Merci encore.

Bob

"Michel Pierron" wrote in message
news:O20f%
Bonjour Bob;
C'est possible avec DSOFile.dll et "HASMACROS" property.
MP

"Bob Phillips" a écrit dans le message
de news:
Pas possible AFAIK. Le fichier doit etre ouvert.

--

HTH

RP
(remove nothere from the email address if mailing direct)


"jcouture" wrote in message
news:
Bonjour,


J'ai un répertoire avec une foule de fichier excel:
Ceux qui n'ont pas de macro restent tels quels, ceux qui contiennent
une macro doivent être modifiés...
Comment faire pour détecterla présence de macro dans un fichier
excel sans l'ouvrir?

Merci de votre aide

JtR









Avatar
Clément Marcotte
Bonjour,

Je n'ai pas su que DSOFile DocumentProperties a une propriété de
HasMacros.


Pas la version 2.0 du 8 décembre...

Garde ta vieille version (1.4) en réserve.

Avatar
PMO
Bonjour,

Un code pour déterminer ce que contient chaque classeur
d'un dossier défini.
Adaptez la constante "Chemin" selon le dossier que vous
voulez cibler et n'oubliez pas le caractère backslash ()
à la fin du chemin qui est nécessaire à la macro.

CELA FAIT (en gros)
1) Trouve tous les fichiers .xls dans le dossier choisi
2) Trouve les composants VBE de chaque Classeur
(si le code est protégé ce sera indiqué)
3) Affiche dans une nouvelle feuille le nom de chaque
classeur puis le nom des éléments trouvés.

'***********************
'### Adapter la constante "Chemin" ###
'### à votre usage. Surtout ne pas ###
'### oublier le backslash de fin () ###
Const Chemin As String = "c:Dossier essai"
'__________________________________________
Option Explicit
Sub DetecterMacro()
Dim A$
Dim WB As Workbook
Dim R As Range
Dim VBC As Object
Dim NoDo As Boolean
Dim Lig&
Dim i&
On Error GoTo Erreur
Application.ScreenUpdating = False
ThisWorkbook.Sheets.Add before:=Sheets(1)
A$ = Dir(Chemin & "*.xls", vbNormal)
Do Until A$ = ""
Lig& = Lig& + 1
Range("a" & Lig&) = A$
Set WB = GetObject(Chemin & A$)
For i& = 1 To WB.VBProject.VBComponents.Count
If NoDo = False Then
Set R = Range(Cells(Lig&, i& + 1), _
Cells(Lig&, i& + 1))
Set VBC = WB.VBProject.VBComponents(i&)
R = VBC.Name
If VBC.Type < 100 Then _
R.Interior.ColorIndex = 35 + VBC.Type
End If
NoDo = False
Next i&
WB.Close
Set WB = Nothing
A$ = Dir
Loop
Columns.AutoFit
Exit Sub
Erreur:
If Err = 50289 Then
Range("b" & Lig&) = _
"Le code nécessite un mot de passe"
NoDo = True
Resume Next
Else
Application.ScreenUpdating = True
End If
End Sub
'***********************

Est-ce que ça vous va ?

Cordialement.

PMO
Patrick Morange



Bonjour,


J'ai un répertoire avec une foule de fichier excel:
Ceux qui n'ont pas de macro restent tels quels, ceux qui contiennent
une macro doivent être modifiés...
Comment faire pour détecterla présence de macro dans un fichier
excel sans l'ouvrir?

Merci de votre aide

JtR



Avatar
JCouture
Merci à tous pour votre aide, et en particulier à Patrick pour le code (qui
me va parfaitement)

Bonnes fêtes à tous

JtR


Bonjour,

Un code pour déterminer ce que contient chaque classeur
d'un dossier défini.
Adaptez la constante "Chemin" selon le dossier que vous
voulez cibler et n'oubliez pas le caractère backslash ()
à la fin du chemin qui est nécessaire à la macro.

CELA FAIT (en gros)
1) Trouve tous les fichiers .xls dans le dossier choisi
2) Trouve les composants VBE de chaque Classeur
(si le code est protégé ce sera indiqué)
3) Affiche dans une nouvelle feuille le nom de chaque
classeur puis le nom des éléments trouvés.

'***********************
'### Adapter la constante "Chemin" ###
'### à votre usage. Surtout ne pas ###
'### oublier le backslash de fin () ###
Const Chemin As String = "c:Dossier essai"
'__________________________________________
Option Explicit
Sub DetecterMacro()
Dim A$
Dim WB As Workbook
Dim R As Range
Dim VBC As Object
Dim NoDo As Boolean
Dim Lig&
Dim i&
On Error GoTo Erreur
Application.ScreenUpdating = False
ThisWorkbook.Sheets.Add before:=Sheets(1)
A$ = Dir(Chemin & "*.xls", vbNormal)
Do Until A$ = ""
Lig& = Lig& + 1
Range("a" & Lig&) = A$
Set WB = GetObject(Chemin & A$)
For i& = 1 To WB.VBProject.VBComponents.Count
If NoDo = False Then
Set R = Range(Cells(Lig&, i& + 1), _
Cells(Lig&, i& + 1))
Set VBC = WB.VBProject.VBComponents(i&)
R = VBC.Name
If VBC.Type < 100 Then _
R.Interior.ColorIndex = 35 + VBC.Type
End If
NoDo = False
Next i&
WB.Close
Set WB = Nothing
A$ = Dir
Loop
Columns.AutoFit
Exit Sub
Erreur:
If Err = 50289 Then
Range("b" & Lig&) = _
"Le code nécessite un mot de passe"
NoDo = True
Resume Next
Else
Application.ScreenUpdating = True
End If
End Sub
'***********************

Est-ce que ça vous va ?

Cordialement.

PMO
Patrick Morange