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

Macros et VBA Excel Discussion :

[VBA-E] Recuperer le nom de la fonction en cours d'execution


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de Currahee
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 157
    Points : 130
    Points
    130
    Par défaut [VBA-E] Recuperer le nom de la fonction en cours d'execution
    Bonjour à tous,

    Est-il possible en VBA sous Excel de récupérer le nom de la fonction ou procédure en cours d'exécution ???

    Mon tout petit objectif étant de récupérer ce nom pour ma gestion d'erreur.

    Ex simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function Developpez()
        On error Goto Gestion_Erreurs
    
    ...
    ...
    
    Gestion_Erreur:
    NomFonction = ???     ' = Developpez
    Msgbox NomFonction
    
    End Function

    Merci d'avance à ceux qui pourront m'aider,

    Currahee
    "Ne soyez rien, devenez sans cesse"

  2. #2
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut
    Pourquoi tu jne ferez pas tout simplement ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Function Developpez()
        On error Goto Gestion_Erreurs
     
    ...
    ...
     
    Gestion_Erreur:
    NomFonction = "Developpez"
    Msgbox NomFonction
     
    End Function

  3. #3
    Membre habitué Avatar de Currahee
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 157
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par marsupilami34
    Pourquoi tu jne ferez pas tout simplement ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Function Developpez()
        On error Goto Gestion_Erreurs
     
    ...
    ...
     
    Gestion_Erreur:
    NomFonction = "Developpez"
    Msgbox NomFonction
     
    End Function
    Petit malin

    Merci de ta réponse, c'est ce que je fais actuellement, mais sur un prog avec une cinquantaine de fonctions, copier-coller ce morceau de code en changeant à chaque fois le nom de la fonction en dur, c'est chiant... et si tu oublies de le faire sur une fonction, tu piges pas l'erreur remontée quand elle survient.

    Si on peut récupérer le nom de la procédure, ou de la fonction en cours d'execution de façon dynamique, plus besoin de changer le code en dur à chaque fois

    Autre solution les Developpeurs ?
    "Ne soyez rien, devenez sans cesse"

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    bonjour, behhh oui, j'ai bien une autre idée mais je ne sais pas si elle te conviendra.
    Déclarer une variable publique (ex: DétectErr as integer et un tableau string ex: DetecText(50) as string
    en entrée de macro initialiser DétecErr à 1,2,3,etc... dans la string mettre le nom de la macro. C'est un peu de boulot au début mais après ce serra automatique.
    Ou une autre solution si les appels ne sont pas trop fréquent, déclarer DetecText as string et juste avant d'appeler la macro mettre le nom de la macro dans la variable, cette solution est plus simple.
    A+

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonsoir


    Une autre possibilité (mais qui revient au même que ce qui a déja été proposé)


    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
    Option Explicit
     
    Sub Test()
        Dim x As Integer
     
        On Error GoTo Fin
     
        'Va provoquer une erreur (division par 0)
        x = 5 / 0
     
       '
       '...
       '
     
        Exit Sub
     
    Fin:
        Call NomMacroActive
    End Sub
     
     
     
    Sub NomMacroActive()
        Dim i As Long
     
        With Application.VBE.ActiveCodePane
            .GetSelection i, 0, 0, 0
            MsgBox .CodeModule.ProcOfLine(i, 0)
        End With
    End Sub

    Sinon tu peux aussi numéroter les lignes de code et utiliser la fonction ERL pour la gestion d'erreur (tu sauras ainsi quelle ligne a posé problème).

    http://silkyroad.developpez.com/VBA/...rreurs/#LIII-C



    michel

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Si tu utilises l'Addin MZ_Tools que tu trouveras là : http://www.mztools.com/index.htm, attention prend celui pour VBA, il te permet de créer un code de gestion d'erreur avec en paramètre la routine dans laquelle se trouve la gestion d'erreur.

    Starec

  7. #7
    Membre habitué Avatar de Currahee
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 157
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par SilkyRoad
    bonsoir


    Une autre possibilité (mais qui revient au même que ce qui a déja été proposé)


    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
    Option Explicit
     
    Sub Test()
        Dim x As Integer
     
        On Error GoTo Fin
     
        'Va provoquer une erreur (division par 0)
        x = 5 / 0
     
       '
       '...
       '
     
        Exit Sub
     
    Fin:
        Call NomMacroActive
    End Sub
     
     
     
    Sub NomMacroActive()
        Dim i As Long
     
        With Application.VBE.ActiveCodePane
            .GetSelection i, 0, 0, 0
            MsgBox .CodeModule.ProcOfLine(i, 0)
        End With
    End Sub

    Sinon tu peux aussi numéroter les lignes de code et utiliser la fonction ERL pour la gestion d'erreur (tu sauras ainsi quelle ligne a posé problème).

    http://silkyroad.developpez.com/VBA/...rreurs/#LIII-C



    michel
    Merci ça à l'air d'être ce que je recherche.

    Mais la méthode VBE plante chez moi.

    J'ai excel 2003, il y a visiblement une bibliothèque à rajouter pour que cela fonctionne ?

    Merci d'avance, cordialement
    "Ne soyez rien, devenez sans cesse"

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    Dans le menu menu Outils/Macro/Sécurité/Onglet Sources fiables.
    Vérifie que les deux options sont cochées et clique sur le bouton OK pour valider


    michel

  9. #9
    Membre habitué Avatar de Currahee
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 157
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par SilkyRoad
    bonjour

    Dans le menu menu Outils/Macro/Sécurité/Onglet Sources fiables.
    Vérifie que les deux options sont cochées et clique sur le bouton OK pour valider


    michel
    Oui c'était ça, avec pour précision que l'onglet chez moi s'appele Editeurs Approuvés.

    L'option à cocher est Faire confiance au projet Visual Basic
    "Ne soyez rien, devenez sans cesse"

  10. #10
    Membre habitué Avatar de Currahee
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 157
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par SilkyRoad
    bonsoir


    Une autre possibilité (mais qui revient au même que ce qui a déja été proposé)


    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
    Option Explicit
     
    Sub Test()
        Dim x As Integer
     
        On Error GoTo Fin
     
        'Va provoquer une erreur (division par 0)
        x = 5 / 0
     
       '
       '...
       '
     
        Exit Sub
     
    Fin:
        Call NomMacroActive
    End Sub
     
     
     
    Sub NomMacroActive()
        Dim i As Long
     
        With Application.VBE.ActiveCodePane
            .GetSelection i, 0, 0, 0
            MsgBox .CodeModule.ProcOfLine(i, 0)
        End With
    End Sub

    Sinon tu peux aussi numéroter les lignes de code et utiliser la fonction ERL pour la gestion d'erreur (tu sauras ainsi quelle ligne a posé problème).

    http://silkyroad.developpez.com/VBA/...rreurs/#LIII-C



    michel
    Donc ça marche sauf qu'il ne faut pas placer l'appel à GetSelection dans une fonction à part, car dans l'exemple ci-dessus ça retourne chez moi NomMacroActive...

    Après je ne sais pas comment fonctionne exactement cette propriété, et nottament à quoi correspond le i... J'ai essayé innocemment un i-1 dans la msgbox, sans succès

    Du coup je placerai cette ligne de code dans chaque fonction s'il n'y a pas d'autres soluces. C'est pas plus gênant que ça.
    "Ne soyez rien, devenez sans cesse"

  11. #11
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 91
    Points : 89
    Points
    89
    Par défaut
    Pour les modules de formulaires c'est plus facile, on peut mettre :
    pour avoir le nom du formulaire qui a générer l'erreur

    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Screen.ActiveControl.Name
    pour avoir le nom du contrôle

    Donc il faut avoir deux fonctions une pour les sub des formulaires et états
    et une autre pour les fonctions

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/11/2006, 11h28
  2. [FAQ][VBA-E] Traduire le nom d'une fonction excel
    Par SfJ5Rpw8 dans le forum Contribuez
    Réponses: 0
    Dernier message: 23/09/2006, 10h18
  3. Réponses: 2
    Dernier message: 24/08/2006, 10h46
  4. [VBA E] recuperer le nom de l'utilisateur
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/08/2006, 20h57
  5. Recuperer le nom de la page en cours
    Par Flushovsky dans le forum Langage
    Réponses: 2
    Dernier message: 02/10/2005, 12h13

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