Sommeprod et Exact dans VBA

Résolu
lantenac -  
 lantenac -
Bonjour,

Je cherche à créer une fonction personnalisée qui effectue un test simple sur une colonne de données, à savoir si pour chaque cellule il en existe d'autres qui ont la même écriture mais une casse différente. La formule que je tape directement dans excel est celle-ci :
=SI(SOMMEPROD(EXACT(F21;$F$21:$F$28)*1)=NB.SI($F$21:$F$28;F21);VRAI;FAUX)

En déroulant la formule, j'ai un vrai ou faux en face de chaque cellule ce qui me convient tout à fait.

J'aimerais créer une fonction personnalisée avec VBA qui fasse la même chose mais en un peu plus court. Je précise, ce qui sera certainement visible rapidement, que mes connaissances en VBA sont extrêmement basiques.
Le code que j'ai écrit est le suivant :
Function VerifieCasse(Cellule, Plage As Range)

    If WorksheetFunction.CountIf(Plage, Cellule) = WorksheetFunction.SumProduct(EXACT(Plage, Cellule) * 1) Then
    VerifieCasse = "Ok"
    Else
    VerifieCasse = "Problème"
    End If

End Function

Seulement ça ne marche pas (erreur #VALEUR!).
J'ai cru comprendre que c'était le EXACT qui posait problème, mais je ne sais pas comment le remplacer ou écrire quelque chose qui aurait un effet similaire.

Si quelqu'un avait une idée, je vous en serais très reconnaissant :-)

A voir également:

1 réponse

pilas31 Messages postés 1825 Date d'inscription   Statut Contributeur Dernière intervention   646
 
Bonjour,

J'ignore comment on traduit EXACT mais personnellement je n'aime pas trop utiliser les fonctions Excel en vba, je préfère une expression algorithmique classique d'ou ma proposition avec une petite boucle for :

Function VerifieCasse(Cellule, Plage As Range)
    For Each Celltest In Plage
        If Celltest.Value <> Cellule.Value And UCase(Celltest.Value) = UCase(Cellule.Value) Then
            'Les cellules sont identiques mais la casse est différente
            VerifieCasse = "Problème"
            Exit Function
        End If
    Next Celltest
    VerifieCasse = "Ok"
End Function

1
lantenac
 
Pilas31,

Effectivement, votre solution est bien plus élégante et me semble fonctionner correctement.

Un grand merci !
0