Vba probleme

Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour,

JAI CE PROGRAMME MAIS IL ME METTENT ERREUR DE COMPILATION BLOC IF SANS END IF, POURQUOI?

Sub skiplus()

Const salFixe = 1100
Const XL100 = 350
Const XS50 = 180

Dim ancienneté As Integer
Dim primeAncienneté As Integer
Dim commissionAncienneté As Integer
Dim caXL100 As Integer
Dim caXS50 As Integer
Dim comissionXL100 As Integer
Dim comissionXS50 As Integer
Dim nbreXL100 As Integer
Dim nbreXS50 As Integer
Dim salaire As Integer

ancienneté = InputBox("quelle est l'ancienneté du représentant?")

If ancienneté > 5 And ancienneté < 10 Then
primeAncienneté = salFixe * 0.05
Else
If ancienneté > 10 Then
primeAncienneté = salFixe * 0.1
End If

nbreXL100 = InputBox("combien de XL100 ont été vendus?")
caXL100 = nbreXL100 * XL100

If nbreXL100 > 49 Then
comissionXL100 = caXL100 * 0.06
End If

nbreXS50 = InputBox("combien de XS50 ont été vendus?")

If XS50 < 20 Then
comissionXS50 = (nbreXS50 - 50) * 180 * 0.04
Else
If XS50 < 51 Then
comissionXS50 = nbreXS50 * 180 * 0.04 + nbreXS50 * 180 * 0.06
Else
If XS50 > 50 Then
comissionXS50 = 20 * 180 * 0.04 + 30 * 180 * 0.06 + (nbreXS50 - 50) * 180 * 0.1
End If

salaire = salFixe + comissionXL100 + comissionXS50

MsgBox ("le salaire finale est de " & salaire)

End Sub

11 réponses

  1. HostOfSeraphim Messages postés 7340 Statut Contributeur 1 609
     
    Pour des instructions Else... If, tu dois utiliser Elseif :

    If number < 10 Then
        digits = 1
    ElseIf number < 100 Then
        digits = 2
    Else
        digits = 3
    End If


    Si tu utilises malgré tout un If dans un Else, tu dois fermer ton If :

    If number < 10 Then
    Else
        If number < 100 Then
            digits = 2
        End If
    End If


    2
    1. Paf
       
      désolé pour le doublon!
      0
  2. Paf
     
    bonsoir,

    un bloc if ...then ... else doit se terminer par un end if

    quand tu testes XS50 tu utilises 2 blocs If ...then...else.. et un seul end if.
    Dans ton cas tu aurais du utiliser if ... then... elseif...then...elseif...then.... end if

    If XS50 < 20 Then   
        comissionXS50 = (nbreXS50 - 50) * 180 * 0.04   
    ElseIf XS50 < 51 Then   
        comissionXS50 = nbreXS50 * 180 * 0.04 + nbreXS50 * 180 * 0.06   
    ElseIf XS50 > 50 Then   
        comissionXS50 = 20 * 180 * 0.04 + 30 * 180 * 0.06 + (nbreXS50 - 50) * 180 * 0.1   
    End If


    Mêmes éléments pour le test ancienneté.

    Par ailleurs, tu mets le résultat de inputbox dans la variable nbreXS50 , puis tu testes la variable XS50 ? étourderie puisque XS50 est une constante et vaut 180!!

    A+
    1
  3. Paf
     
    L'exemple est même faux une deuxième fois

    dans le sujet on a
    comission 6% xl100 a partir su 50eme surf vendu 


    donc si 60 vendus le calcul devrait porter sur :60-49 donc 11

    or dans l'exemple on fait le calcul avec 10:
    comission xl100=10*350*6%


    Bvo au concepteur de l'exercice !
    1
  4. Utilisateur anonyme
     
    donc ca donnerai ça? mais ce qui est bizarre, c'est que le salaire final quand je teste la valeur n'est pas le meme dans le resultat de l'exemple

    Sub skiplus()

    Const salFixe = 1100
    Const XL100 = 350
    Const XS50 = 180

    Dim ancienneté As Integer
    Dim primeAncienneté As Integer
    Dim commissionAncienneté As Integer
    Dim caXL100 As Integer
    Dim caXS50 As Integer
    Dim comissionXL100 As Integer
    Dim comissionXS50 As Integer
    Dim nbreXL100 As Integer
    Dim nbreXS50 As Integer
    Dim salaire As Integer

    ancienneté = InputBox("quelle est l'ancienneté du représentant?")

    If ancienneté > 5 And ancienneté < 10 Then
    primeAncienneté = salFixe * 0.05
    Else
    If ancienneté > 10 Then
    primeAncienneté = salFixe * 0.1
    End If
    End If

    nbreXL100 = InputBox("combien de XL100 ont été vendus?")
    caXL100 = nbreXL100 * XL100

    If nbreXL100 > 49 Then
    comissionXL100 = caXL100 * 0.06
    End If

    nbreXS50 = InputBox("combien de XS50 ont été vendus?")

    If nbreXS50 < 20 Then
    comissionXS50 = (nbreXS50 - 50) * 180 * 0.04
    Else
    If nbreXS50 < 51 Then
    comissionXS50 = nbreXS50 * 180 * 0.04 + nbreXS50 * 180 * 0.06
    Else
    If nbreXS50 > 50 Then
    comissionXS50 = 20 * 180 * 0.04 + 30 * 180 * 0.06 + (nbreXS50 - 50) * 180 * 0.1
    End If
    End If
    End If
    salaire = salFixe + comissionXL100 + comissionXS50

    MsgBox ("le salaire finale est de " & salaire)

    End Sub
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Paf
     
    re

    si pour la programmation ca fonctionne, pour le calcul, tu n'as pas du suivre le sujet !

    par exemple
    If nbreXS50 < 20 Then
    comissionXS50 = (nbreXS50 - 50) * 180 * 0.04 

    si le vendeur vend moins de 20 XS50, pour sa commission on fait nombre de XS50 - 50 !! c'est donc toujours négatif!!

    par ailleur, tu calcules une prime d'ancienneté que tu n'utilises pas !

    Relis bien le sujet

    Bon courage
    0
  7. Utilisateur anonyme
     
    jai un peu modifié mais tjrs pas le mm resultat

    If ancienneté > 6 And ancienneté < 11 Then
    primeAncienneté = salFixe * 0.05
    Else
    If ancienneté > 11 Then
    primeAncienneté = salFixe * 0.1
    End If
    End If

    nbreXL100 = InputBox("combien de XL100 ont été vendus?")
    caXL100 = nbreXL100 * XL100

    If nbreXL100 > 49 Then
    comissionXL100 = caXL100 * 0.06
    End If

    nbreXS50 = InputBox("combien de XS50 ont été vendus?")

    If nbreXS50 < 21 Then
    comissionXS50 = nbreXS50 * 180 * 0.04
    Else
    If nbreXS50 < 51 And nbreXS50 < 21 Then
    comissionXS50 = 20 * 180 * 0.04 + (nbreXS50 - 20) * 180 * 0.06
    Else
    If nbreXS50 > 50 And nbreXS50 < 51 And nbreXS50 < 21 Then
    comissionXS50 = 20 * 180 * 0.04 + 30 * 180 * 0.06 + (nbreXS50 - 50) * 180 * 0.1
    End If
    End If
    End If

    salaire = salFixe + primeAncienneté + comissionXL100 + comissionXS50

    MsgBox ("le salaire finale est de " & salaire)

    End Sub
    0
    1. Paf
       
      aïe !
      les tests sur le Nombre de XS50 vendus se dégradent,
      If nbreXS50 < 21 Then : ok
      If nbreXS50 < 51 And nbreXS50 < 21: ça revient au premier test !
      If nbreXS50 > 50 And nbreXS50 < 51 And nbreXS50 < 21 : si > 50 et <51 et <21 : pas possible

      c'était correct avant (enfin ca depend de ce qui est demandé)
      0
  8. Utilisateur anonyme
     
    ca alors?
    If nbreXS50 < 21 Then
    comissionXS50 = nbreXS50 * 180 * 0.04
    Else
    If nbreXS50 < 51 And nbreXS50 > 20 Then
    comissionXS50 = 20 * 180 * 0.04 + (nbreXS50 - 20) * 180 * 0.06
    Else
    If nbreXS50 > 50 And nbreXS50 < 51 And nbreXS50 < 21 Then
    comissionXS50 = 20 * 180 * 0.04 + 30 * 180 * 0.06 + (nbreXS50 - 50) * 180 * 0.1
    End If
    End If
    End If
    0
    1. Paf
       
      sans le sujet pas facile à dire,
      mais tes tous premiers tests semblaient corrects par rapport aux calculs actuels de la commission !
      0
    2. Utilisateur anonyme
       
      la société skiplus fabrique et distribue 2 types de surfs des neiges :
      -le modele xl100 vendu 350€ ht
      -le modele xs50 vendu 180€
      les représentant vendent les produits. leur rémunération se calcule ainsi

      salaire fixe de 1100€ marjoré de 5% a partir de 5ans ou 10/ apres 10 ans
      comission 6% xl100 a partir su 50eme surf vendu
      comission progressive modele xs50
      4% sur le ca jusqua la 20eme planche
      6% du 21 au 50eme
      10% apartir du 51eme

      exemple

      60 srfs vendus xl100 et 50 xs50 12 ans dancienneté
      fixe=1100*10
      comission xl100=10*350*6%
      xs50=20*180*4%+30*180*6%+(100-50)*180*10
      0
  9. ccm81 Messages postés 11033 Statut Membre 2 434
     
    bonjour

    et comme ça ?

    Sub skiplus() 
    
    Const salFixe = 1100 
    Const XL100 = 350 
    Const XS50 = 180 
    
    Dim ancienneté As Integer 
    Dim primeAncienneté As Integer 
    Dim commissionAncienneté As Integer 
    Dim caXL100 As Integer 
    Dim caXS50 As Integer 
    Dim comissionXL100 As Integer 
    Dim comissionXS50 As Integer 
    Dim nbreXL100 As Integer 
    Dim nbreXS50 As Integer 
    Dim salaire As Integer  
    
    If ancienneté > 6 And ancienneté < 11 Then 
      primeAncienneté = salFixe * 0.05 
    Else 
      If ancienneté > 11 Then 
        primeAncienneté = salFixe * 0.1 
      End If 
    End If 
    
    nbreXL100 = InputBox("combien de XL100 ont été vendus?") 
    caXL100 = nbreXL100 * XL100 
    
    If nbreXL100 > 49 Then 
      comissionXL100 = caXL100 * 0.06 
    End If 
    
    nbreXS50 = InputBox("combien de XS50 ont été vendus?") 
    
    If nbreXS50 < 21 Then 
      comissionXS50 = nbreXS50 * 180 * 0.04 
    Else 
      If nbreXS50 < 51 Then 
        comissionXS50 = 20 * 180 * 0.04 + (nbreXS50 - 20) * 180 * 0.06 
      Else 
        comissionXS50 = 20 * 180 * 0.04 + 30 * 180 * 0.06 + (nbreXS50 - 50) * 180 * 0.1 
      End If 
    End If 
    
    salaire = salFixe + primeAncienneté + comissionXL100 + comissionXS50 
    
    MsgBox ("le salaire finale est de " & salaire) 
    
    End Sub


    bonne suite
    0
    1. Utilisateur anonyme
       
      ca marce pas, de plus tu as oublié lancienneté
      0
  10. Paf
     
    Ben voila !

    et avec le sujet on s'aperçoit qu'il ne reste plus qu'à vérifier la commission pour les XL100 !

    Bon courage
    0
    1. Utilisateur anonyme
       
      et elle est bonne ou, parceque c tjrs faux jen ai marre
      0
    2. Paf
       
      ce n'est qu'un problème de lecture du sujet:

      prime d'ancienneté = 5% a partir de 5 ans jusqu'à 10 donc le test >4 et <11

      comission 6% xl100 a partir du 50eme surf vendu donc commission:
      If nbreXL100 > 49 Then
      comissionXL100 = (nbreXL100 -49)* XL100 * 0.06
      else
      comissionXL100 = 0
      End If


      Fin ?
      0
    3. ccm81 Messages postés 11033 Statut Membre 2 434
       
      re
      1. exact, jai zappé l'entrée de l'ancienneté, mais tu as l'air assez grand pour rectifier
      2. pour les declarations de variables, le type integer est mal adapté, tu as des decimaux dans tes calculs, donc préférer le type single (ou double)
      3. je te propose un plan et une syntaxe correcte, a toi éventuellement d'adapter
      4. on essaie de t'aider, donc reste poli
      bonne suite quand même
      0
    4. Utilisateur anonyme
       
      bah au final je trouve 2470... alors que le calcul est 2788 ya un truc qui cloche pas
      0
    5. Utilisateur anonyme
       
      ancienneté = InputBox("quelle est l'ancienneté du représentant?")

      If ancienneté > 4 And ancienneté < 11 Then
      primeAncienneté = salFixe * 0.05
      Else
      If ancienneté > 10 Then
      primeAncienneté = salFixe * 0.1
      End If
      End If
      nbreXL100 = InputBox("combien de XL100 ont été vendus?")
      caXL100 = nbreXL100 * XL100

      If nbreXL100 > 49 Then
      comissionXL100 = (nbreXL100) * XL100 * 0.06
      Else: comissionXL100 = 0
      End If
      nbreXS50 = InputBox("combien de XS50 ont été vendus?")
      If nbreXS50 < 21 Then
      comissionXS50 = nbreXS50 * 180 * 0.04
      Else
      If nbreXS50 < 51 And nbreXS50 < 21 Then
      comissionXS50 = 20 * 180 * 0.04 + (nbreXS50 - 20) * 180 * 0.06
      Else
      If nbreXS50 > 50 And nbreXS50 < 51 And nbreXS50 < 21 Then
      comissionXS50 = 20 * 180 * 0.04 + 30 * 180 * 0.06 + (nbreXS50 - 50) * 180 * 0.1
      End If
      End If
      End If

      salaire = salFixe + primeAncienneté + comissionXL100 + comissionXS50
      0
  11. Paf
     
    a priori vianndu44 essaye de trouver le résultat donné dans l'exemple de son sujet et ... cet exemple est faux:

    exemple
    
    60 srfs vendus xl100 et 50 xs50 12 ans dancienneté
    fixe=1100*10
    comission xl100=10*350*6%
    xs50=20*180*4%+30*180*6%+(100-50)*180*10


    on fixe 50 XS50 vendus et on fait le calcul avec 100 !!
    0
    1. Utilisateur anonyme
       
      nan nan c 100 et pas 50 jai pas fais de faute
      0
    2. ccm81 Messages postés 11033 Statut Membre 2 434
       
      re
      ton post 10
      60 srfs vendus xl100 et 50 xs50 12 ans dancienneté
      bon, tout ceci n'est pas bien grave
      un merci serait quand même le bienvenu
      bonne suite .... et fin
      0
    3. Utilisateur anonyme
       
      regarde ta boite mail
      tu as parlé un peu vite!
      et merci a paf meme si pour le moment je nai aps le nombre exact
      0
  12. Utilisateur anonyme
     
    tas super paf cest pour ca qu'oncomprend pas
    0