Sommeprod et Exact dans VBA [Résolu/Fermé]

-
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 :-)

Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
1857
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
12 juillet 2019
533
1
Merci
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

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 69378 internautes nous ont dit merci ce mois-ci

Pilas31,

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

Un grand merci !