1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| Sub RechercheMot()
Dim Compteur, Wbk As Workbook, MotRecherché
MotRecherché = InputBox("", "CHOISIR LE MOT RECHERCHÉ")
With Application.FileDialog(msoFileDialogFilePicker)
.Filters.Clear
.Filters.Add "Classeur xlsm", "*.xlsm"
.AllowMultiSelect = True
.Show
For Compteur = 1 To .SelectedItems.Count
'Ouverture et masquage de l'objet en question
Set Wbk = GetObject(PathName:=.SelectedItems(Compteur))
nomFichier = Split(.SelectedItems(Compteur), "\")(UBound(Split(.SelectedItems(Compteur), "\")))
If Not ValConst(Workbooks(nomFichier), "un_e21") = ValConst(ThisWorkbook, "un_e21") Then
'If Not ValConst(Workbooks(nomFichier), MotRecherché) = ValConst(ThisWorkbook, MotRecherché) Then 'BUG Type d'argument ByRef incompatible
MsgBox "Les constantes sont différentes dans le classeur : " & nomFichier
Else
MsgBox "Les constantes sont identiques dans le classeur : " & nomFichier
'lister les fichiers conntenant le mot recherché dans une feuille du classeur
Sheets("Résultat").Columns("A:A").Find("*", [A1], , , , xlPrevious).Offset(1, 0) = .SelectedItems(Compteur)
Sheets("Résultat").Columns("A:A").EntireColumn.AutoFit
End If
'Fermeture de l'objet (Wbk) sans sauvegarde
Wbk.Close SaveChanges:=False
Next
End With
End Sub
Function ValConst(Classeur As Workbook, NomConstante As String, Optional NomModule As String = "Module1") As String
' recherche dans le module "NomModule" du classeur indiqué la ligne de code de déclaration de la Constante
' la fonction retournera la valeur de la constante
Dim LeModule As Object
Dim i As Long
' on tente d'instancier le module
On Error Resume Next
Set LeModule = Classeur.VBProject.VBComponents(NomModule)
On Error GoTo 0
' si ça échoue : message indiquant que le module n'existe pas
If LeModule Is Nothing Then
ValConst = "ECHEC : Le Module " & NomModule & " n'existe pas dans le classeur " & Classeur.Name
Exit Function
End If
' au sein du module
With LeModule.CodeModule
' pour chaque ligne de code
For i = 1 To .CountOfLines
' si la ligne est la déclaration de la constante (= le mot clé "Const" suivi d'un espace et du nom de la constante)
'If .Lines(i, 1) Like "*" & "Const " & NomConstante & "*" Then 'recherche le nom d'une constante
If .Lines(i, 1) Like "*" & NomConstante & "*" Then 'recherche un mot quelquonque
' on retourne sa valeur et on quitte la procédure
ValConst = Split(.Lines(i, 1), """")(UBound(Split(.Lines(i, 1), """")) - 1)
Exit Function
End If
Next i
End With
' si on a pas trouvé : on retourne un message à cet effet
ValConst = "ECHEC : Constante " & NomConstante & " inexistante dans le classeur " & Classeur.Name & " au sein du module " & NomModule
End Function |
Partager