IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème de fonctions index + equiv imbriqués


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Problème de fonctions index + equiv imbriqués
    Bonjour,

    Je souhaite adapter un exemple d'imbrication de fonctions index et equiv à mon projet, j'obtient un résultat mais incohérent, saurez vous me sortir de là ?!

    Voilà mon projet simplifié :

    Le but est d'obtenir le bon diamètre de vis (Dv) adapté à 2 variables d'entrées : le diamètre du tube (Dt) et sa longueur (L).
    On retrouve ces deux variables dans une base de données et on les choisis grâce à des combobox.
    En fait, la difficulté vient du fait que pour le même Dt, on peut avoir deux L différentes et pour ces deux L on peut avoir deux Dv différents.

    Voyez plutôt :

    ........A.........B........C
    1.....Dt=......#choisi par utilisateur#
    2.....L=........#choisi par utilisateur#
    3
    4.....Base de données :
    5.....Dt....... L.......Dv
    6.....4........10.......2
    7.....4........15.......2
    8.....6........10.......4
    9.....8........10.......2
    10...8 .......15.......4

    Donc si l'utilisateur donne :
    Dt=8 et L=15
    alors Dv=4
    De la même manière avec
    Dt=6 et L=10
    alors Dv=4

    J'ai tenté avec cette formule :
    =INDEX(C6:C10;MATCH(A2;OFFSET(B6:B10;MATCH(A1;A6:A10;0); );0))
    Mais comme je le disais, les résultats sont incohérents.

    Quelqu'un connait ce genre de manip' ??
    Merci !

    PS : désolé pour l'illustration mais je n'ai pas vraiment le temps de chercher à faire autrement.

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Ci dessous une formule matricielle qui devrait faire ce que tu souhaites (A valider par CTRL + MAJ + ENTREE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX(C6:C10;EQUIV(1;(B6:B10=B2)*(A6:A10=B1);0))
    Jérôme

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Bravo ! 24 minutes pour répondre, c'était inespéré !

    Cependant quand je met ta formule en place (j'ai bien entendu modifié "equiv" en "match" pour mon excel en anglais), je n'obtiens qu'une erreur #VALUE!
    A vrai dire je ne comprend pas bien ta fonction EQUIV...

    Pourrais tu m'éclairer ?

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Si tu as cette erreur, c'est que tu n'as pas validée cette formule par CTRL + MAJ + ENTREE. (Tu dois voir des accolades s'afficher autour de la formule)
    Jérôme

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    J'en ai eu à un moment et ça me donnait une autre erreur. Mais actuellement, je n'ai aucunes accolades ...

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Je te propose de lire ce tutoriel. Cela devrait t'aider à utiliser cette formule

    http://silkyroad.developpez.com/excel/indexequiv/
    Jérôme

  7. #7
    Candidat au Club
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    J'ai lu ta page, que j'avais déjà bien parcouru, mais j'ai vraiment l'impression de me perdre petit à petit !
    Tout est possible avec Excel non ? J'ai vraiment besoin d'une solution !

  8. #8
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Avec Excel en anglais, c'est pas des , à la place des ; aussi ?
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  9. #9
    Candidat au Club
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Bonjour Zebreloup,
    Non les "," remplacent les ";" dans les macros si tu veux insérer une formule dans une case.
    Dans le doute, j'ai fait le test, mais c'est pire, Excel ne l'accepte même pas...

    Merci jfontaine, relire plus profondément la page m'a fait voir le problème autrement.
    J'ai finalement fait une macro toute simple qui rempli parfaitement la tâche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CommandButton1_Click()
        Dim i As Integer
        Do
        i = i + 1
        Loop Until Range("B1") = Cells(5 + i, 1) And Range("B2") = Cells(5 + i, 2)
        Range("B3") = Cells(5 + i, 3)
    End Sub
    en reprenant l'illustration plus haut et avec le Dv recherché en B3.
    Je vous remercie tout deux quoiqu'il en soit !

  10. #10
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Quel dommage de ne pas avoir abouti a faire fonctionner la formule.
    Jérôme

  11. #11
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    L'Excel américain par défaut utilise bien des virgules à la place des point-virgules, j'ai déjà travaillé avec à une époque. Après, il y a un peu toutes les variantes...
    Et c'est vrai que c'est dommage que tu n'aies pas réussi à écrire la formule matricielle.
    Et en faisant ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX(C6:C10;EQUIV(1;(B6:B10=B2)*(A6:A10=B1)*1;0))
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  12. #12
    Candidat au Club
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Mille excuse !! les deux formules fonctionnent parfaitement !
    J'avais juste mal activé.

    Pourriez-vous m'expliquer EN FRANCAIS comment fonctionnent ces formules ?

    Bon j'ai repris votre formule pour mon calcul puisque mon code vba a une faille (incompréhensible...).
    Seulement je travail avec une userform qui selon les choix de l'utilisateur, remplie une feuille. Autrement dis, tout est un peu dicté par le code vba principal.
    Or j'ai besoin de pouvoir valider votre formule à partir de mon code vba, c'est à dire, simuler la combinaison CTRL + SHIFT + ENTREE (en effet, apparemment il s'agit de SHIFT et non MAJ )
    J'ai essayé avec Application.SendKeys "^+~" mais ça ne marche pas.
    Il faut réussir à accéder directement à la formule comme lors d'un double click.
    Connaissez vous une solution ?

  13. #13
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Or j'ai besoin de pouvoir valider votre formule à partir de mon code vba, c'est à dire, simuler la combinaison CTRL + SHIFT + ENTREE (en effet, apparemment il s'agit de SHIFT et non MAJ )
    Elle est ou la touche MAJ sur ton clavier si c'est pas la même que SHIFT ?

    Or j'ai besoin de pouvoir valider votre formule à partir de mon code vba
    En voila une bonne question.
    Par contre, je ne connais pas la réponse
    Jérôme

  14. #14
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Tu la rentres comment la formule ? Si tu utilises Formula, tu peux utiliser FormulaArray à la place, mais il faut adapter un peu.
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  15. #15
    Candidat au Club
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    En fait voulais avoir une formules matricielles ou l'autre (très légèrement différentes) selon la valeur d'une autre cellule et après de larges recherches en vain, j'ai tenté tout simplement avec :

    =si(cellule=10;formule1;si(cellule=20;formule2;0))

    et ça marche !


    jfontaine tu as raison, j'ai été induit en erreur par un autre forum

    Merci messieurs !

    pourriez vous quand même m'expliquer le fonctionnement de votre formule matricielle ? Juste pour savoir ce que je fais ...

  16. #16
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Je vais expliquer son utilisation car pas sur de savoir expliquer le fonctionnement d'une formule matricielle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX(C6:C10;EQUIV(1;(B6:B10=B2)*(A6:A10=B1);0))
    Contient la matrice de donnée a retourner

    Si la condition (B6:B10=B2)*(A6:A10=B1) est remplie, Equiv retourne 1, devant l'index de ligne correspondant à la matrice de retour index (ou la pas simple à expliquer)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EQUIV(1;(B6:B10=B2)*(A6:A10=B1);0)
    Jérôme

Discussions similaires

  1. [XL-2010] Fonctions INDEX EQUIV DECALER RECHERCHE ?
    Par LiseUEMPT dans le forum Excel
    Réponses: 3
    Dernier message: 25/06/2014, 21h31
  2. Fonctions Index, Equiv et cellules vides
    Par arnaud_d1 dans le forum Excel
    Réponses: 5
    Dernier message: 07/11/2013, 15h29
  3. Fonction Index(Equiv et nombre trop importants de fonction
    Par sanderlucius dans le forum Excel
    Réponses: 4
    Dernier message: 07/06/2013, 11h32
  4. Fonctions Index+Equiv avec classeur fermé
    Par templeoflove777 dans le forum Excel
    Réponses: 5
    Dernier message: 12/03/2012, 12h39
  5. [XL-2003] Fonction Index Equiv
    Par jm6570 dans le forum Excel
    Réponses: 3
    Dernier message: 16/02/2011, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo