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 :

Equivalence fonction gosub


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut Equivalence fonction gosub
    Bonjour,

    Notre vieux GW-BASIC avait une fonction sympa pour faire des calculs répétitifs : on utilisait la fonction GOSUB - RETURN qui renvoyait à une boucle/programme pour effectuer des procédures répétitives.

    J'essaye d'avoir cette fonction en VBA, mais je n'y arrive pas :

    je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sub essai()
     Application.Run "'comb.xls'!fonctiongosub"
    'petits calculs  exemple (simplifié...) d=a+b+c
     
    end sub
    fonctiongosub()
     
    a=a+1
    b=b+2
    c=c+5
    'exemples de calculs
    End sub
    Et .....ça ne fonctionne pas et je ne comprends pas pourquoi,

    Merci
    A+

  2. #2
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Je ne connais pas le GW-BASIC ni GOSUB mais peut-être essayes-tu de faire ce qu'on appelle en VBA une fonction.

    Ce tutoriel pourrait alors t'aider : Initiez vous au VBA (Partie 03)

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonsoir... (Salut Caro... Meilleurs voeux)

    Le Gosub de gw-basic n'est rien d'autre qu'un appel de procédure en VB(A)


    Structure VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Proc1()
        ...
        ...
        Proc2 ' Appel de procédure
        ... ' l'exécution de proc1 continue après l'exécution de Proc2
    End Sub
     
    Sub Proc2
        ...
        ...
        ...
    End Sub
    Structure GW-Basic
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Proc1()
        ...
        ...
        gosub Proc2 ' Appel de procédure
        ... ' l'exécution de proc1 continue après l'exécution de Proc2
    End Sub
     
    Sub Proc2
        ...
        ...
        ...
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    Merci à vous deux,

    Tout est très clair, je n'avais pas trouvé le tutoriel....

    Merci
    A+ pour de prochaines aventures.....

  5. #5
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Bonjour,
    Citation Envoyé par ericdev67 Voir le message
    Bonjour,

    Notre vieux GW-BASIC avait une fonction sympa pour faire des calculs répétitifs : on utilisait la fonction GOSUB - RETURN qui renvoyait à une boucle/programme pour effectuer des procédures répétitives.

    .../..
    Si Gosub peut optimiser un code dans quelques rares cas en terme de vitesse,
    il est à éviter pour pas dire à fuir - un code spaghetti étant illisible.
    => voir les appels de procédures décrits par Pierre plus haut.
    Citation Envoyé par Pierre Fauconnier Voir le message
    Bonsoir... (Salut Caro... Meilleurs voeux)

    Le Gosub de gw-basic n'est rien d'autre qu'un appel de procédure en VB(A)
    Non, Gosub n'est pas Call

    Exemple de Gosub
    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
    Sub procTesteGosub()
        Dim x As Long, a As Long
     
        a = 2
        GoSub theGosubAdr
        Debug.Print x
     
        GoSub theGosubAdr
        Debug.Print x
     
    Exit Sub
    theGosubAdr:
        x = x + a
    Return
    End Sub

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    De mon souvenir, le Gosub du GW-Basic ne fonctionne pas comme tu l'as illustré pour VBA, mais je peux me tromper
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    J'ai illustré le gosub tel qu'on peut l'utiliser en VB au sens d'un code linéaire -
    tant qu'à mes souvenirs, ils ne concernaient que le GFA Basic (pour la plupart, éradiquée depuis un bail).

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Comme le dit Dark, le Gosub peut être intéressant dans quelques très rares cas, par exemple pour éviter d'avoir à passer une kyrielle de paramètres à une procédure répétitive, et si l'on ne veut pas déclarer ces paramètres en variables "public".
    Enfin, dans VBA, elle s'utilise bien comme l'indique Dark. J'ai eu à l'utiliser une fois pour simplifier un code mais suis là aussi de son avis. Le code spaghetti se justifiait quand les disquettes de 8 pouces 1/2 faisaient 128 ko et qu'il s'agissait d'y caser un logiciel aujourd'hui remplacé par autocad
    Enfin, je ne l'ai jamais testé pour remplacer un Call.

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    J'ajouterais : encore utilisé par les amateurs de code difficile à maintenir, particulièrement avec On...
    Exemple de code casse- cou (je m'arrête à ces 3 lettres)

    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
    Private Sub Command2_Click()
      Dim no As Integer
      no = 3 'faire varier ce chiffre de 1 à 3 pour mieux voir
      On no GoSub ici1, ici2, ici3
      On no GoSub la1, la2, la3
      GoTo vala
    ici1:
        MsgBox "ici1": Return
    ici2:
         MsgBox "ici2": Return
    ici3:
         MsgBox "ici3": Return
    la1:
         MsgBox "la1": Return
    la2:
       MsgBox "la2": Return
    la3:
       MsgBox "la3"
    vala:
       MsgBox "vala"
    End Sub
    A déconseiller totalement

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    Merci pour tous ces commentaires, je vois qu'effectivement il y a plusieurs possibilités.

    J'ai suivi vos conseils et pris celui de Darkvader, et tout fonctionne très bien

    Merci,

    A+ pour de prochaines aventures......

  11. #11
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Citation Envoyé par ericdev67 Voir le message
    J'ai suivi vos conseils et pris celui de Darkvader, et tout fonctionne très bien
    Pourquoi ?

    Tu n'as pas tout lu :

    Citation Envoyé par DarkVader Voir le message
    Si Gosub peut optimiser un code dans quelques rares cas en terme de vitesse,
    il est à éviter pour pas dire à fuir - un code spaghetti étant illisible.
    => voir les appels de procédures décrits par Pierre plus haut.
    DarkVader donnait un exemple pour dire que c'était possible de l'utiliser mais comme il le dit, et comme ucfoutu l'a aussi démontré avec son code, il vaut mieux éviter d'utiliser GoSub...
    Il y a en général toujours une méthode plus élégante (et moins casse-cou ((c) ucfoutu))

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

Discussions similaires

  1. equivalent fonction gcount()
    Par gy0m76 dans le forum C
    Réponses: 20
    Dernier message: 16/11/2006, 15h37
  2. Equivalent fonction Beep
    Par fabiengb dans le forum Windows
    Réponses: 1
    Dernier message: 24/08/2006, 13h25
  3. equivalent fonction explode (php)
    Par lololoic dans le forum Access
    Réponses: 6
    Dernier message: 21/08/2006, 18h34
  4. [FLASH 8] [ActionScript2.0] Equivalent de Gosub.
    Par Alexandre T dans le forum Flash
    Réponses: 2
    Dernier message: 17/08/2006, 00h05
  5. Equivalent Fonction RechercheV
    Par RdLg2@ dans le forum Access
    Réponses: 3
    Dernier message: 27/09/2005, 00h31

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