Jusqu'à ce jour, je n'ai jamais utilisé les boucles while.
Je voudrais cumuler des nombres saisis dans une inputbox. et ce, tant que l'inputbox n'est pas vide.
J'ai fait ce code mais ne fonctionne pas. Merci pour votre aide.
VB:
Sub Cumul_Nombres()
Dim Cumul As Single, Nombres As Single
Cumul = 0
Nombres = 0
Do While Nombres <> 0
Cumul = Cumul + Nombres
Nombres = Application.InputBox("Entrez Nombre", Type:=1)
Loop
MsgBox "Le cumul est de: " & Cumul
End Sub
Merci pour ta proposition mais ça plante. Le but est d'ouvrir l'inputbox tant qu'on saisit un nombre ou sortie avec bouton annuler. J'avoue que je suis perdu.
Encore merci.
Bonne journée.
Sub Cumul_Nombres()
Dim Cumul As Single, Nombres As Single
Cumul = 0
Nombres = 1
Do While Nombres <> 0
Cumul = Cumul + Nombres
Nombres = Application.InputBox("Entrez Nombre (0 pour sortir)", Type:=1)
Loop
MsgBox "Le cumul est de: " & Cumul - 1
End Sub
Sub Cumul_Nombres()
Dim Cumul As Single, Nombres As Single
Cumul = 0
Nombres = 1
Do While Nombres <> 0
Cumul = Cumul + Nombres
Nombres = Application.InputBox("Entrez Nombre (0 pour sortir)", Type:=1)
Loop
MsgBox "Le cumul est de: " & Cumul - 1
End Sub
Merci beaucoup Sylvanu, ça fonctionne.
Par contre je n'ai pas compris pourquoi faut-il affecter la valeur 1 et le retrancher à la fin.
Pourrais-tu me donner une explication? Pourquoi Nombres=0 ne passe pas?
Vous initialisez Nombres à 0, puis vous faites une boucle dont on sort quand Nombres=0.
Donc vous entrez ... puis sortez.
En initialisant Nombres à 1 vous restez dans la boucle jusqu'à que Nombres=0, mais le premier Cumul vaut 1.
Il ne faut donc pas oublier au cumul final de soustraire la valeur initiale d'où le Cumul - 1.
Tes explications sont très claires et logiques. Tu as corrigé mon code, j'avoue que je l'ai fait en cherchant sur le net car je ne me suis jamais intéressé aux différentes boucles While.
Est-ce qu'il n'y aurait pas une autre (autres) façon(s) d'utiliser ces boucles while en commençant par cumul=0 et nombres=0, qui serait plus logique.
Oui, en complexifiant. On crée une variable pour éviter la sortie au premier tour.
VB:
Sub Cumul_Nombres()
Dim Cumul As Single, Nombres As Single, Itération As Integer
Cumul = 0
Nombres = 0
Itération = 0
Do While (Nombres <> 0 Or Itération = 0)
Cumul = Cumul + Nombres
Itération = Itération + 1
Nombres = Application.InputBox("Entrez Nombre (0 pour sortir)", Type:=1)
Loop
MsgBox "Le cumul est de: " & Cumul
End Sub
Mais c'est quand même plus simple de mettre un commentaire :
Code:
Nombres = 1 ' Nombres initialisé à 1 pour éviter une sortie au premier tour
Oui, en complexifiant. On crée une variable pour éviter la sortie au premier tour.
VB:
Sub Cumul_Nombres()
Dim Cumul As Single, Nombres As Single, Itération As Integer
Cumul = 0
Nombres = 0
Itération = 0
Do While (Nombres <> 0 Or Itération = 0)
Cumul = Cumul + Nombres
Itération = Itération + 1
Nombres = Application.InputBox("Entrez Nombre (0 pour sortir)", Type:=1)
Loop
MsgBox "Le cumul est de: " & Cumul
End Sub
Mais c'est quand même plus simple de mettre un commentaire :
Code:
Nombres = 1 ' Nombres initialisé à 1 pour éviter une sortie au premier tour
Je reviens pour le partage. En utilisant la boucle Do - Loop While "condition" ça fonctionne avec nombre=0. j'ai compris en regardant cette vidéo.
VB:
Option Explicit
Sub Cumul_Do_LoopWhile()
Dim Cumul As Single, Nombre As Single
Cumul = 0
Nombre = 0
Do
'Actions
Cumul = Cumul + Nombre
Nombre = Application.InputBox("Entrez nombre", Type:=1)
Loop While Nombre <> 0 'Condition
MsgBox "Le cumul des nombres est de: " & Cumul
End Sub
Salut le Fil, @cp4 , pour le partage également : une petite version différente avec la variable Nombres en tant que Variant :
VB:
Sub Cumul_Nombres()
Dim Cumul As Single, Nombres As Variant, Info As String
Do While Not (Nombres & Val(Nombres) = "Faux0")
Cumul = Cumul + Nombres
Info = Info & Nombres & "+"
Nombres = Application.InputBox("Entrez un Nombre" & vbLf & _
"cumul = " & Cumul & vbLf & _
Info, Type:=1)
Loop
MsgBox "Le cumul est de: " & Cumul
End Sub
Une particularité de Application.input :
on peut cliquer sur une cellule pour en récupérer la valeur, la fonction vérifie que la cellule est numérique ou bien vide, en ce cas, elle est considéré en tant que 0 .
cela ne veut pas dire qu'on doive sortir de l'input pour autant.
Avec la sub ci-jointe, on ne peut sortir de la boucle que par le bouton Annuler ou Fermer .
Salut le Fil, @cp4 , pour le partage également : une petite version différente avec la variable Nombres en tant que Variant :
VB:
Sub Cumul_Nombres()
Dim Cumul As Single, Nombres As Variant, Info As String
Do While Not (Nombres & Val(Nombres) = "Faux0")
Cumul = Cumul + Nombres
Info = Info & Nombres & "+"
Nombres = Application.InputBox("Entrez un Nombre" & vbLf & _
"cumul = " & Cumul & vbLf & _
Info, Type:=1)
Loop
MsgBox "Le cumul est de: " & Cumul
End Sub
Une particularité de Application.input :
on peut cliquer sur une cellule pour en récupérer la valeur, la fonction vérifie que la cellule est numérique ou bien vide, en ce cas, elle est considéré en tant que 0 .
cela ne veut pas dire qu'on doive sortir de l'input pour autant.
Avec la sub ci-jointe, on ne peut sortir de la boucle que par le bouton Annuler ou Fermer . Regarde la pièce jointe 1086794