RechercheV variable

Bonjour,

J'ai réalisé une rechercheV mais le problème c'est que j'ai plusieurs fois ma valeur recherchée et par défaut le rechercheV prend la première valeur qu'il trouve, or moi j'aimerais qu'il me prenne la dernière valeur. Cela est-il possible ?

Merci.

svp

bonjour

Sans savoir de ou ni ou peut être GRANDE.VALEUR

Cordialement

etsije a écrit :

bonjour

Sans savoir de ou ni ou peut être GRANDE.VALEUR

Cordialement

Merci à toi mais la valeur à sélectionner n'est pas forcement la plus grande, ça peut l'être tout comme ça peut être la plus petite.

Comment fais tu le choix

Cordialement

etsije a écrit :

Comment fais tu le choix

Cordialement

En fait je dois prendre la dernière valeur, si ma plage possède 8 fois là même indication à rechercher, je veux prendre la valeur de la 8 ème indication

as tu essayé index et equiv au lieu de ta recherchev( equiv: grande.valeur ou max de ta recherche te donnera le numéro de la ligne correspondante)

etsije a écrit :

as tu essayé index et equiv au lieu de ta recherchev( equiv: grande.valeur ou max de ta recherche te donnera le numéro de la ligne correspondante)

Oui mais je ne veux pas prendre la plus grande valeur.

Bonjour,

Tu inverses toutes tes données (tu tries dans l'autre sens). De cette manière, la dernière valeur devient la première. x)

Bon ok, c'est pas terrible comme solution ...

Cordialement,

Bonjour TeamG1, (le fil)

Function RechercheInverse(liste As Range, quoi, Optional col As Integer)
Dim trv As Boolean
Dim cpt
Dim tabListe()
Dim colRetour

    colRetour = IIf(IsMissing(col), 1, IIf(col = 0, 1, col))

    tabListe = liste

    For cpt = UBound(tabListe, 1) To 1 Step -1
        If tabListe(cpt, 1) = quoi Then
            trv = True
            Exit For
        End If
    Next

    If trv Then
        RechercheInverse = tabListe(cpt, colRetour)
    Else
        RechercheInverse = "#ERR"
    End If

End Function

Je ne suis pas adepte des formules à rallonge donc quand j'ai un problème je passe par VBA, voici donc une solution où les paramètres sont

liste =>

la zone à consulter (elle doit comprendre toutes les lignes utiles et également toutes colonnes utiles)

quoi =>

ce qu'il faut chercher dans la "liste"

il est de type quelconque (numérique, texte entre guillemets, cellule, résultat d'une autre formule...)

col =>

le numéro de colonne à renvoyer (identique à no_index_col de RECHERCHEV)

et comme dans RECHERCHEV il est optionnel (si omis la valeur retournée est dans la première colonne)

Merci je vais essayer cela.

Résolu

Bonjour TeamG1

Parfait

andrea73 a écrit :

Bonjour TeamG1

Parfait

Encore merci à toi, cela fonctionne vraiment bien.

Par contre j'aimerais bien intégrer deux variables i et j qui permettent de délimiter le tableau. J'ai enlever les crochets pour bloquer la plage de cellule (comme avec les $) mais cela ne fonctionne pas. Je pense qu'il s'agit d'une erreur de syntaxe mais je n'arrive pas à trouver. Merci

ActiveCell.FormulaR1C1 = "=RechercheInverse(Calendrier!R" & j& "C-4:R" & i & "C4,RC-7,2)"

(re)

TeamG1 a écrit :

Encore merci à toi, cela fonctionne vraiment bien.

de rien mais quand même

TeamG1 a écrit :

Par contre j'aimerais bien intégrer deux variables i et j qui permettent de délimiter le tableau. J'ai enlever les crochets pour bloquer la plage de cellule (comme avec les $) mais cela ne fonctionne pas. Je pense qu'il s'agit d'une erreur de syntaxe mais je n'arrive pas à trouver. Merci

Je ne comprend pas du tout ce que tu veux faire

La fonction =RechercheInverse( liste ; quoi ; [col] )

est décrite dans le code VBA par

Function RechercheInverse(liste As Range, quoi, Optional col As Integer)
...
End Function

liste =>

(avec le As Range derrière représente une plage de cellule)

donc tu peux délimiter la plage de cellules comme tu veux !

toutes les colonnes ou certaines seulement, toutes les lignes ou certaines seulement d'un même ensemble de données

comme dans toutes les fonctions d'Excel où une plage de cellules est nécessaire !

quoi =>

(avec rien derrière indique que ce paramètre est libre)

il peut donc s'agir d'une cellule (forcément unique !), d'une valeur texte, numérique, date..., d'une autre formule...

col =>

(avec As Integer derrière indique que la fonction veut un nombre entier)

(avec Optional devant indique ce paramètre est optionnel)


Maintenant il semblerait que cherches à automatiser des formules par VBA, si tu fournissais un exemple concrêt pour je "cherche" l'erreur ce serait plus rapide !

Oui c'est bien ça, j'aimerais automatiser avec VBA, pour cela j'ai enregistrer une macro en faisait le fonction RechercheInverse et cela m'a donné un code que j'ai ensuite modifié pour obtenir cela. J'ai vu quand VBA il fallait enlever les crochets pour figer les cellules.

ActiveCell.FormulaR1C1 = "=RechercheInverse(Calendrier!R" & j& "C-4:R" & i & "C4,RC-7,2)"

(re)

TeamG1 a écrit :

J'ai vu quand VBA il fallait enlever les crochets pour figer les cellules.

ah bon donc à mon avis fait comme si tu n'avais jamais lu quelque chose de ce genre et remets les crochets

Par contre je répète

andrea73 a écrit :

si tu fournissais un exemple concrêt pour que je "cherche" l'erreur ce serait plus rapide pour t'aider !

Voici le fichier test

10test.xlsm (20.87 Ko)

(re)

Je ne comprends toujours pas ce que tu cherches à faire


Deuxième chose. Le code suivant est un peu bizarre

recherche = "23/02/2017"

Sheets("Calendrier").Select
Range("A1").Select
i = 0
While (ActiveCell.Offset(i, 1) <> recherche)
    i = i + 1
Wend

ActiveCell.Offset(i, 1) donne les cellules de la colonne B

Or tu recherches une date (cf. la déclaration de ta variable en début de code recherche = "23/02/2017")

Les dates sont dans la colonne A


Troisième chose

Ta boucle While/Wend est incorrecte. Le i = i +1 va finir par aller au delà du nombre de lignes d'Excel !

Il faudrait ajouter un "flag" (comme on dit dans ce cas là - ou un sémaphore en français) pour indiquer quelque chose du genre "si la variable i est supérieure à la dernière ligne alors il faut arrêter la recherche pour éviter un plantage"


Dernière chose

Pourquoi ne pas utiliser ma fonction =RechercheInverse() qui fonctionne très bien plutôt que de vouloir réinventer la roue qui existe déjà, surtout si elle tourne déjà très bien !

Merci pour ton retour.

En fait si je veux utiliser la fonction RechercheInverse() c'est parce que j'ai une plage variable, tous les jours elle change, et je l'ai délimité par deux variables i et j avec i et j qui prennent des valeurs de lignes (i = ligne 12 et j = ligne 50 par exemple) et je voulais aussi les bloquer avec un $ mais dans mon code ci dessous, j'ai un problème de fonctionnement.

Merci

Rechercher des sujets similaires à "recherchev variable"