VBA RechercheV avec table_matrice jusqu'à la dernière ligne

Fermé
Jerome - 23 juin 2022 à 12:18
 Jerome - 24 juin 2022 à 13:52
Bonjour,

Je me permets de solliciter votre aide car je rencontre une difficulté sur Excel et plus précisément en VBA. En effet, je réalise une rechercheV/Vlookup sur une autre feuille de mon classeur, mais la difficulté ne se trouve pas là.
Ma difficulté est due au faite que la table_matrice (plage où je vais chercher mon info) est amenée à évoluer. C'est à dire que la semaine 1 je peux avoir 600 ligne, la semaine 2 900 lignes, la semaine 3 10.000 lignes etc. Du coup, quand je réalise ma macro à l'instant T, (je précise que c'est des données bloquées avec le $ sur le tableur et surtout que je ne suis vraiment pas bon en VBA), il va me bloquer ma table_matrice jusqu'à la dernière ligne de cette semaine. Mon problème est que sur les semaines d'après, il risque de ne pas retrouver plusieurs données et me proposer un (#N/A) alors que la donnée est belle et bien présente mais plus bas.

Pour éclaircir ma pensée :

En gros imaginons que cette semaine, je cherche dans ma liste un n° pour savoir à quelle personne il appartient. Sur Excel (tableur) je vais écrire =RECHERCHEV(I4;$A$2:$B$13;2;0) en partant du principe que I4 = 0 je retrouverais le résultat "Christine".

Colonne A Colonne B
00 Christine
01 Christine
02 Christine
03 Christine
04 Monique
05 Monique
06 Monique
07 Monique
08 Fatima
09 Fatima
10 Fatima
11 Fatima

Mais du coup la semaine suivante, en VBA la donnée serait bloquée jusqu'à B13 alors que cette semaine ci imaginons que j'ai plus de donnée et que je cherche : Sur Excel (tableur) =RECHERCHEV(I4;$A$2:$B$13;2;0) en partant du principe que I4 = 15 je retrouverais le résultat "#N/A". alors que je voudrais "Jean"

Colonne A Colonne B
00 Christine
01 Christine
02 Christine
03 Christine
04 Monique
05 Monique
06 Monique
07 Monique
08 Fatima
09 Fatima
10 Fatima
11 Fatima
12 Jean
13 Jean
14 Jean
15 Jean

Voici un modèle du code VBA, en gros je vais chercher ma donnée dans la feuille qui s'appelle "IEP S-1" et ce que j'aimerais c'est que le point d'arrivée de la matrice ne soit pas R7905C18, mais la dernière ligne du tableau

Range("S2").Select
ActiveCell.FormulaR1C1 = _
"=IFERROR(VLOOKUP(RC[-5],'IEP S-1'!R2C13:R7905C18,6,0),""Non"")"

Je sais que j'ai la possibilité de mettre un chiffre plus élevé comme R150000C18 pour être tranquille, mais je voulais un code plus propre et surtout éviter d'alourdir ma macro qui est déjà très lourde.

Merci à tous pour votre aide,

Amicalement
Jérôme




Configuration: Windows / Chrome 102.0.0.0
A voir également:

5 réponses

PapyLuc51 Messages postés 4396 Date d'inscription dimanche 3 mai 2009 Statut Membre Dernière intervention 18 novembre 2024 1 445
Modifié le 23 juin 2022 à 14:11
Bonjour,

À tenter (sans VBA) avec les fonctions indirect() et nbval() pour chercher le nombre de valeurs dans l'une des deux colonnes du tableau de recherches - formule à adapter en remplaçant Feuil2! pas le nom réel de la feuille

=RECHERCHEV(I4;INDIRECT("Feuil2!$A$2:$B$"&NBVAL(Feuil2!B:B));2;0)


Cordialement
1
Bonjour PapyLuc51,

Un grand merci de vous être penché sur mon problème et d'y avoir consacré du temps. Votre réponse et très intéressante, mais au vu des réponse je pense que celle de via55 correspond plus à mes attentes.

Encore un grand merci pour votre aide,

Amicalement
1
via55 Messages postés 14495 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 7 novembre 2024 2 735
23 juin 2022 à 14:59
Bonjour

En VBA pour avoir le n°de la dernière ligne non vide de la colonne B :
Ligne = Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row

Ensuite mettre cette variable dans ta formule :
ActiveCell.Formula = "=IFERROR(VLOOKUP(I4,$A$2:$B$" & ligne & ",2,0),""non"")"


Cdlmnt
Via
1
Bonjour via55,

Un très grand merci pour dans un premier temps avoir accordé du temps à mon problème et dans un second pour l'avoir résolu. C'est super et ça fonctionne parfaitement

Merci +++++

Amicalement
0
via55 Messages postés 14495 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 7 novembre 2024 2 735
24 juin 2022 à 13:25
Bonjour

C'est IFERROR et non IERROR
La rectification effectuée la formule fonctionne bien chez moi

Je ne vois pas pourquoi cela retournerait un 0 chez toi car soit la formule est incorrecte et cela renvoie une erreur, soit la formule est correcte mais la valeur en A1 n'est pas trouvée et cela renvoie non

Impossible d'en dire plus sans avoir vu ton fichier
Si ton problème persiste, fournis ton fichier en le postant su cjoint.com, en faisant créer un lien que tu copies et reviens coller ici dans ton prochain message

Cdlmnt
Via


1
Bonjour via55,

Encore merci pour votre aide. Du coup je pensais ne plus avoir de problème, mais quand je vais chercher mon information dans une autre feuille (Feuil1 par exemple) ça ne fonctionne pas. Il me renvoie à un 0. Sauriez vous pourquoi et comment résoudre ce souci ?

Sub VBA()

ligne = Sheets("Feuil1").Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
ActiveCell.Formula = "=IERROR(VLOOKUP(A1,Feuil1!$A$2:$B$" & ligne & ",2,0),""non"")"

End Sub

Encore merci ++++++++++++++ pour votre aide,

Amicalement
0

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

Posez votre question
Re bonjour,

En effet, mon erreur venait de l'erreur de syntaxe que vous avez relevée IFERROR et non IERROR.

Un trèèèèèèès grand merci pour votre aide,

Amicalement,
0