VBA - RECHERCHEV onglet précédent avec filtres variables

Bonjour,

J'ai créé un fichier qui crée un nouvel onglet avec de nouvelles données chaque mois. Cependant, d'un mois à l'autre (d'un onglet à l'autre), je peux avoir des données semblables.

J'ai donc créé une colonne M "Commentaire Mois" et une colonne L "Commentaire Mois-1" pour regarder si j'ai déjà eu cette ligne.

La colonne L du dernier onglet comprend un RechercheV pour aller chercher le commentaire M de l'onglet précédent.

Onglet précédent :

17 02

Dernier Onglet :

image

J'ai donc en L4 : =RECHERCHEV(E4;'17-02-2021'!$A4:$P4;13;VRAI)

Voici mon code VBA:

Sub RechercheV()

 'RechercheV Anciens commentaires

Dim sht As Worksheet, rng As Range
Set sht = Worksheets(ActiveSheet.Index - 1)
Set rng = sht.Range("A4:P500")

ActiveSheet.Range("L4").Formula = "=VLOOKUP(E4," & rng.Address(external:=True) & ",13,TRUE)"

'Faire défiler L4 sur toute la colonne L

Range("L4").Select
    Range("L4").Select
    Selection.AutoFill Destination:=Range("L4:L134")
    Range("L4:L134").Select

End Sub

Le problème c'est que ma valeur recherchée n'a pas l'air d'être prise en compte :

- J'aurai souhaité mettre une plage A4:P500 mais cela ne trouve pas de résultat

- La rechercheV marche avec une plage de $A4:$P4 que je fais défiler (se transforme en $A5:$P5 etc.) MAIS ne fonctionne pas si je change l'ordre des lignes de mon onglet précédent (si je mets par exemple un filtre sur la date, il va me marquer le commentaire de la ligne 4, et pas celui de la ligne où j'ai un mon sérial semblable).

De plus, lorsque je marque dans le code

Set rng = sht.Range("A4:P4")

il me sort $A$4:$P$4 , et je ne vois pas comment supprimer les dollars. J'ai tenté en faisant

Set rng = sht.Range("A" & i & ":P" & i)

mais pareil, il me sort $A:$P, ce qui ne convient pas.

________

Je cherche donc à obtenir une formule rechercheV qui regarde toute mes lignes de l'onglet précédent pour regarder si j'ai déjà eu le même sérial; et que quelques soient les filtres des onglets, il me garde le commentaire du sérial correspondant.

Merci d'avance !

Bonjour,

Je vais essayer de répondre mais je n'ai pas bien compris le problème (noyé sous un flot d'informations).

Déjà, est-ce que vous voulez vraiment une recherche vraie ? Sinon, il faut mettre False en 4è argument. Voici un essai :

ActiveSheet.Range("L4").Formula = "=VLOOKUP(E4," & rng.Address(external:=True) & ",13,FALSE)"

Pour enlever le caractère absolu des références, vous pouvez faire ceci :

rng.Address(0, 0, ,True, )

qui renvoie ...!A4:P500 normalement.

Cdlt,

Bonjour,

Merci pour votre réponse. Le fait d'ajouter :

rng.Address(0, 0, ,True, )

me permet bien de me renvoyer A4:P500. Merci pour cette première étape.

Je cherche à retrouver le commentaire d'une ligne d'un onglet précédent

La recherche peut être vraie ou fausse(j'ai mis VRAI car c'était, avec la plage A4:P4, la seule façon de retrouver un commentaire).

Mon problème : ma recherchev m'affiche le mauvais commentaire si je trie les données du précédent onglet.

Exemple:

Dans un Onglet 2, je crée une recherchev pour trouver un commentaire sur mon onglet 1, grâce à un numéro de SERIAL qui correspondra.

Admettons que mon numéro de sérial correspondant est sur la ligne 4 de l'onglet 1: j'ai bien le commentaire de la ligne 4 qui s'affiche sur l'onglet 2.

Si je trie mes données sur l'onglet 1, mon numéro de sérial sera désormais sur la ligne 25 ; mais sur l'onglet 2 j'ai toujours le commentaire de ligne 4.

Cela me fait le tri par ligne, et non pas par sérial.

J'espère avoir été clair, j'essaie de faire au plus simple, sachant que j'ai dû recommencer plusieurs fois ma réponse car ma connexion avait été perdue.

N'hésitez pas à me donner plus d'infos, et encore merci pour votre aide

C'est parce que vos réponses sont trop longues .

Justement, la recherche vraie se base sur des données triées dans un ordre croissant et renvoie une correspondance à partir de la première valeur qui "dépasse" le critère de recherche. Si la colonne de recherche n'est pas "ordonnée", les positions renvoyées ne seront pas celles attendues...

Essayez en faisant une recherchev sur False. Car l''argument Vrai s'utilise dans des cas bien précis...

On va faire encore plus court alors

Ma case me renvoie #N/A lorsque je mets FALSE...

Auriez-vous une idée ?

Merci !

Je viens de regarder le fichier.

Donc si je comprends, vous faites une recherche sur le SERIAL. Or, il se trouve en colonne E si je ne dis pas de bêtise ?

J'essaierais ça plutôt dans un premier temps :

ActiveSheet.Range("L4").Formula = "=VLOOKUP(E4," & rng.offset(, 4).resize(, 9).Address(external:=True) & ", 9,FALSE)"

Cdlt,

Je pense que j'ai trouvé mon erreur : Il faut que ma valeur recherchée soit dans la première colonne de recherche de ma plage.

J'ai donc modifié pour avoir =RECHERCHEV(E4;'17 02 2021'!E4:M500;9;FAUX)

Je vous remercie pour votre aide !

En même temps ! Bien joué !

Je vois que l'on est arrivé au même résultat ! encore merci !

Rechercher des sujets similaires à "vba recherchev onglet precedent filtres variables"