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 :

utilisation GOTO du GWBASIC


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 utilisation GOTO du GWBASIC
    Bonjour,

    Je suis encore et toujours en comparaison entre le VBA et notre bon vieux GWBASIC (j'ai été formé (et/ou déformé ?) avec ce language et lorsque je suis perdu, je reviens vers ces lignes de programmes que j'ai souvent utilisé....(quelle joie de voir un petit point se déplacer sur l'écran....ça c'était un clin d'oeil pour ceux qui ont connu le Commodore64 avec ses K7....qui s'arrêtaient jamais au bon moment....).

    Bref, voici un exemple de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    10 cls
    20 a=a+1
    30 if a=10 then a=0:b=b+1
    40 if b=10 then goto 60
    50 goto 20
    60 print b
    70 end
    Naturellement, je fais simple comme exemple et je sais que je pourrais utiliser la fonction FOR....NEXT.
    Mais je cherche à savoir s'il est possible d'avoir un renvoi sur une ligne et/ou instruction précise : dans mon exemple, il y a une boucle entre la ligne 20 et 50. Donc comment avoir ce même type de boucle (hormis l' utilisation de la fonction FOR....NEXT).

    Dans le forum, j'ai souvent vu "on error goto 0", qui doit renvoyer à la dernière ligne certainement....j'ai fait différents essais....sans succès....

    Merci,
    A+

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Bonjour,
    Etant aussi un acien GW, ça fait plaisir de répondre...
    Tu peux tout a fait utiliser ce principe (je le fais souvent d'ailleurs)
    Il suffit tout simplement de mettre les numéros que tu souhaites en tout début de ligne.
    Si tu veux un exemple, n'hésites pas.

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Par défaut
    La numérotation des lignes ayant disparu, le GOTO aussi.

    Il ne faut pas chercher à remplacer GOTO, mais utiliser les test conditionnels de manière à ce que le logiciel effectue les opérations prévues.
    La solution sera différente selon ce que le logiciel sera censé faire.

    Ici, il faut incrémenter A jusque 10, Quand A=10, incrémenter B de 1 et remettre A à zéro et boucler jusqu'à ce que B=10
    À partir de cela, tu peux construire ton programme avec les insctructions dont tu disposes dans le langage que tu utilises.
    Ça pourrait donner quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Boucle Tant Que B<10
      Boucle Tant Que A<10
         A++
      Fin Boucle
         B++
    Fin Boucle
    Affiche B
    ps : le C64... toute ma "jeunesse"

  4. #4
    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
    Juste une précision.
    Aujourd'hui on ne se sert, quand on s'en sert, qu'en gestion d'erreur pour sortir d'une procédure. Il n'est donc pas question de l'utiliser dans une boucle.
    Le problème du goto est que l'adressage qu'il génère n'est jamais supprimé.
    Dans une boucle, ceci a pour effet de saturer la pile. On dit qu'un goto ne se "dépile pas" (contrairement au Gosub... en passant). Ce qui peut avoir pour effet de planter le programme voire le pc.
    Ceci est valable quelque soit le langage.
    Citation Envoyé par ericdev67
    j'ai souvent vu "on error goto 0", qui doit renvoyer à la dernière ligne certainement
    Non, ce code sert à annuler une gestion d'erreur initiée par On error resume next ou par On error goto étiquette:
    Quand au "conseil" de Fvandermeulen, je ne saurais trop te conseiller de pas le suivre

  5. #5
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    RE,
    En effet, j'ai répondu un peu vite j'avais pas fait gaffe qu'on parlait de boucle, si ça peu vous rassurer, je n'utilise JAMAIS le goto dans une boucle
    En tout cas c'est bien de voir qu'il y a moyen de perdre ses mauvaises habitudes. (c'est ce qu'on appelle le progrès non ?)

  6. #6
    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 Guardian,

    Donc, si j'ai bien compris ton message, je peux utiliser la boucle IF, style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if b>10 then
    a++
    end if 
    if a>10 then
    b++
    end if
    Mais justement, c'est là que ça bug : le END IF ne se fait pas sur le bon IF...

    (ça fait plaisir de retrouver des "anciens" de C64...!!!)

    Merci,
    A+

  7. #7
    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
    Bonjour ouskel'n'or,

    Merci une fois de plus pour tes précisions et/ou conseils.

    Merci aussi à toi, Fvandermeulen. Effectivement ça fonctionne, j'avais essayé, mais je cherche à venir et à construire avec le VBA et de "sortir" du GWBASIC et de ses numéros de lignes....

    Donc, pour résumer, il faut crééer une boucle. Les boucles que je connais sont : FOR..NEXT, IF....END IF, .....et existe-t-il encore une autre instruction ?

    Merci,
    A+

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Citation Envoyé par ericdev67 Voir le message
    Les boucles que je connais sont : FOR..NEXT, IF....END IF, .....et existe-t-il encore une autre instruction ?
    Il n'y a pas de boucle If...
    If est une instruction décisionnelle.

    Les boucles en VBA sont:
    For ... To ... Next
    For Each ... In ... Next
    Do ... Loop
    While ... Wend

    Concernant cette dernière, voici ce qu'en dit l'aide en ligne:
    Conseil L'instruction Do...Loop permet d'exécuter une itération de manière plus structurée et plus souple.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  9. #9
    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 à tous,

    J'arrive enfin a y voir de plus clair !!!!

    Excusez le retard de ma réponse, mais mon Packard Bell m'a encore laché.....et j'ai du tout réinstaller.... vivement que je puisse me payer un Apple....

    A+ pour de prochaines aventures !!!

  10. #10
    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
    Que veux-tu obtenir ?
    Si tu démarres avec B = 0 ou A = 0 tu sors aussi sec puisque ni l'un ni l'autre n'est supérieur à 10...

    "L'algorithme" de Gardian traduit en basic de vba
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test()
    Do While B < 10
        Do While A < 10
            A = A + 1
        Loop
        B = B + 1
    Loop
    MsgBox B
    End Sub

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

Discussions similaires

  1. [XL-2013] Utilisation GoTo & AddressOf - Remplacer "Texte" par Texte
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 24/07/2013, 16h01
  2. comment utiliser goto et return
    Par ikuzar dans le forum Débuter
    Réponses: 4
    Dernier message: 25/02/2011, 21h10
  3. [Batch] utilisation goto:eof avec call
    Par julioclay dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 07/01/2011, 11h03
  4. [VBA-E]Utilisation de GoTo
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/03/2006, 14h01
  5. utilisation de jump ou de goto dans java
    Par dracula2000 dans le forum Langage
    Réponses: 5
    Dernier message: 06/03/2006, 11h27

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