IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Utilitaire de recherche de chaines de caractères dans les modules des bases données


Sujet :

Contribuez

  1. #1
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 383
    Points : 19 805
    Points
    19 805
    Billets dans le blog
    66
    Par défaut Utilitaire de recherche de chaines de caractères dans les modules des bases données
    Programme: Utilitaire de recherche de chaines de caractères dans les modules de mes de base données
    Auteur: User
    Intérêt: Retrouver une procédure, une fonction, un bout de code ou autre contenu dans un ou plusieurs modules de mes bases de données.

    Exposé du problème:
    j'ai de nombreuses bases de données et je ne retrouve plus une procédure, une fonction, un bout de code contenu dans un ou plusieurs modules de mes bases de données que je souhaiterai réutiliser. Je me vois mal parcourir pour un repertoire donné tous les fichiers contenus dans tous les sous répertoires et pour chacune de ses bases de données, ouvrir manuellement chaque BD et utiliser la procedure de recherche dans tous le projet, si j'ai beaucoup de BD cela va forcément me prendre du temps et je vais forcément en oublier une.

    J'ai donc crée un petit utilitaire de recherche, fChercher(repertoire,texte),
    qui recherche dans tous les modules (module de formulaire, d'état et autres),
    de toutes les BD contenues dans le repertoire en question (et aussi les sous répertoires).

    Exemple d'application:
    Dans la fenêtre d'exécution faire par exemple:

    ? fChercher("c:\Mes_BD","Public sub MajPlanSemaine")

    resultat exemple:

    c:\Mes_BD\Hotel1\geshot v1.mdb (nom complet de la bd scanée)
    Form_Planning_Semaine (nom du module contenant le texte)
    Planning_Semaine (nom du module contenant le texte)
    Planning_Mois ||

    c:\Mes_BD\Hotel1\geshot v2.mdb (nom complet de la bd scanée)
    c:\Mes_BD\Hotel1\geshot v3.mdb (nom complet de la bd scanée)

    ....



    La fonction affiche la liste des fichiers scanés et pour chaque bd, si elle a un module contenant ce texte , elle affiche son nom à la suite du chemin du fichier.

    Il faut bien référencer "Microsoft Scripting Runtime" pour parcourir les fichiers:
    Dans un module faire Outils->Références-> et cocher "Microsoft Scripting Runtime".

    Conseils:
    Faire en sorte d'ôter les messages d'avertissement (style "security Warning") à l'ouverture des BD.
    Je n'ai pas testé pour les BD contenant un mot de passe...
    Bien sûr les BD doivent être en bon état...
    Si vous avez des messages d'erreurs (genre, boite de debugage qui apparait) sur le code de vos BD ils suffit de faire fin...
    Si vous avez des boites de dialogues, valider ces boites...

    Le code utilisé pour parcourir les fichiers et les modules a été pris sur ce site (faq, forum, sources):

    La fonction concernée est donc fChercher(Rep,texte)

    Voici le module:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    62
    63
    64
    65
    66
    Option Compare Database
    Option Explicit
     
    Public AppAccess As Access.Application
     
    Public Function fChercher(ByVal f As String, ByVal text As String)
    Dim fso As FileSystemObject, dossier As Folder
     
    DoCmd.Hourglass True
     
    Set AppAccess = New Access.Application
    'AppAccess.Visible = False
     
    Set fso = New FileSystemObject
    Set dossier = fso.GetFolder(f)
    scan dossier, text
     
    AppAccess.Quit
    Set AppAccess = Nothing
     
    Debug.Print "terminé"
     
    DoCmd.Hourglass False
     
    End Function
     
    Public Sub scan(ByVal dossier As Folder, ByVal text As String)
    Dim fichier As File, sousdossier As Folder
    ' scane tous les fichiers mdb
     
    On Error Resume Next
     
        For Each fichier In dossier.Files
     
            If (Right(fichier, 4) = ".mdb") Then
               Debug.Print fichier
     
               AppAccess.OpenCurrentDatabase fichier
     
               fSearch (text)
     
               AppAccess.CloseCurrentDatabase
     
            End If
     
        Next
     
        For Each sousdossier In dossier.SubFolders
            scan sousdossier, text
        Next
     
    End Sub
     
    Public Sub fSearch(text As String)
    Dim i As Integer
    ' recherche le texte dans tous les modules de la BD
     
    For i = 1 To AppAccess.VBE.VBProjects(1).vbComponents.Count
     
       If AppAccess.VBE.VBProjects(1).vbComponents(i).CodeModule.Find(text, 0, 0, 0, 0) Then
          Debug.Print AppAccess.VBE.VBProjects(1).vbComponents(i).Name
       End If
     
    Next i
     
    End Sub
    Un petit correctif sur la procedure scan pour optimiser le parcours des fichiers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Public Sub scan(ByVal dossier As Folder, ByVal text As String)
    Dim sousdossier As Folder
    Dim f As String
     
    On Error Resume Next
     
    f = Dir(dossier.Path & "\*.mdb", vbDirectory)
     
    'boucle tant que le répertoire n'a pas été entièrement parcouru
    While (f <> "")
     
      Debug.Print dossier.Path & "\" & f
      AppAccess.OpenCurrentDatabase dossier.Path & "\" & f
      fSearch (text)
      AppAccess.CloseCurrentDatabase
     
      f = Dir 'prochain fichier
     
    Wend
     
    For Each sousdossier In dossier.SubFolders
        scan sousdossier, text
    Next
     
    Set sousdossier = Nothing
     
    End Sub

    Bon code,

    Denis

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 383
    Points : 19 805
    Points
    19 805
    Billets dans le blog
    66
    Par défaut
    Je n'avais pas vu que cette outil existait dans la commande rechercher de windows.

    Désolé, je n'avais pas paramétré cette commande, la discussion n'a donc plus d'intérêt...

Discussions similaires

  1. recherche une chaine de caractère dans une page HTML
    Par ramzi_zi dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 06/08/2009, 19h31
  2. Rechercher une chaine de caractères dans le nom d'un fichier
    Par meuah dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/06/2008, 17h54
  3. [Selenium] Rechercher une chaine de caractères dans un textarea
    Par hocinema dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 20/07/2007, 14h56
  4. rechercher une chaine de caractère dans un fichier
    Par 3FHFEB dans le forum Langage
    Réponses: 1
    Dernier message: 26/10/2006, 11h13
  5. Réponses: 9
    Dernier message: 07/09/2006, 13h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo