Vba probleme

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

Résumé de la discussion

L'erreur de compilation provient d'un bloc If mal fermé dans le script VB/VBA, fréquemment causée par des Else If mal placés et des End If manquants ou mal appariés. Des conseils suggèrent d'utiliser If ... Then ... ElseIf ... Then ... End If et de fermer chaque bloc If correctement, plutôt que d'imbriquer un Else puis un If séparé. D'autres points soulignent une confusion entre XS50, constante et variable nbreXS50, et recommandent de tester la bonne variable et d'enchaîner les conditions XS50 < 20, < 51 et > 50 via ElseIf et End If. La discussion rappelle que l'exemple de calcul des commissions peut être incorrect et que plusieurs réponses proposent des révisions des chiffres et des seuils, ainsi qu'une clarification logique pas à pas.

Bobot (l’IA à votre service)
  1. Contributeur
    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. désolé pour le doublon!
      0
  2. tas super paf cest pour ca qu'oncomprend pas
    0
    1. 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
      1. 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. nan nan c 100 et pas 50 jai pas fais de faute
          0
        2. 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. 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
      2. 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. et elle est bonne ou, parceque c tjrs faux jen ai marre
          0
        2. 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. 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. bah au final je trouve 2470... alors que le calcul est 2788 ya un truc qui cloche pas
          0
        5. 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
      3. 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. ca marce pas, de plus tu as oublié lancienneté
          0
      4. 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. sans le sujet pas facile à dire,
          mais tes tous premiers tests semblaient corrects par rapport aux calculs actuels de la commission !
          0
        2. 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
      5. 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. 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
      6. 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
        1. 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
          1. 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