Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utiliser une fonction EQUIV sous VBA dans une var.

Sujet résolu
12 septembre 2016 à 22:46:48

Bonsoir,

Je me permet de faire encore appel à la communauté parce qu'après avoir essayé quelques trucs je ne trouve pas la solution.

Je vous explique, je dois créer une partie d'un code sous VBA (Excel) pour retrouver une valeur en fonction d'une autre dans un tableau.

Donc jusque là, tout va bien, je dois utiliser la fonction INDEX/EQUIV qui est très pratique et que j'ai déjà utilisé dans le tableur directement.

Ne sachant pas faire la fonction IDEX/EQUIV dans la même ligne de code et dans le but d'apprendre j'ai voulu séparer la fonction EQUIV de la fonction INDEX et mettre la valeur de EQUIV dans une variable "valeurDeEquiv".

Le problème est que je dois peut-être avoir un problème de syntaxe mais quand je lance ma macro avec cette ligne:

valeurDeEquiv = WorksheetFunction.Match(Cells(4, nombreDeCycle + 5), Range(Cells(2, nombreDeCycle + 2), Cells(3, nombreDeCycle + 2)), 1)

Je reçois un doux message d'erreur:

"Erreur d'exécution '1004':

Impossible de lire la propriété Match de la classe WorkSheetFunction"

J'aimerais donc avoir votre avis de personne avisées.

Je précise que toutes les variables que j'utilise sont correctes puisque je les utilises un peu plus tôt dans mon code.

Merci d'avance pour votre aide !

Julien MIGNONNEAU

-
Edité par Julien Mignonneau 12 septembre 2016 à 22:48:02

  • Partager sur Facebook
  • Partager sur Twitter
13 septembre 2016 à 11:50:41

Bonjour,

Dans l'aide, il est indiqué que lorsque le troisième argument vaut 1, alors la plage de recherche doit être triée par ordre croissant. Tu es le seul à pouvoir vérifier, mais c'est probablement la cause de ton erreur.

Note que si c'est juste une valeur que tu recherches et pas son emplacement, les fonction VLOOKUP et HLOOKUP sont plus adaptées.

  • Partager sur Facebook
  • Partager sur Twitter
13 septembre 2016 à 13:14:05

Bonjour,

Je viens d'essayer avec "0" comme troisième argument (j'ai fais une erreur et il me faut bien "0" comme troisième argument ^^). Le problème est toujours là et dans l'aide il y a marqué que il n'y a pas besoin que les valeurs soient classées pour fonctionner.

Si je fait ça c'est pour que ça me renvoi le numéro de ligne, pour pouvoir le réutiliser dans une autre fonction INDEX.

Merci de prendre du temps pour me répondre :)

Julien MIGNONNEAU

-
Edité par Julien Mignonneau 13 septembre 2016 à 13:25:24

  • Partager sur Facebook
  • Partager sur Twitter
16 septembre 2016 à 12:20:22

Dans ce cas, le plus probable est que la valeur cherchée n'est pas trouvée dans la plage de recherche. Essaie de tester que la valeur existe bien en utilisant une autre méthode, par exemple avec la fonction Range.Find().

Si ce n'est pas ça, alors je n'ai pas d'autre idée. Tout ce que je peux te dire, c'est que ta ligne fonctionne lorsqu'on la teste dans un classeur vierge en écrivant du texte dans les plages concernées.

  • Partager sur Facebook
  • Partager sur Twitter
17 septembre 2016 à 16:28:36

J'ai parlé de mon problème avec mon prof' pour savoir ce qu'il en pensait et il m'a expliqué que j'avais fais une erreur dans la sélection de mon tableau de valeurs dans lequel la fonction fait la recherche. 

En fait, la fonction cherche sur deux cellule seulement alors que je devais rendre ça dynamique en fonction d'une autre variable, et donc la fonction cherchait une valeur dans un tableau de deux case qui ne comportait pas la valeur cherchée.

Je classe donc ce sujet résolu et je te remercie pour avoir pris le temps d'essayer de résoudre mon problème Sarkas.

Julien MIGNONNEAU

  • Partager sur Facebook
  • Partager sur Twitter
1 avril 2020 à 15:10:48 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


1 avril 2020 à 16:43:13

Bonjour, @BelcaidAbdallah merci de créer votre propre sujet dans le respect des règles du forum.

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter