Icône de la ressource

Rechercher des termes / mots dans le code VBA de tous les classeurs d'un répertoire V6

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Dudu2

XLDnaute Barbatruc
Dudu2 a soumis une nouvelle ressource:

Rechercher des termes dans le code VBA de tous les classeurs d'un répertoire - Mais dans lequel de mes classeurs se trouve cette macro qu'il me faut retrouver ?

Le classeur à télécharger permet de rechercher de 1 à 5 termes dans le code VBA des classeurs d'un répertoire et de ses sous-répertoires. La recherche peut s'étendre aux modules exportés (fichiers ".bas") et aux fichiers texte (".txt").

Regarde la pièce jointe 1142133

En savoir plus sur cette ressource...
 
Bonjour @Dudu2
Super comme outil, mais
  1. la pièce jointe 1142133 n'existe plus 😩
  2. Le processus se plante sur les fichiers dont le code est protégé ... 🤔 (ce qui ma foi me parait normal, il faudrait bypasser les fichiers protégés)
  3. Ne pas oublier d'autoriser Excel à accèder au VBE par code .
  4. Attention à ne pas mettre l'outil dans le dossier à scanner ... 😕
mais il rend déjà bien service dans l'état ....
 
Dernière édition:
Bonjour @fanch55,
Cette "pièce jointe 1142133" c'est juste un truc du site qui je ne contrôle pas.
Je suppose que c'est l'image GIF animée qui est visible dans la vue principale.
 
Attention à ne pas mettre l'outil dans le dossier à scanner ...
Non car c'est déjà testé pour l'exclure.

J'ai intercepté les erreurs sur ouverture des fichiers et sur ouverture du Projet VBA en les listant en rouge dans le résultat.
Et aussi laissé passer une recherche sans terme pour seulement lister les fichiers correspondant au filtre ça peut être bien utile.

Si tu as quelques minutes pour vérifier...
 

Pièces jointes

Dudu2 a mis à jour Rechercher des termes dans le code VBA de tous les classeurs d'un répertoire avec une nouvelle entrée de mise à jour:

Rechercher des termes dans le code VBA de tous les classeurs d'un répertoire

Dans cette version, 2 petites modifications:
  1. Les erreurs sur ouverture des fichiers et sur ouverture du Projet VBA sont listées en rouge dans le résultat.
  2. Une recherche sans terme est acceptée pour seulement lister les fichiers correspondant au filtre.

Lire le reste de cette entrée de mise à jour...
 
Non car c'est déjà testé pour l'exclure.

J'ai intercepté les erreurs sur ouverture des fichiers et sur ouverture du Projet VBA en les listant en rouge dans le résultat.
Et aussi laissé passer une recherche sans terme pour seulement lister les fichiers correspondant au filtre ça peut être bien utile.

Si tu as quelques minutes pour vérifier...
Salut Dudu, le pb,
c'est que s'il existe dans un sous-répertoire un fichier du même nom que l'appelant,
ce fichier ne sera pas ouvert, l'activeworkbook restera l'appelant et il sera de ce fait fermé au Close forcé...
( c'est mon cas car j'ai sauvegardé le fichier téléchargé avant de faire des tests sur l'initial ... )

Perso, j'ai résolu le pb en mettant dans la Sub TraiteFichierExcel :
VB:
    'On exclue ce fichier
    If UCase(NomCompletFichier) = UCase(ThisWorkbook.FullName) Then Exit Sub
    If CreateObject("Scripting.FileSystemObject").getfilename(NomCompletFichier) _
       = ThisWorkbook.Name Then Exit Sub

Sinon un petit souci non résolu :
1659538203907.png

Si le fichier à ouvrir a l'affichage masqué, l'activeworkbook restera également l'appelant .....
 
Merci Dudu2 pour ce fichier que je viens de télécharger et utiliser.
J'ai effectué un test sur un répertoire qui comporte un fichier .xlsb.
Lors du traitement de ce fichier, ton fichier se ferme (pas Excel), aucun message d'erreur.
C'est sur l'instruction
VB:
ActiveWorkbook.Close SaveChanges:=False
Une petite suggestion, remplacer le double-clic dans la cellule B2 pour sélectionner un répertoire (chez moi, le double-clic dans une cellule fonctionne 1 fois sur 3) par un bouton.
Bravo encore
 
Merci Dudu2 pour ce fichier que je viens de télécharger et utiliser.
J'ai effectué un test sur un répertoire qui comporte un fichier .xlsb.
Lors du traitement de ce fichier, ton fichier se ferme (pas Excel), aucun message d'erreur.
C'est sur l'instruction
VB:
ActiveWorkbook.Close SaveChanges:=False
Une petite suggestion, remplacer le double-clic dans la cellule B2 pour sélectionner un répertoire (chez moi, le double-clic dans une cellule fonctionne 1 fois sur 3) par un bouton.
Bravo encore
Salut, cela ressemble au problème que j'ai eu au post précédent .
 
@fanch55,
Concernant ton Post #7, en fait ce test est redondant avec un test que j'ai fait en fonction principale que j'ai commenté différemment dans la V6 juste publiée.
Code:
'On exclue les fichiers portant le même nom que ce classeur car on ne peut pas ouvrir 2 classeurs de même nom
If UCase(NomFichier) = UCase(ThisWorkbook.Name) Then TakeIt = False

@crocrocro,
J'ai mis un .xlsb dans la liste et ça fonctionne.
1739982373830.png


Envoie-moi ton .xlsb qui plante le truc pour que je teste.
 
Dernière édition:
@fanch55,
Concernant ton Post #7, en fait ce test est redondant avec un test que j'ai fait en fonction principale que j'ai commenté différemment dans la V6 juste publiée.
Code:
'On exclue les fichiers portant le même nom que ce classeur car on ne peut pas ouvrir 2 classeurs de même nom
If UCase(NomFichier) = UCase(ThisWorkbook.Name) Then TakeIt = False

@crocrocro,
J'ai mis un .xlsb dans la liste et ça fonctionne.
Regarde la pièce jointe 1213320

Envoie-moi ton .xlsb qui plante le truc pour que je teste.
Je viens également de faire un test avec un fichier xlsm que j'ai converti en xlsb et çà fonctionne bien.
C'est donc mon fichier xlsb (un fichier que j'avais créé pour un test et qui trainait dans le répertoire) qui n'est pas bon.
Pas d'adaptation donc à faire à ton code 🙂
Si tu le souhaites, je peux te faire passer le fichier.
Une petite suggestion, puisque l'erreur due à la protection du fichier génère systématiquement l'erreur 50289, dans la macro ErreurFichier, pour ce cas-là mettre une description plus explicite (bien sûr chacun peut adapter ton code selon ses besoins / envies).
 
J'ai ajouté l'Err.Description dans le message (V6).
Envoie toujours le .xlsb à problème, j'essaierai de voir.
Il me semble qu'il n'y a rien dans l'err.description de l'erreur 50289, c'est pour çà que je te proposais de mettre une description personnelle.
Concernant le fichier xlsb, c'était au départ un fichier Personal.xlsb (le fichier standard des macros personnelles que j'ai dû créé à la base à partir de l'enregistreur de macros. Il ne contient pas de feuille ! c'est peut-être la raison du plantage.
 

Pièces jointes

En effet, ça plante sur le:
VB:
ActiveWorkbook.Close SaveChanges:=False
car c'est le classeur de recherche qui bizarrement est actif.
J'ai remplacé par un:
Code:
Application.Workbooks(NomFichier).Close SaveChanges:=False
pour désigner précisément le classeur à fermer et là ça passe.
V6 reloadé !
 
Bon pour moi aussi.
Je ne m'étais jamais penché sur la recherche en VBA dans le contenu des composants d'un fichier excel.
Je verrais bien quelques améliorations :
Des options supplémentaires comme
- Recherche avec ou non Respect de la Casse
- Recherche (pour un fichier .xls*, pas un fichier .bas) uniquement dans les composants avec du code VBA (modules, UserForm ...)
- avec ou sans Respect de la Casse
VB:
' ici respect de la casse
If objComponent.CodeModule.Find(TabTermes(i), 1, 1, -1, -1, [I]matchcase[/I]:=True) = True Then
- Pour une recherche dans le code VBA, recherche par exemple d'un nom de macro, en adaptant ce code mis à disposition par @vgendron sur XLD, qui lui-même l'a récupéré ...
VB:
Sub listerMacros()
'Nécessite d'activer la référence
    'Microsoft "Visual basic For Application Extensibility 5.3"
Dim Ajout As Integer
Dim VBCmp As VBComponent
Dim cdMod As CodeModule
Dim Wb As Workbook
Dim Debut As Long
Dim i As Integer

'Indiquez le nom du classeur ouvert

    Set Wb = ThisWorkbook
    
    
    'Boucle sur tous les composantsdu projet :
    'Modules standards
    'Modules de feuilles et de classeur
    'Modules de classe
    'UserForms
    i = 2
    For Each VBCmp In Wb.VBProject.VBComponents
        Set cdMod = VBCmp.CodeModule
        
        With cdMod
            Debut = .CountOfDeclarationLines + 1
            Do Until Debut >= .CountOfLines
                'Nom de la procédure et du module
                Cells(i, 1) = VBCmp.Name
                Cells(i, 2) = .ProcOfLine(Debut, vbext_pk_Proc)
                Debut = Debut + .ProcCountLines(.ProcOfLine(Debut, vbext_pk_Proc), vbext_pk_Proc)
                i = i + 1
            Loop
        End With
    
    Next VBCmp
End Sub
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour