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 :

Pourquoi les GOTO c'est mal ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur amateur VBA Excel
    Inscrit en
    Janvier 2013
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur amateur VBA Excel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2013
    Messages : 69
    Par défaut Pourquoi les GOTO c'est mal ?
    Bonjour,
    Je lis ça et là qu'il ne faut pas utiliser GOTO.
    Donc bêtement je fais ce qu'on me dit et essaye de ne pas l'utiliser mais ... pourquoi ?

    Merci d'avance :-)

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je crois que l'exercice devient très intéressant quand on "inverse les rôles".

    alors je m'y colle : pourquoi as-tu besoin de GOTO dans tes projets ? Quel est l'impérieux besoin qui les nécessitât ?


  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Un à joe.levrai.
    Et pour répondre à Limace_hurlante : ce n'est pas que "c'est mal", mais que cela me "fait mal" (torticolis, maux de crâne, etc ...), comme tous les mécanismes de type "spaghettis".
    Rien ne t'empêche d'utiliser de tels mécanismes, mais comprends alors bien que rares seront les masochistes qui accepteront d'analyser et/ou maintenir ton code .

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Un code bien structuré mérite une bonne analyse. Le goto c'est utile dans le cours typique ou le jumping!

    Le

  5. #5
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, un débat sur la chose

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur amateur VBA Excel
    Inscrit en
    Janvier 2013
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur amateur VBA Excel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2013
    Messages : 69
    Par défaut
    Merci de toute vos réponses !

    Citation Envoyé par joe.levrai Voir le message

    alors je m'y colle : pourquoi as-tu besoin de GOTO dans tes projets ? Quel est l'impérieux besoin qui les nécessitât ?

    Poin d'impérieux besoin, mais juste un instant de temps en temps ou l'amateur novice que suis se dit devant un truc comme ca (voir ci dessous) qu'il y a forcément moyen de faire sans le goto mais est-ce-que ca vaux la peine de chercher ? Est-ce que le GOTO c'est vraiment horrible, voila voila ...

    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
        For i = 1 To FeuilleDeRecherche.Range("A" & Rows.Count).End(xlUp).Row ' on fait une boucle qui va de la preimere ligne à la dernier ligne ecrite
     
             'si (dans les 3 premiers caractère de la ligne i colone 1 il y a "PAU" ET que le code est écrit en gras alors
     
            If Len(FeuilleDeRecherche.Cells(i, 1).Value) < gandeurducode Then GoTo icI:
            If Left(FeuilleDeRecherche.Cells(i, 1).Value, grandeurDuCode) = CodeRecherche Then
                If QueLeGras = True And FeuilleDeRecherche.Cells(i, 1).Font.Bold = False Then
                    GoTo icI
                Else
                    ReDim Preserve LesControls(NVar).LaVariable(0 To j)
                    usf.Controls(BoiteARemplir).AddItem FeuilleDeRecherche.Cells(i, k).Value   'alors on inscrit ce qu'il y a dans la collne 2 de la ligne i dans la liste déroulante
                    LesControls(NVar).LaVariable(j) = i                             'on enregistre le numero i de la ligne dans la variable J
                    j = j + 1                                   ' on change de J pour le prochain tour de la boucle
     
                End If
            End If
    icI:
        Next i                                              ' on change de ligne i
    (je précise au passage que je viens tout juste de comprendre que mon code ne marchera pas car on ne pourrait sois disant pas mettre de variable tableau en public dans les module de classe


    Citation Envoyé par unparia Voir le message
    Bonjour
    Un à joe.levrai.
    Et pour répondre à Limace_hurlante : ce n'est pas que "c'est mal", mais que cela me "fait mal" (torticolis, maux de crâne, etc ...), comme tous les mécanismes de type "spaghettis".
    Rien ne t'empêche d'utiliser de tels mécanismes, mais comprends alors bien que rares seront les masochistes qui accepteront d'analyser et/ou maintenir ton code .
    Je lis partout cette histoire de spagettis, mais qu'est-ce donc ?
    De plus, les seul personne qui serait succeptible de maintenir mon code c'est moi ... j'essaie d’être clair dans mes commentaire pour me comprendre longtemps plus tard mais bon ...


    Citation Envoyé par kiki29 Voir le message
    Salut, un débat sur la chose
    MErci, j'avais cherché : "goto vba" mais j'avais omi de tenter avec d'autre langage de programmation

  7. #7
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Je lis partout cette histoire de spagettis, mais qu'est-ce donc ?
    Pour ne pas avoir a rédiger ce qui l'est déjà depuis kala kala :
    très exactement ceci :
    https://fr.wikipedia.org/wiki/Syndro..._de_spaghettis

    qui est entre autres le résultat de l'utilisation de cela :
    https://fr.wikipedia.org/wiki/Programmation_spaghetti

    EDIT : j'ajoute aux deux lectures ci-dessus la suivante :
    https://fr.wikipedia.org/wiki/Th%C3%A9orie_du_chaos
    Cette dernière ne concerne pas directement le sujet en lui-même, mais devrait t'aider à comprendre certains aspects (bien qu'ils puissent échapper à la perspicacité des uns ou des autres)
    Après, ce n'est qu'une question de choix personnel du risque de se retrouver un jour gêné par une "construction" dans laquelle la modification ou le déplacement d'un seul élément peut mettre en péril l'ensemble des éléments, sauf à passer un temps quelquefois fou à déterminer toutes les conséquences possibles au sein d'imbrications, de ramifications, etc ....
    Qu'un bug, un défaut, un cas particulier non prévu, etc ... intervienne et le risque devient alors grand de tenter un "rafistolage" qui ne mettrait pas en péril un autre élément, voire l'ensemble des éléments.
    Voilà. Tout le reste ne serait que baratin.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,Un programme spaghettis, est un programme linéaire d'un seule tenant. On titre sur un spaghettis et on déroule le code du sub au end sub!Un langage spaghettis c'est un train qui part de paris et s'arrête à lyon.Un goto c'est un aiguillage, si je place un changement de rail sur ma voie ferrée, je change la destination de mon train, Marseille par exemple. En soit c'est simple mais ce n'est plus le même programme. Je l'ai fait d'un claquement de doigt, mais ai'je vraiment analysé les conséquences?La modification du tracé exige une analyse et la réécriture d'une partie du code pas de jump dans toutes les directions qui rendent le code illisible et In maintenable!

    Par exemple je viens de faire un explication spaghettis!
    Dernière modification par Invité ; 31/01/2017 à 10h34.

  9. #9
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Bonjour,

    sans parler des solutions qui poussent a utiliser des goto, le cas dans lequel la solution goto est la plus efficace en VBA et celle recommandée est lors de la gestion des erreurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    On Error GoTo plop
    'code
    plop:
    'code
    http://silkyroad.developpez.com/VBA/...rreurs/#LIII-A
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    En soit le goto, ce n'est pas vraiment le problème !

    Après tout on revient aux prémices; notre bon vieux assembleur, qui quoique l'on dise est fortuitement d'actualité. Et oui le goto c'est son truc!

    Le problème du goto c'est la maintenance curative et évolutive. Un code découpé et module et méthode sera et réutilisable ,maintenables et compréhensible.

    Dans un programme spaghettis, je peux faire un branchement intempestif vers une autres étiquette afin d'ajouter un fonctionnalité, c'est facile mais ca peut rapporter trop gros!

    Il faut avoir l'ambition de croire que notre programme nous survivrais; et que d'autre génération auront en charge de le maintenir.

    Personnellement je garde espoirs.

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

Discussions similaires

  1. [Enigme] les soldes c'est mal..
    Par Julien59 dans le forum Enigmes
    Réponses: 57
    Dernier message: 12/06/2009, 09h32
  2. Les globales c'est le mal .. oui mais pourquoi?
    Par sloshy dans le forum Débuter
    Réponses: 4
    Dernier message: 26/02/2009, 15h45
  3. Pourquoi les GOTO ne sont pas appréciés ?
    Par Hoffa dans le forum Débuter
    Réponses: 6
    Dernier message: 29/10/2008, 12h54

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