[VBE] find avec en paramètre une plage de cel

Fermé
slyt - 27 août 2009 à 13:32
 Slyt - 27 août 2009 à 21:43
Bonjour,

J'aimerai savoir s'il est possible en VB sur Excel d'effectuer une recherche sur une plage de cellules avec en paramètre non pas une valeur, mais une plage de valeurs.

Je m'explique :

J'ai 2 listes (L1 et L2), chacune contenant (disons) 3 colonnes.
Mon but est de récupérer les triplets (ColA, ColB, ColC) de L1 qui ne sont pas dans L2 (en inversement).

Dans mon programme, je parcours chaque ligne de L1.
Pour chaque triplet, je pensais (naïvement) vérifier dans L2 via la fonction FIND qu'il existait via la ligne suivante :

Set rRange = sheet("L2").Range("A1:C500").find( what:=sheets("L1").range("A" & x & ":C" & x) )
où x est le numéro de la ligne que je suis en train de parcourir dans L1
(j'ai simplifié au max mon exemple)

Malheureusement, le résultat de rRange ne vérifie que la première cellule de ma valeur What.

Est-ce qu'il existe une autre méthode/fonction pour effectuer cette vérification, ou un paramètre de FIND qui permet d'effectuer ce test ?

Merci d'avance
Slyt
A voir également:

5 réponses

melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
27 août 2009 à 13:53
Bonjour,

en faisant une boucle par exemple :

i= 2
j = 12

cells(i,j).select 'qui correspond à la première cellule de L1
do while selection <> ""
valeur = cells(i,j)
Set rRange = sheet("L2").Range("A1:C500").find( what:=valeur)
if rrange <> "" then
'si valeur trouvée....
else
'si valeur non trouvée...
end if

i=i+1

loop
0
Déjà merci Melanie1324,

Ca voudrait dire que je fais la vérification cellule par cellule via une (énième) boucle, ce que je voudrais éviter.
J'ai une autre solution dans le genre mais qui est lourde.

Mais si ce n'est pas possible de faire autrement, je vais devoir faire ainsi...
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
27 août 2009 à 15:26
bonjour,

tu pourrais

erreur de message, excusez moi...
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
27 août 2009 à 15:54
Re,

Si tu n'as que 500 lignes tu pourrais utiliser sans VBA la fonction matricielle EXACT en concaténant les 3 cellules de chaque liste
=EXACT(cells(lig_L1,1)&cells(lig_L1,2)&cells(lig_L1,3);cells(lig_L2)... ect

Sinon, en VBA tu pourrais utiliser l'objet Dictionary (2 cascades de dictionnary pour éviter d'avoir les concatenations des absents de L1 dans L2 et de L2 dans L1).

si tu coinces, dis le, je regarderais à mon retour....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Malheureusement, il y a (a priori) 2 problème :
- non, il n'y a pas que 500 lignes, ça serait plus 2000 au minimum
- le nombre de colonne est en fait une variable définie au tt début de mon code. pour la concaténation, ce n'est pas gagné.

Je vais me documenter sur l'objet Dictionary que tu as cité.

Merci
0