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 :

Fonction interne à un module [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 288
    Par défaut Fonction interne à un module
    Bonjour,

    je me pose une question que je ne me suis jamais posé et sans réponse dans mes recherches

    J'ai une séquence de lignes à exécuter dans une macro à plusieurs endroits, le plus logique est d'écrire une "Function" et de l'appeler à chaque fois

    Cependant ce code contient beaucoup de références interne à la macro elle-même , ce qui fait une fonction avec un grand nombre de paramètres à passer

    Je me demande s'il est possible dans VBA de faire une fonction "interne" c'est à dire l'équivalent d'un "GoTo" à la première ligne du code à exécuter (pas de problème) ET REVENIR à la ligne suivant l'appel

    Cela ressemblerait à cela, le problème bien sur est de trouver comment faire un équivalent à "GoTo b" ("GoTo b" devenant "GoTo c" au prochain appel soit un retour dynamique)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    lignes de code
    ...
    GoTo a
    b:
    ...
     
    a:
    lignes communes
    ...
    Goto b

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 165
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne suis pas certain d'avoir compris ce que vous voulez mais si une procédure A invoque une procédure B, à son retour elle exécutera la ligne suivante de la procédure A
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour Philippe, retraite83

    Pas certain d'avoir bien compris non plus l'explication, voici un essai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function Test(MonParam as String)
      Dim Rep as string
      ' Exécute une action selon une valeur
      Select Case MonParam
        Case "BONJOUR"
          Rep = "Bonjour et bonne journée"
        Case "AU REVOIR"
          Rep = "Au revoir et bonne soirée"
        Case "SALUT"
          Rep = "YO !"
      End Select
      ' Renvoie la valeur à la fonction
      Test = Rep
    End Function
    Fonction que l'on peut appeler comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Essai()
      Msgbox Test("BONJOUR")
    End Sub
    A+

  4. #4
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 288
    Par défaut
    Bonjour vous 2

    je n'ai pas été clair

    en fait je voudrai que la procédure B soit dans A
    Si elle est dans une fonction autre, je vais avoir un paquet de paramètre à passer, si pas d'autre solution je le ferai

    Pour essayer de préciser, voilà mon idée :
    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
     
    Sub x()
     
    1ere fois...
    GoTo a
    b:
    ...
     
     
    2eme fois...
    GoTo a
    c:
    ...
     
    3eme fois...
    GoTo a
    d:
    ...
     
    a:
    ...
    Si je viens de 1ere fois = retour en b
    Si je viens de 2eme fois = retour en c
    Si je viens de 3eme fois = retour en d
    End sub

  5. #5
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 570
    Par défaut
    bonjour,
    le langage spaghetti avec moults GOTO est dépassé!

    il est, il me semble, préférable de sub diviser c'est méthode plutôt que de les agglomérer en une!

    notes que tu peux gérer la propriété d'un module pour lui donner un nom ce qui te permettras de t'y retrouver facilement dans ton code!

    notes également qu'il est possible de créer des types personnaliser pour regrouper plusieurs variables, ça peux te permettre de limiter le nombre de paramètre à un fonction!

    notes également qu'il est possible de définir des paramètres optionnels {Optional} à une méthode et de leurs affecté des valeur par défaut!

  6. #6
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 288
    Par défaut
    #5

    tu connais une doc qui parle de tout ça?

    Merci

  7. #7
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 288
    Par défaut
    Bonjour

    je vais écrire une fonction avec passage des paramètres

    merci à tous de votre temps

  8. #8
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 570
    Par défaut
    Bonjour,
    désolé mais il m'a fallu un peut de temps!

    déjà il faut donner la parole au maître de tous les informaticiens Descartes!

    https://slvf-associes.com/methode-cartesienne

    comme disait Descartes un problème complexe n'est autre que la somme de problème simple!

    sur limages qui suit tu peux trouver le schéma cartésien d'un projet!
    de droite à gauche ce trouve le temps et le flue de données
    et de haut en bas le détail!
    Nom : Cartesienne.png
Affichages : 137
Taille : 153,4 Ko

    quand tu en serras au détail le plus petit tu pourras envisager un diagrammes fonctionnel!

    Nom : Dia.png
Affichages : 123
Taille : 51,6 Ko
    un fois ton digramme établir tu pourras imaginer ton pseudo code!
    https://info.blaisepascal.fr/pseudo-code

    pour la génération les diagramme j'ai utiliser Dia!

  9. #9
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 288
    Par défaut
    Merci
    je vais regarder cela de près

    Il va me falloir un peu de temps...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/03/2007, 13h19
  2. fonction dans un module
    Par LeXo dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 05/11/2006, 13h47
  3. [VB6] Appel d'une fonction dans un module d'une dll
    Par speedster dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 05/06/2006, 17h37
  4. [AS2] Atteindre attribut d'une classe depuis une fonction interne a la classe
    Par Demco dans le forum ActionScript 1 & ActionScript 2
    Réponses: 6
    Dernier message: 18/04/2006, 21h03
  5. PerlDoc sur une fonction d'un module
    Par lesouriciergris dans le forum Modules
    Réponses: 2
    Dernier message: 13/03/2003, 20h50

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