XL 2010 Cumuler tant que

cp4

XLDnaute Accro
Bonjour,

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
Bonne journée.
 

cp4

XLDnaute Accro
Bonjour Youky(BJ) ;),

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.
inputbox.gif

Encore merci.
Bonne journée.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour CP4,Youky,
Ou encore :
VB:
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
 

cp4

XLDnaute Accro
Bonjour CP4,Youky,
Ou encore :
VB:
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?

Bonne journée.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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.
 

cp4

XLDnaute Accro
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.

Merci beaucoup.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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
:)
 

cp4

XLDnaute Accro
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
:)
Encore merci, c'est juste pour mieux comprendre.
 

cp4

XLDnaute Accro
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

Bonne journée.
 

fanch55

XLDnaute Impliqué
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 .
Cp4While.gif
 

cp4

XLDnaute Accro
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
Bonjour Fanch, Sylvanu,Youky(bj), le fil

Merci beaucoup pour le partage. Comme l'avait dit Sylvanu, il pourrait y avoir plusieurs solutions.

Bonne journée.
 
Haut Bas