Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recherche paramétrable dans plusieurs tableaux avec VBA?

3 réponses
Avatar
Lo
Bonjour à vous,
Après 4jrs de recherche sur excelabo.net , de téléchargement d'exemples ...,
on est vendredi et je n'ai toujours pas trouvé ! J'ai besoin d'aide pour
faire une forumle compliquée.
(je ne suis pas du tout une experte en excel ni VBA et je n'utilise
peut-être pas le bon vocabulaire
ci-dessous)

Voici mon souci :
formule dynamique en VBA ou formule excel pour faire ceci : Recherche
paramétrable
dans plusieurs tableaux .

1) definition de mes feuilles
- feuille "donnees"
qui contient plusierus tableaux de donnees différentes de A à AD
ex:
A B C ... G F ..
250 1 100 200 ... 300 300
251 2 126 400 ... 500 400
252 3 32 45 ... 67 500
...
264 15 366 700 ... 78 1000 ...

par la commande: Insertion>Nom>Définir
j'ai nommé le tableau : "fenetre" pour les lignes "A250:AD269"
Ces tableaux ainsi définis ne font pas tous 20 lignes chacuns.
J'en ai de 5, de 10, 15 et 20.
Dans cette feuille j'ai 31 tableaux pour le moment mais il va y en avoir plus.
Tous nommés de cette façon.
Tous ont en A un n° 1,2,3,4...

- feuille "liste"
en A j'ai une liste1 de 22 (22 maxi, mini 0, doublons admis) noms des
tableaux de la feuille "donnees",
mais pas tous. En B j'ai le n°de ligne du tableau ("liste"en A) de la
feuille "donnees".
En C, j'ai une formule qui va me chercher une info dans le tableau nommé en
A, en colonne 6
du tableau définis sur "donnees".
exemple :
A B C D
23 fenetre 3 =RECHERCHEV(B23;INDIRECT(A23);3;VRAI)
24 cave.a 1 =RECHERCHEV(B24;INDIRECT(A24);3;VRAI)
25 fenetre 15 =RECHERCHEV(B25;INDIRECT(A25);3;VRAI)
26 pot.t1 3 =RECHERCHEV(B26;INDIRECT(A26);3;VRAI)
27 .... etc

en C23, je vais cherché dans le tableau mentionné en A23, la colonne 3
(c'est à dire C) la ligne indiquée en B23, ici 3.

2) mes soucis :
- cumul de ligne :
Sur le feuille "liste", j'aimerais pourvoir :
En D : chercher dans le tableau mentionné en A, du n°ligne 1 au n°ligne
infiqué
en B et additionner les chiffres les chiffres de la colonne 7 (G).
exemple ligne 23 ci-dessus : chercher dans le tableau "fenetre" (défini sur
feuille "donnees") et additionner la colonne G ligne 1+G ligne 2+ G ligne 3

- recapitulatif :
Ma liste1 comporte 22 possibilités de noms de tableaux, je peux avoir des
doublons et pas d'ordre de saisi défini.
En haut de ma feuille j'ai un récapitulatif pour chaque noms de tableaux.
J'aimerais pouvoir balayer ma liste1 (22 maxi, mini 0) et additionner la
valeur définie en F (colonne 6 feuille "donnees" tableau mentionné en liste1)
du n°
de ligne indiqué en B de la liste1. Une fois le résultat obtenu le multiplié
par
un% obtenu dans un autre tableau si mentionné dans ma "liste1".

exemple :
dans feuille "liste", liste1 définie par : Insertion >Nom>Définir :
"liste1" pour les lignes "A23:B44"
puis :
A B
1 fenetre =pour chaque ligne du tableau ["liste1"] :
si dans [liste1/colonne 1] trouvé "fenetre" alors avec
[liste1/colonne 2] allez chercher dans le
tableau
["fenetre"] au n°ligne indiqué en
liste1/colonne 2] la
valeur de la colonne F (colonne 6), la
mémoriser pour
l'additionner à la valeur de la ligne
suivante
du tableau ["liste1"] si "fenetre" trouvé de nouveau.
Ici le resultat devrait être : 1500
A multiplier avec % si ... voir ci-dessous

2 cave.a = idem ci-dessus mais avec "cave.a" comme tableau principal de
donnees
3 cave.b = idem ci-dessus mais avec "cave.b" comme tableau principal de
donnees
4 ...

Puis le résultat obtenu en B2 grace à la formule ci-dessus, le multiplier
par % obtenu si pot.t1
est dans la "liste1", au n°ligne indiqué en ["liste1" 2nd colonne ou B] du
tableau "pot.t1" défini dans
feuille "donnees" en colonne H (8ème colonne).
Feuille "donnees" tableau "pot.t1" défini par Insertion >Nom>Définir :
lignes "A170:AD174"
A B ... H
170 1 100 ... 5%
171 2 126 ... 10%
172 3 32 ... 15%
...
ici dans ma ["liste1"] il y a bien pot.t1 aussi : chercher dans tableau
["pot.t1"] à la ligne indiquée
dans ["liste1", colonne 2 (ou B) ] le %. Resultat : 15%
ces 15% sont appliquer à resultat ci-dessus en B2 pour "fenetre". total = 1725

Si vous m'avez lu jusqu'ici, c'est déjà super pour moi, car je viens de
mettre 2h30
a rédiger ma demande d'aide.... :/ j'espère avoir été claire dans mon
exposé.

J'ai passé des heures depuis 4jrs sur http://www.excelabo.net/ pour arriver à
faire cela par moi-même ..... j'suis trop nulle, je n'ai pas réussi et on
est vendredi ! Je suis en retard, alors j'ai grand besoin d'une aide de vrais
pros d'excel.

Mon niveau : 0 en excel (j'ai mis 1h30 à faire fonctionner ma forumle
ci-dessus
=RECHERCHEV(B23;INDIRECT(A23);3;VRAI)

Aussi si vous pouviez être le plus clair possible dans votre réponse, mille
merci par avance.
Lo

ps: Voici mon début de formule où je pensais indiquer en "plage" le nom
"liste1"
même ma msgbox n'a pas fonctionné.

Function fenetre_capacite(plage)
fenetre_capacite= 0
somme = 0
i = 1
For i = 1 To 22

' If range(plage)(i, 1).Value = "fenetre" Then

' MsgBox (i & " " & plage)
Next

fenetre_capacite = somme

End Function

3 réponses

Avatar
Poulpor
Bonjour Lo,

Si je puis me permettre :

- peux-tu mettre à dispo le classeur, c'est hyper difficile de raisonner en
imaginant ton classeur...surtout que ton problème n'est pas simple

- à priori, quand je vois un problème comme ca, je me dis qu le mal est fait
lors de l'organisation du classeur. As-tu pensé à réorganiser tes données de
manière à ce que toutes les requêtes possibles soient plus aisées ?
(j'imagine que oui, tu as l'air plus forte que tu ne le prétends, mais on ne
sait jamais)


Pour info, on peux facilement mettre à dispo les classeurs avec cjoint.com.

Poulpor




Bonjour à vous,
Après 4jrs de recherche sur excelabo.net , de téléchargement d'exemples ...,
on est vendredi et je n'ai toujours pas trouvé ! J'ai besoin d'aide pour
faire une forumle compliquée.
(je ne suis pas du tout une experte en excel ni VBA et je n'utilise
peut-être pas le bon vocabulaire
ci-dessous)

Voici mon souci :
formule dynamique en VBA ou formule excel pour faire ceci : Recherche
paramétrable
dans plusieurs tableaux .

1) definition de mes feuilles
- feuille "donnees"
qui contient plusierus tableaux de donnees différentes de A à AD
ex:
A B C ... G F ..
250 1 100 200 ... 300 300
251 2 126 400 ... 500 400
252 3 32 45 ... 67 500
...
264 15 366 700 ... 78 1000 ...

par la commande: Insertion>Nom>Définir
j'ai nommé le tableau : "fenetre" pour les lignes "A250:AD269"
Ces tableaux ainsi définis ne font pas tous 20 lignes chacuns.
J'en ai de 5, de 10, 15 et 20.
Dans cette feuille j'ai 31 tableaux pour le moment mais il va y en avoir plus.
Tous nommés de cette façon.
Tous ont en A un n° 1,2,3,4...

- feuille "liste"
en A j'ai une liste1 de 22 (22 maxi, mini 0, doublons admis) noms des
tableaux de la feuille "donnees",
mais pas tous. En B j'ai le n°de ligne du tableau ("liste"en A) de la
feuille "donnees".
En C, j'ai une formule qui va me chercher une info dans le tableau nommé en
A, en colonne 6
du tableau définis sur "donnees".
exemple :
A B C D
23 fenetre 3 =RECHERCHEV(B23;INDIRECT(A23);3;VRAI)
24 cave.a 1 =RECHERCHEV(B24;INDIRECT(A24);3;VRAI)
25 fenetre 15 =RECHERCHEV(B25;INDIRECT(A25);3;VRAI)
26 pot.t1 3 =RECHERCHEV(B26;INDIRECT(A26);3;VRAI)
27 .... etc

en C23, je vais cherché dans le tableau mentionné en A23, la colonne 3
(c'est à dire C) la ligne indiquée en B23, ici 3.

2) mes soucis :
- cumul de ligne :
Sur le feuille "liste", j'aimerais pourvoir :
En D : chercher dans le tableau mentionné en A, du n°ligne 1 au n°ligne
infiqué
en B et additionner les chiffres les chiffres de la colonne 7 (G).
exemple ligne 23 ci-dessus : chercher dans le tableau "fenetre" (défini sur
feuille "donnees") et additionner la colonne G ligne 1+G ligne 2+ G ligne 3

- recapitulatif :
Ma liste1 comporte 22 possibilités de noms de tableaux, je peux avoir des
doublons et pas d'ordre de saisi défini.
En haut de ma feuille j'ai un récapitulatif pour chaque noms de tableaux.
J'aimerais pouvoir balayer ma liste1 (22 maxi, mini 0) et additionner la
valeur définie en F (colonne 6 feuille "donnees" tableau mentionné en liste1)
du n°
de ligne indiqué en B de la liste1. Une fois le résultat obtenu le multiplié
par
un% obtenu dans un autre tableau si mentionné dans ma "liste1".

exemple :
dans feuille "liste", liste1 définie par : Insertion >Nom>Définir :
"liste1" pour les lignes "A23:B44"
puis :
A B
1 fenetre =pour chaque ligne du tableau ["liste1"] :
si dans [liste1/colonne 1] trouvé "fenetre" alors avec
[liste1/colonne 2] allez chercher dans le
tableau
["fenetre"] au n°ligne indiqué en
liste1/colonne 2] la
valeur de la colonne F (colonne 6), la
mémoriser pour
l'additionner à la valeur de la ligne
suivante
du tableau ["liste1"] si "fenetre" trouvé de nouveau.
Ici le resultat devrait être : 1500
A multiplier avec % si ... voir ci-dessous

2 cave.a = idem ci-dessus mais avec "cave.a" comme tableau principal de
donnees
3 cave.b = idem ci-dessus mais avec "cave.b" comme tableau principal de
donnees
4 ...

Puis le résultat obtenu en B2 grace à la formule ci-dessus, le multiplier
par % obtenu si pot.t1
est dans la "liste1", au n°ligne indiqué en ["liste1" 2nd colonne ou B] du
tableau "pot.t1" défini dans
feuille "donnees" en colonne H (8ème colonne).
Feuille "donnees" tableau "pot.t1" défini par Insertion >Nom>Définir :
lignes "A170:AD174"
A B ... H
170 1 100 ... 5%
171 2 126 ... 10%
172 3 32 ... 15%
...
ici dans ma ["liste1"] il y a bien pot.t1 aussi : chercher dans tableau
["pot.t1"] à la ligne indiquée
dans ["liste1", colonne 2 (ou B) ] le %. Resultat : 15%
ces 15% sont appliquer à resultat ci-dessus en B2 pour "fenetre". total = 1725

Si vous m'avez lu jusqu'ici, c'est déjà super pour moi, car je viens de
mettre 2h30
a rédiger ma demande d'aide.... :/ j'espère avoir été claire dans mon
exposé.

J'ai passé des heures depuis 4jrs sur http://www.excelabo.net/ pour arriver à
faire cela par moi-même ..... j'suis trop nulle, je n'ai pas réussi et on
est vendredi ! Je suis en retard, alors j'ai grand besoin d'une aide de vrais
pros d'excel.

Mon niveau : 0 en excel (j'ai mis 1h30 à faire fonctionner ma forumle
ci-dessus
=RECHERCHEV(B23;INDIRECT(A23);3;VRAI)

Aussi si vous pouviez être le plus clair possible dans votre réponse, mille
merci par avance.
Lo

ps: Voici mon début de formule où je pensais indiquer en "plage" le nom
"liste1"
même ma msgbox n'a pas fonctionné.

Function fenetre_capacite(plage)
fenetre_capacite= 0
somme = 0
i = 1
For i = 1 To 22

' If range(plage)(i, 1).Value = "fenetre" Then

' MsgBox (i & " " & plage)
Next

fenetre_capacite = somme

End Function




Avatar
Lo
bonjour Poulpor,
Entendu, je la prépare correctement et je vais voir comment la
mettre à dispo.
Disons que cette organisation, je l'ai pas mal pensée mais peut-etre
ai-je tord. je ne sais pas.
Par contre ma feuile va se compliquer rudement après, c'est pour cela
que j'ai organiser les donnees comme cela.

Je viendrai poster ici lors mon classeur sera en ligne.
Merci
Lo


Bonjour Lo,

Si je puis me permettre :

- peux-tu mettre à dispo le classeur, c'est hyper difficile de raisonner en
imaginant ton classeur...surtout que ton problème n'est pas simple

- à priori, quand je vois un problème comme ca, je me dis qu le mal est fait
lors de l'organisation du classeur. As-tu pensé à réorganiser tes données de
manière à ce que toutes les requêtes possibles soient plus aisées ?
(j'imagine que oui, tu as l'air plus forte que tu ne le prétends, mais on ne
sait jamais)


Pour info, on peux facilement mettre à dispo les classeurs avec cjoint.com.

Poulpor




Bonjour à vous,
Après 4jrs de recherche sur excelabo.net , de téléchargement d'exemples ...,
on est vendredi et je n'ai toujours pas trouvé ! J'ai besoin d'aide pour
faire une forumle compliquée.
(je ne suis pas du tout une experte en excel ni VBA et je n'utilise
peut-être pas le bon vocabulaire
ci-dessous)

Voici mon souci :
formule dynamique en VBA ou formule excel pour faire ceci : Recherche
paramétrable
dans plusieurs tableaux .

1) definition de mes feuilles
- feuille "donnees"
qui contient plusierus tableaux de donnees différentes de A à AD
ex:
A B C ... G F ..
250 1 100 200 ... 300 300
251 2 126 400 ... 500 400
252 3 32 45 ... 67 500
...
264 15 366 700 ... 78 1000 ...

par la commande: Insertion>Nom>Définir
j'ai nommé le tableau : "fenetre" pour les lignes "A250:AD269"
Ces tableaux ainsi définis ne font pas tous 20 lignes chacuns.
J'en ai de 5, de 10, 15 et 20.
Dans cette feuille j'ai 31 tableaux pour le moment mais il va y en avoir plus.
Tous nommés de cette façon.
Tous ont en A un n° 1,2,3,4...

- feuille "liste"
en A j'ai une liste1 de 22 (22 maxi, mini 0, doublons admis) noms des
tableaux de la feuille "donnees",
mais pas tous. En B j'ai le n°de ligne du tableau ("liste"en A) de la
feuille "donnees".
En C, j'ai une formule qui va me chercher une info dans le tableau nommé en
A, en colonne 6
du tableau définis sur "donnees".
exemple :
A B C D
23 fenetre 3 =RECHERCHEV(B23;INDIRECT(A23);3;VRAI)
24 cave.a 1 =RECHERCHEV(B24;INDIRECT(A24);3;VRAI)
25 fenetre 15 =RECHERCHEV(B25;INDIRECT(A25);3;VRAI)
26 pot.t1 3 =RECHERCHEV(B26;INDIRECT(A26);3;VRAI)
27 .... etc

en C23, je vais cherché dans le tableau mentionné en A23, la colonne 3
(c'est à dire C) la ligne indiquée en B23, ici 3.

2) mes soucis :
- cumul de ligne :
Sur le feuille "liste", j'aimerais pourvoir :
En D : chercher dans le tableau mentionné en A, du n°ligne 1 au n°ligne
infiqué
en B et additionner les chiffres les chiffres de la colonne 7 (G).
exemple ligne 23 ci-dessus : chercher dans le tableau "fenetre" (défini sur
feuille "donnees") et additionner la colonne G ligne 1+G ligne 2+ G ligne 3

- recapitulatif :
Ma liste1 comporte 22 possibilités de noms de tableaux, je peux avoir des
doublons et pas d'ordre de saisi défini.
En haut de ma feuille j'ai un récapitulatif pour chaque noms de tableaux.
J'aimerais pouvoir balayer ma liste1 (22 maxi, mini 0) et additionner la
valeur définie en F (colonne 6 feuille "donnees" tableau mentionné en liste1)
du n°
de ligne indiqué en B de la liste1. Une fois le résultat obtenu le multiplié
par
un% obtenu dans un autre tableau si mentionné dans ma "liste1".

exemple :
dans feuille "liste", liste1 définie par : Insertion >Nom>Définir :
"liste1" pour les lignes "A23:B44"
puis :
A B
1 fenetre =pour chaque ligne du tableau ["liste1"] :
si dans [liste1/colonne 1] trouvé "fenetre" alors avec
[liste1/colonne 2] allez chercher dans le
tableau
["fenetre"] au n°ligne indiqué en
liste1/colonne 2] la
valeur de la colonne F (colonne 6), la
mémoriser pour
l'additionner à la valeur de la ligne
suivante
du tableau ["liste1"] si "fenetre" trouvé de nouveau.
Ici le resultat devrait être : 1500
A multiplier avec % si ... voir ci-dessous

2 cave.a = idem ci-dessus mais avec "cave.a" comme tableau principal de
donnees
3 cave.b = idem ci-dessus mais avec "cave.b" comme tableau principal de
donnees
4 ...

Puis le résultat obtenu en B2 grace à la formule ci-dessus, le multiplier
par % obtenu si pot.t1
est dans la "liste1", au n°ligne indiqué en ["liste1" 2nd colonne ou B] du
tableau "pot.t1" défini dans
feuille "donnees" en colonne H (8ème colonne).
Feuille "donnees" tableau "pot.t1" défini par Insertion >Nom>Définir :
lignes "A170:AD174"
A B ... H
170 1 100 ... 5%
171 2 126 ... 10%
172 3 32 ... 15%
...
ici dans ma ["liste1"] il y a bien pot.t1 aussi : chercher dans tableau
["pot.t1"] à la ligne indiquée
dans ["liste1", colonne 2 (ou B) ] le %. Resultat : 15%
ces 15% sont appliquer à resultat ci-dessus en B2 pour "fenetre". total = 1725

Si vous m'avez lu jusqu'ici, c'est déjà super pour moi, car je viens de
mettre 2h30
a rédiger ma demande d'aide.... :/ j'espère avoir été claire dans mon
exposé.

J'ai passé des heures depuis 4jrs sur http://www.excelabo.net/ pour arriver à
faire cela par moi-même ..... j'suis trop nulle, je n'ai pas réussi et on
est vendredi ! Je suis en retard, alors j'ai grand besoin d'une aide de vrais
pros d'excel.

Mon niveau : 0 en excel (j'ai mis 1h30 à faire fonctionner ma forumle
ci-dessus
=RECHERCHEV(B23;INDIRECT(A23);3;VRAI)

Aussi si vous pouviez être le plus clair possible dans votre réponse, mille
merci par avance.
Lo

ps: Voici mon début de formule où je pensais indiquer en "plage" le nom
"liste1"
même ma msgbox n'a pas fonctionné.

Function fenetre_capacite(plage)
fenetre_capacite= 0
somme = 0
i = 1
For i = 1 To 22

' If range(plage)(i, 1).Value = "fenetre" Then

' MsgBox (i & " " & plage)
Next

fenetre_capacite = somme

End Function






Avatar
Lo
Bonjour Poulpor,
Voici mon classeur à cette adresse (classeur zippé)

http://cjoint.com/?jbrDEuRv2t

note : merci de m'avoir fait connaitre de site qui propose une fontion très
utile.
Cordialement,
Lo