Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/01/2012, 08h36   #1
Invité de passage
 
Inscription : janvier 2012
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 7
Points : 0
Points : 0
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.
fcsjeux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 09h00   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 919
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 919
Points : 7 232
Points : 7 232
Bonjour,

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

Code :
=INDEX(C6:C10;EQUIV(1;(B6:B10=B2)*(A6:A10=B1);0))
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/01/2012, 09h51   #3
Invité de passage
 
Inscription : janvier 2012
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 7
Points : 0
Points : 0
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 ?
fcsjeux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 09h55   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 919
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 919
Points : 7 232
Points : 7 232
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

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 10h04   #5
Invité de passage
 
Inscription : janvier 2012
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 7
Points : 0
Points : 0
J'en ai eu à un moment et ça me donnait une autre erreur. Mais actuellement, je n'ai aucunes accolades ...
fcsjeux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 10h21   #6
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 919
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 919
Points : 7 232
Points : 7 232
Je te propose de lire ce tutoriel. Cela devrait t'aider à utiliser cette formule

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

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h09   #7
Invité de passage
 
Inscription : janvier 2012
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 7
Points : 0
Points : 0
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 !
fcsjeux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h16   #8
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
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
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h41   #9
Invité de passage
 
Inscription : janvier 2012
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 7
Points : 0
Points : 0
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 :
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 !
fcsjeux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h52   #10
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 919
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 919
Points : 7 232
Points : 7 232
Quel dommage de ne pas avoir abouti a faire fonctionner la formule.
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h58   #11
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
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 :
=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
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/01/2012, 15h08   #12
Invité de passage
 
Inscription : janvier 2012
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 7
Points : 0
Points : 0
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 ?
fcsjeux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h14   #13
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 919
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 919
Points : 7 232
Points : 7 232
Citation:
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 ?

Citation:
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

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h14   #14
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
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
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h37   #15
Invité de passage
 
Inscription : janvier 2012
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 7
Points : 0
Points : 0
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 ...
fcsjeux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 16h19   #16
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 919
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 919
Points : 7 232
Points : 7 232
Je vais expliquer son utilisation car pas sur de savoir expliquer le fonctionnement d'une formule matricielle

Code :
=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 :
EQUIV(1;(B6:B10=B2)*(A6:A10=B1);0)
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h19.


 
 
 
 
Partenaires

Hébergement Web