Fonction VBA Excel avec Select case

Joseph Haroun

XLDnaute Junior
Bonjour à tous !
Je voudrais présenter automatiquement les salaires mensuels du personnel à l'aide d'une fonction "SalaireMensuel"sur base de "Select case":
Case is "3A"
Salaire=57650
Case is "3B"
Salaire=67980
Case is "3C"
Salaire=83275, ainsi de suite jusqu'à
Case "12F"
Salaire=380000.
Mais je ne m'en sors pas du tout. Quelqu'un peut-il m'aider ?
 

cp4

XLDnaute Barbatruc
Salut kingfadhel:), plus rapide que moi;)

Comme tu l'as dit pas la peine de passer par une fonction, il faut faire simple.
@Yusufu ibn Anurahi : je te propose mon code
VB:
Option Explicit

Sub Salaire()
    Dim i%
    For i = 5 To 74
        Select Case Cells(i, 4)
        Case Is = "3A"
            Cells(i, 5) = 41290
        Case Is = "3B"
            Cells(i, 5) = 41390 'revoir ce salaire
        Case Is = "3C"
            Cells(i, 5) = 48520
        Case Is = "3D"
            Cells(i, 5) = "52145"
        Case Is = "3E"
            Cells(i, 5) = 55760
        Case Is = "3F"
            Cells(i, 5) = 59375
        Case Is = "3G"
            Cells(i, 5) = 62990
        Case Is = "4A"
            Cells(i, 5) = 56430
        Case Is = "4B"
            Cells(i, 5) = 60465
        Case Is = "4C"
            Cells(i, 5) = 64590
        Case Is = "4D"
            Cells(i, 5) = 68710
        Case Is = "4E"
            Cells(i, 5) = 72855
        Case Is = "4F"
            Cells(i, 5) = 76960
        Case Is = "4G"
            Cells(i, 5) = 81065
        Case Is = "5A"
            Cells(i, 5) = 72950
        Case Is = "5B"
            Cells(i, 5) = 77190
        Case Is = "5C"
            Cells(i, 5) = 81435
        Case Is = "5D"
            Cells(i, 5) = 85670
        Case Is = "5E"
            Cells(i, 5) = 89915
        Case Is = "5F"
            Cells(i, 5) = 94150
        Case Is = "5G"
            Cells(i, 5) = 98385
        Case Is = "6A"
            Cells(i, 5) = 90890
        Case Is = "6B"
            Cells(i, 5) = 95565
        Case Is = "6C"
            Cells(i, 5) = 100340
        Case Is = "6D"
            Cells(i, 5) = 104915
        Case Is = "6E"
            Cells(i, 5) = 109595
        Case Is = "6F"
            Cells(i, 5) = 114265
        Case Is = "6G"
            Cells(i, 5) = 118935
        Case Is = "7A"
            Cells(i, 5) = 94440
        Case Is = "7B"
            Cells(i, 5) = 101905
        Case Is = "7C"
            Cells(i, 5) = 109375
        Case Is = "7D"
            Cells(i, 5) = 116835
        Case Is = "7E"
            Cells(i, 5) = 124305
        Case Is = "7F"
            Cells(i, 5) = 131770
        Case Is = "7G"
            Cells(i, 5) = 139235
        Case Is = "8A"
            Cells(i, 5) = 131770
        Case Is = "8B"
            Cells(i, 5) = 140560
        Case Is = "8C"
            Cells(i, 5) = 149340
        Case Is = "8D"
            Cells(i, 5) = 158130
        Case Is = "8E"
            Cells(i, 5) = 166920
        Case Is = "8F"
            Cells(i, 5) = 175705
        Case Is = "8G"
            Cells(i, 5) = 184490
        Case Is = "9A"
            Cells(i, 5) = 166435
        Case Is = "9A"
            Cells(i, 5) = 166435
        Case Is = "9B"
            Cells(i, 5) = 180995
        Case Is = "9C"
            Cells(i, 5) = 195560
        Case Is = "9D"
            Cells(i, 5) = 172105
        Case Is = "9E"
            Cells(i, 5) = 224680
        Case Is = "9F"
            Cells(i, 5) = 239240
        Case Is = "9G"
            Cells(i, 5) = 253800
        Case Is = "10A"
            Cells(i, 5) = 241145
        Case Is = "10B"
            Cells(i, 5) = 254035
        Case Is = "10C"
            Cells(i, 5) = 266625
        Case Is = "10D"
            Cells(i, 5) = 279225
        Case Is = "10E"
            Cells(i, 5) = 291820
        Case Is = "10F"
            Cells(i, 5) = 304420
        Case Is = "10G"
            Cells(i, 5) = 317020
        Case Is = "11A"
            Cells(i, 5) = 367420
        Case Is = "11B"
            Cells(i, 5) = 317020
        Case Is = "11C"
            Cells(i, 5) = 329615
        Case Is = "11D"
            Cells(i, 5) = 342210
        Case Is = "11E"
            Cells(i, 5) = 354805
        Case Is = "11F"
            Cells(i, 5) = 367405
        Case Is = "11G"
            Cells(i, 5) = 380005
        Case Is = "12A"
            Cells(i, 5) = 367405
        Case Is = "12B"
            Cells(i, 5) = 380000
        Case Is = "12C"
            Cells(i, 5) = 392605
        Case Is = "12D"
            Cells(i, 5) = 405200
        Case Is = "12E"
            Cells(i, 5) = 417795
        Case Is = "12F"
            Cells(i, 5) = 430395
        Case Is = "12G"
            Cells(i, 5) = 442995
        End Select
    Next i
End Sub
Bonne journée à vous!
 

Joseph Haroun

XLDnaute Junior
Bonjour kingfadhel ! Merci pour cette solution. Mais ce que je cherche à éviter c'est le "click". Je cherche une fonction personnalisée qui pourrait faire afficher les salaires à la saisie des classements sans qu'on ait besoin de cliquer sur un bouton. J'espère que c'est possible en VBA Excel !
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Pourquoi une fonction personnalisée ? Il me semble qu'avec une table (plus facile à gérer en Excel qu'en VBA) et la fonction RechercheV, tout se passe bien.

Un nom dynamique "Salaires" de définition =DECALER(Table!$A$1;0;0;NBVAL(Table!$A:$A);2) a été défini.
 

Pièces jointes

  • Yusufu ibn Anurahi- recherchev- v1.xlsm
    16.4 KB · Affichages: 34

DoubleZero

XLDnaute Barbatruc
Bonjour le Fil :), le Forum,

Autre possibilité...
VB:
Option Explicit
Private Sub Worksheet_Change(ByVal c As Range)
    If c.Row < 4 Then Exit Sub    ' numéro de ligne adapter
    If c.Column = 4 And c.Count = 1 Then Call Salaire
    If c.Column = 4 And c = "" Then c(1, 2) = ""
End Sub
... permettant d'éviter la présence d'un bouton.

Le code doit être placé dans le module de l'onglet de saisie, la macro de cp4 dans un module standard.

A bientôt :)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Avec une fonction personnalisée nommée Pepete...
L'initialisation des données se fait dans la constante Ref. On indique les classements suivis chacun par le montant. L'ordre n'a pas d'importance. Le séparateur est le point-virgule.

VB:
Option Explicit

Const Ref = "3A;41290;3B;41290;3C;48520;3D;52145;3E;55760;3F;59375;3G;62990;4A;56430;4B;60465;4C;64590;4D;68710;4E;72855;4F;76960;4G;81065;5A;72950;5B;77190;5C;81435;5D;85670;5E;89915;5F;94150;5G;98385;6A;90890;6B;95565;6C;100340;6D;104915;6E;109595;6F;114265;6G;118935;7A;94440;7B;101905;7C;109375;7D;116835;7E;124305;7F;131770;7G;139235;8A;131770;8B;140560;8C;149340;8D;158130;8E;166920;8F;175705;8G;184490;9A;166435;9A;166435;9B;180995;9C;195560;9D;172105;9E;224680;9F;239240;9G;253800;10A;241145;10B;254035;10C;266625;10D;279225;10E;291820;10F;304420;10G;317020;11A;367420;11B;317020;11C;329615;11D;342210;11E;354805;11F;367405;11G;380005;12A;367405;12B;380000;12C;392605;12D;405200;12E;417795;12F;430395;12G;442995"

Function Pepete(x)
Dim i&, T
   T = Split(Ref, ";")
   For i = 0 To UBound(T) - 1
      If x = T(i) Then
         Pepete = CLng(T(i + 1))
         Exit Function
      End If
   Next i
End Function

edit : Bonjour @DoubleZero ;)

nota : on peut accélérer la fonction en remplaçant :
VB:
For i = 0 To UBound(T) - 1
par
VB:
For i = 0 To UBound(T) - 1 Step 2
 

Pièces jointes

  • Yusufu ibn Anurahi- recherchev- v2.xlsm
    21.7 KB · Affichages: 41
Dernière édition:

Joseph Haroun

XLDnaute Junior
Re,

Avec une fonction personnalisée nommée Pepete...
L'initialisation des données se fait dans la constante Ref. On indique les classements suivis chacun par le montant. L'ordre n'a pas d'importance. Le séparateur est le point-virgule.

VB:
Option Explicit

Const Ref = "3A;41290;3B;41290;3C;48520;3D;52145;3E;55760;3F;59375;3G;62990;4A;56430;4B;60465;4C;64590;4D;68710;4E;72855;4F;76960;4G;81065;5A;72950;5B;77190;5C;81435;5D;85670;5E;89915;5F;94150;5G;98385;6A;90890;6B;95565;6C;100340;6D;104915;6E;109595;6F;114265;6G;118935;7A;94440;7B;101905;7C;109375;7D;116835;7E;124305;7F;131770;7G;139235;8A;131770;8B;140560;8C;149340;8D;158130;8E;166920;8F;175705;8G;184490;9A;166435;9A;166435;9B;180995;9C;195560;9D;172105;9E;224680;9F;239240;9G;253800;10A;241145;10B;254035;10C;266625;10D;279225;10E;291820;10F;304420;10G;317020;11A;367420;11B;317020;11C;329615;11D;342210;11E;354805;11F;367405;11G;380005;12A;367405;12B;380000;12C;392605;12D;405200;12E;417795;12F;430395;12G;442995"

Function Pepete(x)
Dim i&, T
   T = Split(Ref, ";")
   For i = 0 To UBound(T) - 1
      If x = T(i) Then
         Pepete = CLng(T(i + 1))
         Exit Function
      End If
   Next i
End Function

edit : Bonjour @DoubleZero ;)

nota : on peut accélérer la fonction en remplaçant :
VB:
For i = 0 To UBound(T) - 1
par
VB:
For i = 0 To UBound(T) - 1 Step 2
Merci beaucoup mapomme. Ça marche aussi !
 

Discussions similaires

Statistiques des forums

Discussions
312 361
Messages
2 087 626
Membres
103 611
dernier inscrit
sebboes