Logique des boucles If Then

Bonjour à tous.

Je suis tout nouveau dans le VBA et je tente de m'y initier (je suis vraiment à zéro: tout juste la déclaration des variables !).

Comme le ridicule ne tue pas (sinon je serais déjà mille fois mort), j'aimerais saisir la "logique" des boucles.

Il y a fort, for longtemps, j'ai eu l'occasion de faire un peu de basic et l'instruction magique était le GOTO.

J'essaie de comprendre les boucles IF ELSE.

Voici un bout de code trouvé sur le net, et je ne comprends pas comment lui dire de retourner au début.

Public Sub mon_prog3()

Dim nom As String

Dim age As Integer

nom = InputBox("Bonjour, quel est votre nom ?", "Question 1")

If nom <> "" Then

age = InputBox(nom & ", quel est votre age ?", "Question 2")

If age < 20 Then

MsgBox "Que vous êtes jeune !"

ElseIf age < 30 Then

MsgBox "Jeune, mais en train de viellir !"

ElseIf age < 50 Then

MsgBox "Ouh là.... période à responsabilités"

Else

MsgBox "Faudra envisager le reste de votre vie !"

End If

End If

End Sub

Je voudrais juste signifier à l'opérateur coquin qui appuie sur ENTER sans taper un seul caractère, qu'il doit entrer son nom par l'intermédiaire d'une MsgBox ET que le programme retourne à la boîte de saisie du nom.

Public Sub mon_prog3()

Dim nom As String

Dim age As Integer

nom = InputBox("Bonjour, quel est votre nom ?", "Question 1")

If nom <> "" Then

age = InputBox(nom & ", quel est votre age ?", "Question 2")

If age < 20 Then

MsgBox "Que vous êtes jeune !"

ElseIf age < 30 Then

MsgBox "Jeune, mais en train de viellir !"

ElseIf age < 50 Then

MsgBox "Ouh là.... période à responsabilités"

Else

MsgBox "Faudra envisager le reste de votre vie !"

End If

Else: MsgBox "Il faut entrer votre nom !"

GOTO depuis le début

End If

End Sub

J'ai rajouté la MsgBox mais je crève de mettre, juste après la ligne rouge, un GOTO la ligne "nom = InputBox("Bonjour, quel est votre nom ?", "Question 1")".

Je ne comprends pas la logique de la boucle qui se substitue la commande GOTO.

Je ne peux m'empêcher de raisonner en GOTO Line... Ce qui est gênant...

Je me sens impuissant et comme les boucles semblent être extrêmement utilisées, il faut absolument que je comprenne.

Comment retourner au début si l'opérateur ne saisis pas de texte et valide ?

Désolé pour mon niveau ras les pâquerettes, mais des ténèbres jaillira peut-être la lumière...

Qui, en attendant, accepterait d'éclairer ma petite lanterne ?

Merci d'avance.

Cordialement.

Bonjour

Quand j'ai commencé à programmer le goto était considéré comme une mauvaise programmation (utile à faire du code spaghetti)

Des fois (manque de patience) j'y ai recours

Sinon une alternative pour ton code

Public Sub mon_prog3()
Dim nom As String
Dim age As Integer

  Do
    nom = InputBox("Bonjour, quel est votre nom ?", "Question 1")
    If nom <> "" Then
      age = InputBox(nom & ", quel est votre age ?", "Question 2")
      If age < 20 Then
        MsgBox "Que vous êtes jeune !"
      ElseIf age < 30 Then
        MsgBox "Jeune, mais en train de viellir !"
      ElseIf age < 50 Then
        MsgBox "Ouh là.... période à responsabilités"
      Else
        MsgBox "Faudra envisager le reste de votre vie !"
      End If
    Else
      MsgBox "Il faut entrer votre nom !"
    End If
  Loop Until nom <> ""
End Sub

Salut pipout64 et le forum

Je suis tout nouveau dans le VBA et je tente de m'y initier (je suis vraiment à zéro: tout juste la déclaration des variables !).

Comme le ridicule ne tue pas (sinon je serais déjà mille fois mort), j'aimerais saisir la "logique" des boucles.

Il y a fort, for longtemps, j'ai eu l'occasion de faire un peu de basic et l'instruction magique était le GOTO.

J'essaie de comprendre les boucles IF ELSE.

Tout le monde, même les plus forts, a été obligé de commencer un jour et a donc été un nul

Petit rappel : il est nécessaire de différencier la nature des instructions

Goto Lieu => aller à l'adresse Lieu

If...else...then... => instruction de test sur une (syntaxe 1) ou plusieurs (syntaxe 2) lignes

Aucune de ces deux instructions ne permet de faire directement une boucle.

Les instructions de boucles sont composées de deux parties :

Un début, où la boucle reviendra pour continuer à tourner

une fin qui renverra au début. du type :

For X=A to B step C => la boucle s’effectue du tant que X n'égale ou ne dépasse B en partant de A et en lui ajoutant C à chaque passage

next

Do

Loop

complété généralement par While ou Until en début ou en fin

While avec une condition

Wend

If X then A else B

si la condtion X est vraie exécuter l'instruction A, si elle est fausse exécuter la B

S'il y a de multiple conditions, on peut utiliser ElseIf, mais personnellement je préfère utiliser Select Case

Comme quelqu'un a déjà répondu, je vais juste donner mes idées sur ces deux lignes de code

    nom = InputBox("Bonjour, quel est votre nom ?", "Question 1")
    If nom <> "" Then

on demande le nom, et tant qu'on a pas de réponse, on boucle

sub
déclaration des varialbles
For X=1 to 3
    nom = InputBox("Bonjour, quel est votre nom ?", "Question 1")
    If nom <> "" Then exit for
next
if nom="" then
    msgbox "3 tentatives pour le nom, on arrête"
    Goto Fin 'pour l'utiliser ^^
end if

traitement du nom et de la suite

Fin:  'adresse de sortie
remise à l'état initial
End Sub

comme on utilise for...Next, ici, on autorise 3 tentatives d'inscrire au moins un caractère. s'il en existe au moins 1 dans une des tentatives, on passe au traitement, sinon au bout des 3, on prévient et on sort de la macro.

Si on veut un nombre illimité de tentatives, il vaut mieux utiliser une autre boucle, avec quand même une instruction de sortie de la boucle, pour ne pas être obligé d'arrêter Excel. Dans la boucle de Banzai64, par exemple,

do
    if Nom=" " exit Do 
    instrctions
Loop Until nom <> ""

Si on a un espace, on sort de la boucle

A+

Merci pour vos réponses Banzaï64 et Gorfael...

J'entrevois un peu les éléments de réponse que vous m'apportez, mais ce n'est pas simple..

En effet, j'ai essayé de pousser un peu plus loin l'exercice.

Car dans le code de Gorfael, au bout de 3 fois et si l'utilisateur n'entre rien au clavier, l'inputbox pour la saisie de l'âge apparaît quand même avec un trou à la place du nom...

De la même manière, si l'opérateur ne saisis pas son âge, le programme doit lui dire un truc du style: revenez quand vous serez décidé à entrer votre âge.

Le problème c'est qu'il me faudrait une msgbox différente pour les diverses situations: c'était votre dernière tentative !, par exemple.

Lorsque j'essaie de mettre la variable age <> "", ça ne fonctionne pas : je suppose que le <>"" ne fonctionne qu'avec les variables string ?

Bref, d'un tout petit exemple, ça peut devenir chaud les marrons !

Puis-je imbriquer des boucles à l'"infini" et même si elles sont différentes ?

Existe t-il pour des seniors de 40 ans des formations VB (je sais... j'ai bien dit VB): les formations ne sont que pour les professionnels pas pour les particuliers... J'éviterais de perdre beaucoup de temps...

Merci dans tous les cas à vos interventions et je risque de me noyer dans le Jurançon d'ici que je trouve la solution !

(Petit clin d'oeil d'un palois à un jurançonnais !).

Cordialement.

Rechercher des sujets similaires à "logique boucles then"