begin process at 2012 02 09 03:13:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Modules

 > DÉTECTEUR DE PROCÉDURES ET FONCTIONS INUTILISÉES

DÉTECTEUR DE PROCÉDURES ET FONCTIONS INUTILISÉES


 Information sur la source

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Modules Classé sous :module, access, vbaccess, fonction, procédure Niveau :Initié Date de création :04/03/2008 Date de mise à jour :04/03/2008 20:13:58 Vu / téléchargé :7 831 / 279

Auteur : 8Tnerolf8

Ecrire un message privé
Site perso
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Cette fonction permet de déterminer pour chaque module les procédures et fonctions qui ne sont pas appelées à partir des formulaires et états et/ou des autres modules dans une base Access

Pré-requis :

- Il faut que le fichier à vérifier soit un mdb
- Dans la base à vérifier référencer la bibliothèque "Visual Basic for Applications Extensibility 5.3"
- Importer la table "TR_ObjetNonTrouve"
- Importer la macro "Rechercher les objets inutiles dans la base"
- Importer le module "RechercheObjetDansBase"
- Lancer la macro "Rechercher les objets inutiles dans la base"

Les résultats seront inscrits dans la table "TR_ObjetNonTrouve"

Source

  • Public Function RechercheFonctionDansModule()
  • 'Cette fonction permet de savoir si des fonctions sont utilisées ou non
  • Dim Momo1 As Module, Momo2 As Module, Nom_Fx As String, Cur_Ligne As Long, Ligne_en_cours As String, Lignes_Fx As Long, Drapeau_Fx As Boolean
  • Dim Forme As Form, Etat As Report, Reponse As Byte
  • Dim Fx() As String, a As Integer, b As Integer, c As Long, d As Long
  • 'FX permet d'énumérer le nom des fonctions et procédures des modules.
  • 'Sa structure est la suivante
  • 'La première dimension indique le nom de la fonction ou procédure
  • 'La seconde le nom du module et de la fonction
  • 'La troisième si celle-ci a été trouvée dans un autre module
  • 'Exemple Fx(0,0)="Florent":Fx(1,0)=False
  • On Error GoTo Erreurs:
  • Reponse = msgbox("Désirez-vous lancer la recherche des fonctions des modules" & vbCrLf & "- Sur les formulaires, états ET modules [Oui]" & _
  • vbCrLf & "- Uniquement les formulaires et états [Non] ?", vbYesNo, "Type de recherche des fonctions")
  • DoCmd.Hourglass True
  • Drapeau_Fx = False: ReDim Fx(2, 1): c = 0
  • 'On ouvre tous les modules
  • For a = 0 To CurrentProject.AllModules.Count - 1
  • DoCmd.OpenModule CurrentProject.AllModules(a).Name
  • Next a
  • For a = 0 To CurrentProject.AllModules.Count - 1
  • Set Momo1 = Modules(CurrentProject.AllModules(a).Name)
  • With Momo1
  • Drapeau_Fx = False
  • 'On détermine le nom des fonctions et procédures
  • For Cur_Ligne = .CountOfDeclarationLines + 1 To .CountOfLines
  • If Drapeau_Fx = False And UCase(.Lines(Cur_Ligne, 1)) Like "*SUB*(*)*" _
  • Or UCase(.Lines(Cur_Ligne, 1)) Like "*FUNCTION*(*)*" Then
  • 'On insère le nom de la procédure ou fonction et on redimensionne le tableau
  • Fx(0, c) = .ProcOfLine(Cur_Ligne, vbext_pk_Proc): Fx(1, c) = "Module " & .Name & "=>" & .ProcOfLine(Cur_Ligne, vbext_pk_Proc): Fx(2, c) = False
  • 'On passe à la suite
  • Cur_Ligne = Cur_Ligne + .ProcCountLines(Fx(0, c), vbext_pk_Proc) - 1
  • '-1 car .ProcCountLines positionne le curseur sur la dernière ligne de la fonction
  • 'Mais, par le Next Cur_Ligne qui suit on loupe la ligne de la fonction suivante
  • 'si on ne décrémente pas de 1
  • c = c + 1
  • ReDim Preserve Fx(2, c)
  • Drapeau_Fx = True
  • Else
  • Drapeau_Fx = False
  • End If
  • Next Cur_Ligne
  • If Reponse = vbNo Then GoTo 8
  • 'On regarde dans tous les autres modules pour voir si cette fonction ou procédure est appelée
  • For b = 0 To CurrentProject.AllModules.Count - 1 'Dans les autres modules
  • Set Momo2 = Modules(CurrentProject.AllModules(b).Name)
  • With Momo2
  • DoCmd.OpenModule .Name
  • If .Name <> Momo1.Name Then
  • For d = 0 To UBound(Fx, 2) - 1
  • Do While Fx(2, d) = True 'Pour accélérer le parcours du tableau FX
  • d = d + 1
  • If d = UBound(Fx, 2) Then
  • d = d - 1
  • Exit Do
  • End If
  • Loop
  • If InStr(.Lines(.CountOfDeclarationLines, .CountOfLines), Fx(0, d)) > 0 And Fx(2, d) = False Then Fx(2, d) = True
  • Next d
  • End If
  • End With
  • Next b
  • 8 For b = 0 To CurrentProject.AllForms.Count - 1 'Dans les formulaires
  • DoCmd.OpenForm CurrentProject.AllForms(b).Name, acDesign
  • Set Forme = Forms(CurrentProject.AllForms(b).Name)
  • With Forme
  • For d = 0 To UBound(Fx, 2) - 1
  • Do While Fx(2, d) = True 'Pour accélérer le parcours du tableau FX
  • d = d + 1
  • If d = UBound(Fx, 2) Then
  • d = d - 1
  • Exit Do
  • End If
  • Loop
  • If InStr(.Module.Lines(.Module.CountOfDeclarationLines, .Module.CountOfLines), Fx(0, d)) > 0 And Fx(2, d) = False Then Fx(2, d) = True
  • Next d
  • DoCmd.Close acForm, .Name, acSaveNo
  • End With
  • Next b
  • For b = 0 To CurrentProject.AllReports.Count - 1 'Dans les états
  • DoCmd.OpenReport CurrentProject.AllReports(b).Name, acViewDesign
  • Set Etat = Reports(CurrentProject.AllReports(b).Name)
  • With Etat
  • For d = 0 To UBound(Fx, 2) - 1
  • Do While Fx(2, d) = True 'Pour accélérer le parcours du tableau FX
  • d = d + 1
  • If d = UBound(Fx, 2) Then
  • d = d - 1
  • Exit Do
  • End If
  • Loop
  • If InStr(.Module.Lines(.Module.CountOfDeclarationLines, .Module.CountOfLines), Fx(0, d)) > 0 And Fx(2, d) = False Then Fx(2, d) = True
  • Next d
  • DoCmd.Close acReport, .Name, acSaveNo
  • End With
  • Next b
  • End With
  • 10 Next a
  • 'Arrivé à ce stade, toutes les valeurs Fx(1,x) en False signifient que les procédures et fonctions F(0,x) ne sont sollicitée nulle part
  • 'On les écrit dans la table
  • For a = 0 To UBound(Fx, 2) - 1
  • If Fx(2, a) = False Then DoCmd.RunSQL "INSERT INTO TR_ObjetNonTrouve (Type,Nom) VALUES('FUNCTION ou SUB','" & Fx(1, a) & "')"
  • Next a
  • 'On ferme tous les modules
  • For a = 0 To CurrentProject.AllModules.Count - 1
  • DoCmd.Close acModule, CurrentProject.AllModules(a).Name, acSaveNo
  • Next a
  • DoCmd.Hourglass False
  • Exit Function
  • Erreurs:
  • If Err.Number = 7784 Then
  • 'Erreur qui signifie qu'un sous formulaire a déja été ouvert par un formulaire
  • Resume Next
  • ElseIf Err.Number = 17 Then 'On ne peut pas fermer ce module car il n'a pas fini d'exécuter la fonction
  • Resume Next
  • Else
  • msgbox Err.Description, vbCritical, "Erreur N° " & Err.Number
  • Resume Next
  • End If
  • End Function
Public Function RechercheFonctionDansModule()
'Cette fonction permet de savoir si des fonctions sont utilisées ou non
Dim Momo1 As Module, Momo2 As Module, Nom_Fx As String, Cur_Ligne As Long, Ligne_en_cours As String, Lignes_Fx As Long, Drapeau_Fx As Boolean
Dim Forme As Form, Etat As Report, Reponse As Byte
Dim Fx() As String, a As Integer, b As Integer, c As Long, d As Long
'FX permet d'énumérer le nom des fonctions et procédures des modules.
'Sa structure est la suivante
'La première dimension indique le nom de la fonction ou procédure
'La seconde le nom du module et de la fonction
'La troisième si celle-ci a été trouvée dans un autre module
'Exemple Fx(0,0)="Florent":Fx(1,0)=False

On Error GoTo Erreurs:

Reponse = msgbox("Désirez-vous lancer la recherche des fonctions des modules" & vbCrLf & "- Sur les formulaires, états ET modules [Oui]" & _
vbCrLf & "- Uniquement les formulaires et états [Non] ?", vbYesNo, "Type de recherche des fonctions")
DoCmd.Hourglass True
Drapeau_Fx = False: ReDim Fx(2, 1): c = 0

'On ouvre tous les modules
For a = 0 To CurrentProject.AllModules.Count - 1
    DoCmd.OpenModule CurrentProject.AllModules(a).Name
Next a

For a = 0 To CurrentProject.AllModules.Count - 1
    Set Momo1 = Modules(CurrentProject.AllModules(a).Name)
    
    With Momo1
        Drapeau_Fx = False
        'On détermine le nom des fonctions et procédures
        For Cur_Ligne = .CountOfDeclarationLines + 1 To .CountOfLines
            If Drapeau_Fx = False And UCase(.Lines(Cur_Ligne, 1)) Like "*SUB*(*)*" _
            Or UCase(.Lines(Cur_Ligne, 1)) Like "*FUNCTION*(*)*" Then
                'On insère le nom de la procédure ou fonction et on redimensionne le tableau
                Fx(0, c) = .ProcOfLine(Cur_Ligne, vbext_pk_Proc): Fx(1, c) = "Module " & .Name & "=>" & .ProcOfLine(Cur_Ligne, vbext_pk_Proc): Fx(2, c) = False
                'On passe à la suite
                Cur_Ligne = Cur_Ligne + .ProcCountLines(Fx(0, c), vbext_pk_Proc) - 1
                '-1 car .ProcCountLines positionne le curseur sur la dernière ligne de la fonction
                'Mais, par le Next Cur_Ligne qui suit on loupe la ligne de la fonction suivante
                'si on ne décrémente pas de 1
                c = c + 1
                ReDim Preserve Fx(2, c)
                Drapeau_Fx = True
            Else
                Drapeau_Fx = False
            End If
        Next Cur_Ligne

If Reponse = vbNo Then GoTo 8

        'On regarde dans tous les autres modules pour voir si cette fonction ou procédure est appelée
        For b = 0 To CurrentProject.AllModules.Count - 1 'Dans les autres modules
            Set Momo2 = Modules(CurrentProject.AllModules(b).Name)
            
            With Momo2
                DoCmd.OpenModule .Name
                If .Name <> Momo1.Name Then
                    For d = 0 To UBound(Fx, 2) - 1
                        Do While Fx(2, d) = True 'Pour accélérer le parcours du tableau FX
                            d = d + 1
                            If d = UBound(Fx, 2) Then
                                d = d - 1
                                Exit Do
                            End If
                        Loop
                        If InStr(.Lines(.CountOfDeclarationLines, .CountOfLines), Fx(0, d)) > 0 And Fx(2, d) = False Then Fx(2, d) = True
                    Next d
                End If
            End With
        Next b
        
8       For b = 0 To CurrentProject.AllForms.Count - 1 'Dans les formulaires
            DoCmd.OpenForm CurrentProject.AllForms(b).Name, acDesign
            Set Forme = Forms(CurrentProject.AllForms(b).Name)
            
            With Forme
                For d = 0 To UBound(Fx, 2) - 1
                    Do While Fx(2, d) = True 'Pour accélérer le parcours du tableau FX
                        d = d + 1
                        If d = UBound(Fx, 2) Then
                            d = d - 1
                            Exit Do
                        End If
                    Loop
                
                    If InStr(.Module.Lines(.Module.CountOfDeclarationLines, .Module.CountOfLines), Fx(0, d)) > 0 And Fx(2, d) = False Then Fx(2, d) = True
                Next d
                DoCmd.Close acForm, .Name, acSaveNo
            End With
            
        Next b

        For b = 0 To CurrentProject.AllReports.Count - 1 'Dans les états
            DoCmd.OpenReport CurrentProject.AllReports(b).Name, acViewDesign
            Set Etat = Reports(CurrentProject.AllReports(b).Name)
            With Etat
                For d = 0 To UBound(Fx, 2) - 1
                    Do While Fx(2, d) = True 'Pour accélérer le parcours du tableau FX
                        d = d + 1
                        If d = UBound(Fx, 2) Then
                            d = d - 1
                            Exit Do
                        End If
                    Loop
                    If InStr(.Module.Lines(.Module.CountOfDeclarationLines, .Module.CountOfLines), Fx(0, d)) > 0 And Fx(2, d) = False Then Fx(2, d) = True
                Next d
                DoCmd.Close acReport, .Name, acSaveNo
            End With
        Next b

    End With
10  Next a

'Arrivé à ce stade, toutes les valeurs Fx(1,x) en False signifient que les procédures et fonctions F(0,x) ne sont sollicitée nulle part
'On les écrit dans la table
For a = 0 To UBound(Fx, 2) - 1
    If Fx(2, a) = False Then DoCmd.RunSQL "INSERT INTO TR_ObjetNonTrouve (Type,Nom) VALUES('FUNCTION ou SUB','" & Fx(1, a) & "')"
Next a

'On ferme tous les modules
For a = 0 To CurrentProject.AllModules.Count - 1
    DoCmd.Close acModule, CurrentProject.AllModules(a).Name, acSaveNo
Next a

DoCmd.Hourglass False
Exit Function

Erreurs:
If Err.Number = 7784 Then
'Erreur qui signifie qu'un sous formulaire a déja été ouvert par un formulaire
Resume Next
ElseIf Err.Number = 17 Then 'On ne peut pas fermer ce module car il n'a pas fini d'exécuter la fonction
Resume Next
Else
msgbox Err.Description, vbCritical, "Erreur N° " & Err.Number
Resume Next
End If
End Function


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • Recherche.mdbTélécharger ce fichier [Réservé aux membres club]172 032 octets

Télécharger le zip


 Historique

04 mars 2008 20:13:58 :
Nettoyage du mdb

 Sources du même auteur

GÉNÉRATEUR DE MAIL OUTLOOK AVEC MISE EN FORME VIA UNE SYNTAX...
Source avec Zip Source avec une capture DÉMON D'ÉCOUTE
FORMATAGE D'UNE CELLULE EXCEL VIA UNE SYNTAXE HTML
GÉNÉRATEUR DE MAIL LOTUS NOTES AVEC MISE EN FORME VIA UNE SY...

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) CRYPTAGE ET DECRYPTAGE par jerichez
Source avec Zip Source avec une capture Source .NET (Dotnet) EXEMPLE MODBUS POUR MODULES ADAM, BECKHOFF, WAGO par mnmsjaune
Source avec Zip Source .NET (Dotnet) CRÉER SON PROPRE DESIGNER COMME CELUI DE VISUAL STUDIO par ShareVB
Source avec Zip Source .NET (Dotnet) CONVERSION UTM VERS LAT/LONG par BarresLTD
Source avec Zip CPROPGROUP : COLLECTION FAITE MAISON par Flocreate

 Sources en rapport avec celle ci

FONCTIONS INSERT UPDATE POUR ACCESS PROJET ADP par pifou25
CONTRÔLER LA SAISIE D'UN E-MAIL par Chrisd70
LISTER TOUS LES MODULES ET LES PROCÉDURES DE CHAQUE MODULE (... par sbertho
Source avec Zip FONCTIONS GRAPHIQUES DANS UN MODULE ... RENDU TRANSPARENT, +... par fredlynx
Source avec Zip UTILISER LA FONCTION LINE POUR EFFECTUER DES FONCTION AGORIT... par flagyg

Commentaires et avis

Commentaire de jack le 05/03/2008 00:20:20 administrateur CS

Salut
Je ne voudrais pas te sapper le moral, mais "MzTools pour VBA" fonctionne sous Access et possède cet outil de recherche parmi la cinquantaine qu'il renferme.
Dispo ici : http://logiciel.codes-sources.com/logiciels/MzTools-233.aspx#

Malgré tout, je trouve ta méthode de résolution de ce problème très poussée et bien commentée. 8/10

Commentaire de jack le 05/03/2008 02:51:20 administrateur CS 8/10

Oublié de voter

Commentaire de 8Tnerolf8 le 05/03/2008 05:25:54

Bonjour Jack

Merci pour ton tuyau pour MZ Tools, je ne le connaissais pas.
Je vais de ce pas aller le récupérer.

J'ai écrit cette fonction dans deux buts :
- Devant rédiger une documentation technique d'une appli que j'ai développé, je voulais réduire au maximum ma rédaction en élaguant le code inutile.
- Je voulais me faire la main sur les propriétés et méthodes des modules dans Access.

Commentaire de Chrysostome le 10/03/2008 18:50:50 9/10

Bravo!
Moi aussi je suis développeur entre autre sur Access. J'utilise MzTools aussi et depuis longtemps. Il nous rend de nombreux services. N'empêche que le prog que tu as pondu est super, et comme le Grand Jack, je te remercie et te donne 9 pour cet envoi.
À ce propos, si Nix lit ce message, il serait peut-être envisageable d'avoir une partie de dev. spécifiquement en VBA pour Access. Personnellement, beaucoup d'utilisateurs de mes programmes me demandent de leur expliquer comment faire de petits programmes. Enfin, ce n'est qu'une suggestion.
Merci encore à toute l'équipe, et à tous les contributeurs.

Commentaire de 8Tnerolf8 le 10/03/2008 21:16:18

Bonsoir Chrysostome

Merci pour ta note et tes commentaires.
Concernant MZTools, il est effectivement super, mais, d'après ce que j'en ai vu, ma fonction est complémentaire à cette application.
En effet, s'il détecte les variables locales inutilisées au sein des fonctions et procédures, je n'ai pas vu une équivalence égale à ce que fait "RechercheFonctionDansModule".

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Récupérer nom de fonction dans un module sous Access [ par sleepman23 ] Bonjour,voilà dans une liste d'un formulaire, j'aimerais récupérer le nom de fonction ou procédure que j'ai créée dans un module.Dans le module1, j'ai [Access SQL]utilisation d'une fonction d'un module dans une requete SQL [ par Regnak ] Bonjour a tous,Je voudrais faire marcher cette fonction de selection,Mais elle foire au niveau du WHERE :*DatePlusGrandQue : fonction d'un module d'ac ACCESS VBA - Affecter le nom de la procédure en cours dans une variable [ par JM247L ] Bonjour,Pour la mise en forme d'une gestion d'erreur dans une application Access, je souhaiterai pouvoir récupérer dans une variable le nom de la proc créer une requète en fonction d'une sélection de filtres (ACCESS/VBA) [ par setfocus ] Bonjour à tous,Je ne suis pas une grosse bete en développement, et aurai donc besoin de vos lumières en vba sur ACCESS...Dans un premier formulaire, l La function Date() ne fonctione plus sous access 2003 [ par masqares ] Ma question est simple,j'ai toujour utiliser  la fonction d'Access pour requette ou formulaire Date() Maintenant() ?Mais pour je ne sait quel raison l Module et form, appeler la fonction du module dans un form [ par xeeel ] Salut,Dans un Module j'ai ceci ( permet d'ouvrir l'utilitaire de connexion des lecteurs reseaux): Module Module1 Urgent : Vb Access 2003 probleme avec clipboard [ par sam86 ] Bonjour,Je suis debutant en visual basic, je l'utilise a l'occasion d'un stage en entreprise sur Microsoft access 2003 (Je cree un progamme permetant Appeler une procedure dans un module access [ par skwalig ] Bonjour,     J'ai une base de données Access2003 dans laquelle il y a un module avec plusieurs procédures. Je souhaiterais appeler une de ces procédur procédure / fonction [ par cpattin ] quelqu'un pourrait m'expliquer les différences et les usages de chacune ?en me disant un peu plus que : "la fonction retourne une valeur" !merci fonction afterupdate ne ce reactualise pas [ par simbabou ] bonjourj'ai créé une petite procédure tte simple pour un afterupdate d'une zone de textePublic Sub Ref1_AfterUpdate()    If IsNull(Ref1) = False Then 


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,415 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales