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 !
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).
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
Quelqu’un peut m’aider ?
Merci, à bientôt !
Partager