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 & AddressOf - Remplacer "Texte" par Texte


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut Utilisation GoTo & AddressOf - Remplacer "Texte" par Texte
    Bonjours à tous,

    Alors voilà, je pense que ma question est simple et élémentaire pour ceux d'entre vous qui maîtrise le VBA, mais je ne trouve pas de réponse à cette question qui est la suivante:

    Dans un code VBA, comment fait-on pour remplacer un texte sous forme de variable texte tel que "TEXTE", par un texte écrit en dur tel que TEXTE, pour pouvoir être utilisé dans des fonctions tel que GoTo TEXTE ou AddressOf TEXTE, car certaines fonctions natives tel que ces 2 fonctions ne demande pas de variable texte (String).

    Je sais que le titre du sujet n'est pas clair, mais je ne savais pas l'expliquer simplement, alors voici un CODE exemple illustrant ce que je veux dire:

    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
    31
    32
    33
    34
    Sub Choix()
     
    Dim t(0 To 5) As Single
    Dim ChoixMéthode As Byte, Méthode As String
     
       t(0) = Timer
       ChoixMéthode = 2
     
       Méthode = Choose(ChoixMéthode, "Méthode1", "Méthode2", "Méthode3")
             'GoTo Méthode (Méthode renvoi "Méthode2" dans le cas présent)
             'Suite: J'aimerai pouvoir enlever les guillemets "" à "Méthode2" pour que ça marche
             'Suite2: ou au moins avoir un numéro d'index (ChoixMéthode dans le cas présent) utilisable 
             'Suite3: tel que "Méthode" & 2 où 2 serait un numéro d'index ou un truc dans le genre...
             GoTo Méthode2
     
     
    Méthode1:
       '--- Code pour Méthode1 ---
       GoTo FinMéthode
     
    Méthode2:
       '--- Code pour Méthode2 ---
       GoTo FinMéthode
     
    Méthode3:
       '--- Code pour Méthode3 ---
       GoTo FinMéthode
     
    FinMéthode:
       '--- Code final commun pour chaque Méthode, simple exemple ici avec un timer ---
       t(1) = Timer
       t(2) = t(1) - t(0)
       MsgBox t(2) & " s"
    End Sub

    Voilà, j'espère que vous compris ce que j'aimerai obtenir comme résultat.

    P.S.: Il ne s'agit pas ici de trouver une autre méthode tel qu'une méthode avec les Select Case ou autres fonctions If & Co, mais bien de pouvoir transformer une variable texte en variable utilisable par une fonction utilisant un adressage interne au VBA. Je sais (ou je pense) que le GoTo & AddressOf demande enfaite une variable à nombre entier (Integer, Long ou LongLong). Mais je ne sais pas comment arriver à trouver l'adresse correspondante. Ou plus simplement, si il été possible de remplacer un "TEXTE" par un TEXTE en dur (comme expliqué plus haut), ça serai parfait.



    Merci d'avance à ceux qui auront pris un peu de temps pour lire ce sujet, et à ceux qui pourquoi pas y apporterai une réponse.

    A+
    Dernière modification par Invité ; 22/07/2013 à 16h08.

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Les Goto renvoient là ou les étiquettes sont mises; elles ne sont pas variables puisque c'est des étiquettes.

    Si tu veux utiliser des variables un select case avec des goto à l'intérieur ( mais ma foi les goto sont à éviter)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut,

    Oui, ils demandent certainement en interne un nombre, et c'est justement ce que j'aimerai avoir. Enfaite, comme je le disais au dessus, ce qui m'intéresse est la méthode pour trouver en quelque sorte le numéro de ligne se reportant à l'étiquette dans le cas du GoTo ou au numéro de l'adresse se reportant à une procédure.

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Lors de la compil le goto renvoi à la ligne x... tu peux faire une procédure qui rajoute un label à la ligne x du code .... mais faudra recompiler. Je ne pense pas que ce que tu veuilles pour remplacer un simple select case soit possible.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Oui, mais c'est ça que je cherche justement, l'adresse du Goto ligne x.
    Dernière modification par AlainTech ; 03/08/2013 à 13h41. Motif: Suppression de la citation inutile

  6. #6
    Invité
    Invité(e)
    Par défaut
    Enfaite, pour être un petit peu plus complet, lorsque je fais:

    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
    31
    32
    33
    34
    AAddrrOf("Func", n)
     
    Public Function AAddrrOf(strFuncName As String, n As Byte) As LongPtr
     
           If strFuncName = "Func" Then
              If n = 1 Then
                 AAddrrOf = GetAddress(AddressOf Func1)
              ElseIf n = 2 Then
                 AAddrrOf = GetAddress(AddressOf Func2)
              ElseIf n = 3 Then
                 AAddrrOf = GetAddress(AddressOf Func3)
              ElseIf n = 4 Then
                 AAddrrOf = GetAddress(AddressOf Func4)
              End If
          End If
     
    End Function
     
    Public Function GetAddress(ByRef AddressOf_FunctionName As LongPtr) As LongPtr
      GetAddress = AddressOf_FunctionName
    End Function
     
    Public Sub Func1()
     
    End Sub
     
    Public Sub Func2()
     
    End Sub
     
    Public Sub Func3()
     
    End Sub
    '...etc...
    AAddrrOf("Func", n) me renvoie vers la Fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function AAddrrOf(strFuncName As String, n As Byte) As LongPtr
    , j'ai ainsi un LongPtr grâce à AAddrrOf, puis le Select Case me renvoie vers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function GetAddress(ByRef AddressOf_FunctionName As LongPtr) As LongPtr
    , puis me renvoie le même nombre (un LongPtr), puis AAddrrOf me renvoie un même chiffre ensuite. Enfaite, ça correspond à l'équivalent d'un AddressOf mais compliqué inutilement ici, en plus il y a un Select Case, donc pas intéressant dutout. J'ai bien donc un LongPtr en guise d'un AddressOf Func1 par exemple, mais je cherche une méthode générale pour les GotO également.

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Salut,

    Le compilateur VBA exige une constante en paramètre à l'instruction Goto.

    Donc même tu parvenais à trouver un moyen dynamique pour récupérer la ligne correspondant à un label (addressOf ne le permet pas),
    tu ne pourrais jamais faire un Goto sur cette variable.

    Comme l'a indiqué EngueEngue une solution à base de Select/Case pour remplacer le Choosepeut te permettre d'avoir une écriture équivalente sans trop de bidoulle.
    Mais ce type d'écriture de programme est obsolète depuis des années.
    (Source de nombreuses erreur en cas d'ajout d'imbrication de test..)

    Donc en dehors de la gestion d'erreur, le Goto n'est plus guère utilisé.

    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
        Dim choix As Integer
        choix = 4
     
      Select Case choix
        Case 1: GoTo Methode1
        Case 2: GoTo Methode2
        Case 3: GoTo Methode3
        Case 4: GoTo Methode4
      End Select
     
    Methode1:
        MsgBox "Methode1"
        GoTo Fin_Methode
    Methode2:
        MsgBox "Methode2"
        GoTo Fin_Methode
    Methode3:
        MsgBox "Methode3"
        GoTo Fin_Methode
    Methode4:
        MsgBox "Methode4"
        GoTo Fin_Methode
     
    Fin_Methode:
    A+

  8. #8
    Invité
    Invité(e)
    Par défaut
    Petite rectif: A mettre dans un module

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Sub test()
    Dim a As LongPtr, n As Byte
    n = 2
    a = AAddrrOf("Func", n)
    End Sub
     
    Public Function AAddrrOf(strFuncName As String, n As Byte) As LongPtr
     
           If strFuncName = "Func" Then
              If n = 1 Then
                 AAddrrOf = GetAddress(AddressOf Func1)
              ElseIf n = 2 Then
                 AAddrrOf = GetAddress(AddressOf Func2)
              ElseIf n = 3 Then
                 AAddrrOf = GetAddress(AddressOf Func3)
              ElseIf n = 4 Then
                 AAddrrOf = GetAddress(AddressOf Func4)
              End If
          End If
     
    End Function
     
    Public Function GetAddress(ByRef AddressOf_FunctionName As LongPtr) As LongPtr
      GetAddress = AddressOf_FunctionName
    End Function
     
    Public Sub Func1()
     
    End Sub
     
    Public Sub Func2()
     
    End Sub
     
    Public Sub Func3()
     
    End Sub
    Public Sub Func4()
     
    End Sub
    '...etc...
    @ BlueMonkey,

    Comme je l'ai dis un peu plus haut, je ne souhaite pas de Select Case ou If Fonction.

    tu ne pourrais jamais faire un Goto sur cette variable.
    Mais pourquoi justement
    J'aimerai savoir.

    Ici, les Fonction montré plus me donne une variable LongPtr correspondant à l'adresse interne du VBA. J'aimerai savoir comment ça marche enfaite.

    C'est bien la même chose pour les Handle par exemple ?
    Dernière modification par AlainTech ; 03/08/2013 à 13h45. Motif: Fusion de 2 messages

  9. #9
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    parce qu'une fonction goto(x as string) n'accepte pas un x as object.

    Imagé mais facile à comprendre

  10. #10
    Invité
    Invité(e)
    Par défaut
    Non, mais ils accepte très certainement une variable LongPtr. Le VBA recherche une ligne correspond à ce genre de chose

    TEXTE:

    Avec 2 petit points après le nom. Mais lui, en interne, il doit forcément avoir un numéro ?

    Je m'y perdrai presque !

  11. #11
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Quand Mr le compilateur compile il va chercher les goto et met un pointeur là ou il faut qu'il goto si tu vois une façon pour que le compilateur fasse un pointeur vers une variable et que cette variable lors de l'execution lui donne une adresse en arguiment pour qu'il puisse y mettre un pointeur sans recompiler entre les deux, crée ton langage

  12. #12
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Bon si le select case ne te convient pas (alors que c'est son utilité) nous allons te proposer des if

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    n=inputbox("Quelle méthode")
    If n=1 then
    'Code méthode 1
    Else
    If n = 2 then
    'code méthode 2
    '....
    end if
    end if

  13. #13
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    je ne souhaite pas de Select Case ou If Fonction.
    J'ai simplement remplacé le Choose par un Select Case.
    Le traitement souhaité en Goto est resté le même.
    Si j'avais du ré-écrire le code, il n'y aurait eut aucun Goto.

    Goto prend en paramètre une étiquette (qui correspond à un numéro de ligne).
    Et si cette étiquette est écrite en lettre (comme on écrit le nom d'une variable dans le code),
    ce n'est en aucun cas une variable du type String.

    Mais pourquoi justement
    C'est imposé par le compilateur. C'est dans les gènes.
    A la base ça doit être voulu pour éviter que des apprentis sorciers écrivent du code qui planterais à la première insertion de ligne.
    Pour rappel, VBA est un langage interprété.
    Donc rien ne t'empêche d'insérer une ligne à l'exécution. (avec le débugger).
    Et qu'est-ce qui se passeraît si tu avais récupéré la ligne correspondant au label, avant qu'en cours de débug tu insère une ligne ?

  14. #14
    Invité
    Invité(e)
    Par défaut
    Mais c'est justement ce que j'essaie d'expliquer, les Goto & AddressOf ne prennent pas en charge les variable String, sinon, ça aurai marché du 1er coup et je n'aurai jamais posté de message (voir le 1er poste, la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       Méthode = Choose(ChoixMéthode, "Méthode1", "Méthode2", "Méthode3")
             'GoTo Méthode (Méthode renvoi "Méthode2" dans le cas présent)
             'Suite: J'aimerai pouvoir enlever les guillemets "" à "Méthode2" pour que ça marche
             'Suite2: ou au moins avoir un numéro d'index (ChoixMéthode dans le cas présent) utilisable 
             'Suite3: tel que "Méthode" & 2 où 2 serait un numéro d'index ou un truc dans le genre...
             GoTo Méthode2



    Mais alors pourquoi j'obtiens bien une variable LongPtr à la fonction AddressOf, en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
    Dim a As LongPtr, n As Byte
    n = 2
    a = AAddrrOf("Func", n)
    End Sub
    Si il n'est pas possible d'avoir une variable interne au VBA ? C'est juste ça que j'aimerai comprendre


    Petite rectif, c'était ici plutôt:

    P.S.: Il ne s'agit pas ici de trouver une autre méthode tel qu'une méthode avec les Select Case ou autres fonctions If & Co, mais bien de pouvoir transformer une variable texte en variable utilisable par une fonction utilisant un adressage interne au VBA. Je sais (ou je pense) que le GoTo & AddressOf demande enfaite une variable à nombre entier (Integer, Long ou LongLong). Mais je ne sais pas comment arriver à trouver l'adresse correspondante. Ou plus simplement, si il été possible de remplacer un "TEXTE" par un TEXTE en dur (comme expliqué plus haut), ça serai parfait.

  15. #15
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Dialogue de sourds. Je reste muet. Bon courage B.M.

  16. #16
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Je me répète, mais même si par un quelconque moyen, tu parvenais à enregistrer l'adresse d'un label dans une variable,
    Goto n'en voudrait pas.

    Et si AddressOf "Text1" devait faire quelque chose, c'est retourner l'adresse à laquelle est stocké la constante "Text1" et pas la routine qui pourrait avoir le même nom.

    Mais alors pourquoi j'obtiens bien une variable LongPtr à la fonction AddressOf, en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
    Dim a As LongPtr, n As Byte
    n = 2
    a = AAddrrOf("Func", n)
    End Sub
    Parce que tu ne fais pas AddressOf<une chaine> mais bien AddressOf d'une fonction.
    Cf ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function AAddrrOf(strFuncName As String, n As Byte) As LongPtr
              If n = 1 Then
                 AAddrrOf = GetAddress(AddressOf Func1)
              ElseIf n = 2 Then
                 AAddrrOf = GetAddress(AddressOf Func2)

    En gros les GOTO tel que tu veux les utiliser c'est à oublier.
    Ci-dessous une solution à base d'adresse de fonction (un peu comme un pointeur de fonction en C).

    A+

    ______________________________________________________

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Private Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" ( _
     ByVal lpPrevWndFunc As Long, _
     ByVal hwnd As Long, _
     ByVal msg As Long, _
     ByVal wParam As Long, _
     ByVal lParam As Long) As Long
     
    Private Function GetAddressOf(func As LongPtr) As LongPtr
        GetAddressOf = func
    End Function
     
    Sub t()
        Dim MesFuncs(4) As LongPtr
        MesFuncs(1) = GetAddressOf(AddressOf Func1)
        MesFuncs(2) = GetAddressOf(AddressOf Func2)
        MesFuncs(3) = GetAddressOf(AddressOf Func3)
        MesFuncs(4) = GetAddressOf(AddressOf Func4)
     
        Dim choix As Integer
        choix = 4
     
        CallWindowProc MesFuncs(choix), 0&, 0&, 0&, 0&
    End Sub
     
     
    Sub Func1()
        MsgBox "1"
    End Sub
     
    Sub Func2()
        MsgBox "2"
    End Sub
     
    Sub Func3()
        MsgBox "3"
    End Sub
     
    Sub Func4()
        MsgBox "4"
    End Sub

  17. #17
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    C'est désactivé, tout simplement.

    Aux temps anciens, et pour imiter le comportement de l'assembleur, les fondateurs du COBOL ont mis en place l'ordre ALTER PROCEED, qui permet de modifier la cible d'un GO TO.

    Dans les compilos modernes, ça a été supprimé. Même bien avant ça, ça a été interdit partout. Y compris là ou tout était autorisé. Tout, sauf le ALTER PROCEED. Ca n'est pas un hasard. Des GO TO en dynamique, ça rend le programme ingérable.

    VB, comme tout langage sérieux un peu plus récent que COBOL, a donc désactivé, de base, la possibilité de jouer avec les cibles de GOTO. Donc, tu ne PEUX PAS faire ce que tu désires. A moins de te mettre à l'assembleur(mais tu oublies le VB).

  18. #18
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    @BlueMonkey

    Mais la variable de type Longptr alors on peut lui coller une étiquette dessus et l'appeler avec un parlophone ?

    Long PTDR!

  19. #19
    Invité
    Invité(e)
    Par défaut
    OK

    T'es courageux BlueMonkey

    Donc ici, tu utilise une API qui demande une adresse (handle ou pointeur), sous forme de LongPointeur reconnue par le lp en initial du paramètre lpPrevWndFunc. Je vais essayer, ça a l'air intéressant, mais toujours pas moyen d'enumérer les Func(n) par une boucle où n serait un nombre quelconque. Je ne l'ai pas dis mais c'est enfaite ce que je voulais à la base, pouvoir boucler mais je me demande si les module de classe ne sont pas fait pour ça enfaite (je ne l'ai ai jamais encore utilisé).


    Sinon, concernant les Goto, c'était a l'origine pour faire un petit comparatif entre une méthode Select Case / If d'un coté et un Choose de l'autre, à l'intérieur d'une boucle pour justement voir le gain de temps que l'on pourrai obtenir entre les 2 méthodes. La méthode Choose utilise un index et trouve la valeur imédiatement, alors que le Select Case/if doivent être testé un par un avant de trouver la bonne valeur booléenne afin de rentrer à l'intérieur d'un If (perte de temps si beaucoup de If dans une boucle, là où la méthode Choose grâce à son Index devrai trouver la bonne valeur du 1er coup). Enfin bref.

    Merci, je vais voir ça.

    @ el_slapper,

    Oui, c'est vrai que les Goto sont mal vu. Je pense que c'est principalement dans un espris de lisibilité d'un programme, mais je crois aussi surtout que c'est à cause des Goto qui monte, qui descendent, puis qui remonte, puis qui redescendent etc... ou ça peut devenir illisible.
    Mais la syntaxe que j'ai utilisé dans le 1er poste n'est pas mauvaise/mauvaise à partir du moment ou le programme ne fait que descendre ? Non ?

    Justement sinon, quel est la raison principale d'un tel dégout des Goto ?
    Dernière modification par AlainTech ; 03/08/2013 à 13h49. Motif: Fusion de 2 messages

  20. #20
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Nouveau2, on peut faire quelque chose d'approchant seulement avec des numéros de lignes
    en revenant au moins 30 ans en arrière au BASIC d'origine ou même le GWBasic de la fin des années 1970 ‼
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub DemoRetour30ansEnArrière()
        Mode$ = InputBox("Choix de la fonction (1 ou 2)")
        If Mode = "1" Then GoTo 1 Else If Mode = "2" Then GoTo 2
        Beep
        Exit Sub
     
    1   MsgBox "Fonction 1 …"
        Exit Sub
     
    2   MsgBox "Fonction 2 …"
    End Sub
    Et oui, le Visual Basic et dérivés sont compatibles avec les vieux BASIC antérieurs au Quick Basic et autres Turbo Basic,
    vive le progrès ‼

    Mais en aucun cas un Goto Val(Mode) n'est possible, je ne l'ai jamais vu en BASIC …


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

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