Bonjour, tout le monde.

J’essaye de me construire en VBA Excel (2010) une fonction personnalisée qui me permette de découvrir s’il existe dans une feuille de mon fichier autre que la courante, une ligne contenant deux ou trois cellules identiques à celles que j’indique en argument.
C’est tordu, comme explication, je vais faire un exemple. Liste de mouvements bancaire dans la feuille ‘2012’! Dans la feuille courante, par contre, liste de mouvement provenant d’autre source, et contenant peut-être des différences avec l’autre liste. Champs occupés : 4 (date, description, montant débit, montant crédit) ; dans une colonne un peu plus loin, je mets ma fonction, qui a une syntaxe du genre =MaCompDB(feuille; cellule1; cellule2; cellule3). La feuille que j’indique dans la fonction est celle dans laquelle il faut chercher le « doublon », tandis que les cellules sont celles de la feuille courante, dont je cherche les valeurs.

En d’autres termes:

col A B C D E
ligne

5 5/6/2012 chèque untel 123,00 = MaCompDB (‘2012!’;A5;B5;C5)

La fonction doit répondre à la question : combien de cellules trouves-tu dans l’autre feuille et sur une même ligne, contenant les mêmes valeurs que les cellules que je t’indique ?

Or, depuis que j’ai découvert que la commande Find restitue une adresse, c’est tout un monde qui s’est ouvert à moi ! Du coup, je peux en extraire un numéro de ligne et de colonne…
J'ai beaucoup cherché dans les forums. Parmi les différentes sources, celle-ci me semble excellente : www.cpearson.com/excel/rangefind.htm. Dommage que je comprenne si peu l’anglais !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Function MaCompDB (Fgl As Worksheet, cella1 As Range, cella2 As Range, Optional cella3 As Range)
MaCompDB = 0
Dim risp As Range, c1 As String
c1 = cella1.Column 'résulte sous forme de numéro
v1 = cella1.Value
c2 = cella2.Column
v2 = cella2.Value
If Not cella3 Is Nothing Then
    c3 = cella3.Column
    v3 = cella3.Value
End If
With Fgl.UsedRange
    Set risp = .Find(v1, LookIn:=xlValues) 'Comment limiter cette recherche à la colonne indiquée dans la variable c1 ?
    Fadd = risp.Address
    If Not risp Is Nothing Then
        r = risp.Row
        MaCompDB = MaCompDB + 1
    Else
        Exit Function
    End If
If Cells(r, c2).Value = v2 Then MaCompDB = MaCompDB + 1
If Not cella3 Is Nothing Then
    If Cells(r, c3).Value = v3 Then MioConfrDB = MioConfrDB + 1
End If
End With
End Function
Bien évidemment, ça ne marche pas! (Pendant l'écriture de la fonction dans la cellule, il me dit que la syntaxe n'est pas bonne, comme si j'oubliais une parenthèse).
Quelqu’un peut m’aider ?
Merci, à bientôt !