XL 2019 Création d'une fonction VBA avec de nombreuses conditions

Merlin258413

XLDnaute Occasionnel
Bonjour je viens solliciter votre aide car je n'ai pas un super niveau en VBA.
J'ai une fonction Excel qui fonctionne parfaitement mais je trouve qu'il y a beaucoup de Si et je pense peut être améliorée
=SI(DROITE(GAUCHE(G2;7);2)="CA";"ENTRETIEN";SI(DROITE(GAUCHE(G2;7);2)="CU";"ENTRETIEN";SI(DROITE(GAUCHE(G2;7);2)="PR";"ENTRETIEN";SI(C2="Materiels - Entretien";"ENTRETIEN";SI(ESTNUM(CHERCHE("Carburant";D2));"Carburant";SI(D2="Couts de detention du parc";"PARC";SI(D2="Personnel Interim.";"Personnel Intérim";SI(GAUCHE(D2;2)="MO";"MO";SI(D2="Revente interne d'atelier";"ENTRETIEN";"Autres"))))))))) en cellule W2

Je désire savoir s'il est possible de créer une fonction VBA en regroupant tout ses critères

En vous remerciant par avance


Cordialement
André
 

Pièces jointes

  • Matériel OE Marseille ATI.xlsx
    773.5 KB · Affichages: 6
Dernière édition:

vgendron

XLDnaute Barbatruc
Hello

avec une fonction personnalisée peut etre??

Dans la mesure où ta formule fait des tests sur plusieurs colonnes et dans un certain ordre.. la fonction n'est pas forcément plus simple à écrire


VB:
Public Function Dépenses(target As Range) As String
Dépenses = "Autres"
    Dimin = Right(Left(target, 7), 2)
    ColC = target.Offset(0, -4)
    ColD = target.Offset(0, -3)
    Select Case Dimin
        Case "CA", "CU", "PR"
            Dépenses = "ENTRETIEN"
            Exit Function
    End Select
    If ColC = "Materiels - Entretien" Then
        Dépenses = "ENTRETIEN"
        Exit Function
    End If
    If InStr(1, UCase(ColD), "CARBURANT") <> 0 Then
        Dépenses = "Carburant"
        Exit Function
    End If
    Select Case ColD
        Case "Couts de detention du parc"
            Dépenses = "PARC"
            Exit Function
        Case "Personnel Interim."
            Dépenses = "Personnel Intérim"
            Exit Function
    End Select
    If Left(ColD, 2) = "MO" Then
        Dépenses = "MO"
        Exit Function
    End If
    If ColD = "Revente interne d'atelier" Then
        Dépenses = "ENTRETIEN"
        Exit Function
    End If
End Function

'SI(DROITE(GAUCHE(G2;7);2)="CA";"ENTRETIEN";
'SI(DROITE(GAUCHE(G2;7);2)="CU";"ENTRETIEN";
'SI(DROITE(GAUCHE(G2;7);2)="PR";"ENTRETIEN";
'SI(C2="Materiels - Entretien";"ENTRETIEN";
'SI(ESTNUM(CHERCHE("Carburant";D2));"Carburant";
'SI(D2="Couts de detention du parc";"PARC";
'SI(D2="Personnel Interim.";"Personnel Intérim";
'SI(GAUCHE(D2;2)="MO";"MO";
'SI(D2="Revente interne d'atelier";"ENTRETIEN";"Autres")))))))))
 

Pièces jointes

  • Matériel OE Marseille ATI.xlsm
    794.3 KB · Affichages: 5