Syntaxe fonction rechercheV et fonction SI en VBA

Fermé
alexis_1416 Messages postés 6 Date d'inscription mardi 2 juillet 2019 Statut Membre Dernière intervention 3 juillet 2019 - 2 juil. 2019 à 09:40
alexis_1416 Messages postés 6 Date d'inscription mardi 2 juillet 2019 Statut Membre Dernière intervention 3 juillet 2019 - 3 juil. 2019 à 17:21
Bonjour,

Tout d'abord merci d'avance à toutes les personnes qui prendraient la peine de lire mon texte et de me venir en aide.

je souhaite créer un tableau qui a pour but de calculer automatiquement les retro-planning de chaque OP en fonction des critères suivants (toutes les données sont en Feuil2) :
- Type de d’OP (2 types différents)
- Les différentes tranches de quantités ( 8 niveaux différents)
- Les prestataires (5 prestataires différents)

Pour réaliser ce document je suis parti sur l’idée de convertir chaque critère en nombre.
Les centaines pour les prestataires, les dizaines pour les tranches de quantités et les unités pour les types d’op.

A partir de la et en prenant en compte les différentes informations communiquées par les prestataires j’ai créé (en Feuil2) des tableaux pour chaque prestataire.

Ex :
Pour le prestataire PRT (100), pour une op de 0-10 000 qts (10) et pour une op d’impression / mise sou pli / routage (1) = 111
Avec les formules :
PRT 111

Commande =SERIE.JOUR.OUVRE(Feuil1!$C$11;0)
réception des fichiers d'impression des documents =SERIE.JOUR.OUVRE(Feuil1!$C$11;1)
réception des fichiers adresses =SERIE.JOUR.OUVRE(Feuil1!$C$11;1)
remise des bat d'impression =SERIE.JOUR.OUVRE(Feuil1!$C$11;2)
accord sur bat d'impression =SERIE.JOUR.OUVRE(Feuil1!$C$11;3)
remise des bat de personnalisation =SERIE.JOUR.OUVRE(Feuil1!$C$11;3)
accord sur bat de personnalisation =SERIE.JOUR.OUVRE(Feuil1!$C$11;4)
réception des documents imprimés =SERIE.JOUR.OUVRE(Feuil1!$C$11;7)
mise sous enveloppe =SERIE.JOUR.OUVRE(Feuil1!$C$11;8)
dépôt poste *** =SERIE.JOUR.OUVRE(Feuil1!$C$11;9)

Cette formule a pour but, de prendre la date renseignée en Feuil1 et en case C11, puis de l’incrémenter en fonction de chaque étape en excluant les weekends.

Une fois ces tableaux créées, mon idée était d’aller chercher (grâce à une formule SI et RECHERV) les informations en Feuil2 pour le reporter dans le tableau en Feuil1, en fonction de chaque étape dans les cases C12 à C19.

Cette formule SI varie en fonction du nombre apparaissant en case E4 (qui lui-même varie en fonction des critères qui définissent l’op).

La formule RECHERV se compose comme ci-dessous
SI($E$4=511;RECHERCHEV(B12;Feuil2!$C$65:$S$76;2;FAUX);SI($E$4=512;RECHERCHEV(B12;Feuil2!$C$65:$S$76;3;FAUX);SI($E$4=521;RECHERCHEV(B12;Feuil2!$C$65:$S$76;4;FAUX);SI($E$4=522;RECHERCHEV(B12;Feuil2!$C$65:$S$76;5;FAUX);SI($E$4=531;RECHERCHEV(B12;Feuil2!$C$65:$S$76;6;FAUX);SI($E$4=532;RECHERCHEV(B12;Feuil2!$C$65:$S$76;7;FAUX);SI($E$4=541;RECHERCHEV(B12;Feuil2!$C$65:$S$76;8;FAUX);SI($E$4=542;RECHERCHEV(B12;Feuil2!$C$65:$S$76;9;FAUX);SI($E$4=551;RECHERCHEV(B12;Feuil2!$C$65:$S$76;10;FAUX);SI($E$4=552;RECHERCHEV(B12;Feuil2!$C$65:$S$76;11;FAUX);SI($E$4=561;RECHERCHEV(B12;Feuil2!$C$65:$S$76;12;FAUX);SI($E$4=562;RECHERCHEV(B12;Feuil2!$C$65:$S$76;13;FAUX);SI($E$4=571;RECHERCHEV(B12;Feuil2!$C$65:$S$76;14;FAUX);SI($E$4=572;RECHERCHEV(B12;Feuil2!$C$65:$S$76;15;FAUX);SI($E$4=581;RECHERCHEV(B12;Feuil2!$C$65:$S$76;16;FAUX);SI($E$4=582;RECHERCHEV(B12;Feuil2!$C$65:$S$76;17;FAUX)

Le problème que je rencontre est que sous Excel on ne peut pas dépasser 64 niveaux d’imbrication pour les formules SI et si je reste sur cette idée, j’en ai 80 (16 niveaux par prestataires X 5 prestataires).

et je me demandais, si en partant sur l'idée d'une programmation VBA cela permettrait de contourner ce problème d'imbrication.

Merci encore pour votre aide futur.

4 réponses

via55 Messages postés 14499 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 26 novembre 2024 2 735
2 juil. 2019 à 14:06
Bonjour

Puisque la recherchev se fait dans la même plage je te suggère de faire un tableau annexe de 2 colonnes, dans la 1ere les codes et dans la seconde les n° de colonne pour la recherchev, ce qui donnerait
511 2
512 3 etc
ensuite ta formule se simplifie grandement ainsi :
=RECHERCHEV(B12;Feuil2!$C$65:$S$76;RECHERCHEV(E4; plage du tableau à 2colonnes;2;0);FAUX)

Cdlmnt
Via
0
alexis_1416 Messages postés 6 Date d'inscription mardi 2 juillet 2019 Statut Membre Dernière intervention 3 juillet 2019
3 juil. 2019 à 10:32
Bonjour Via55,

merci pour ta réponse, comme évoqué dans la réponse de PapyLuc51, je vais tester tout ça et reviendrais vers vous pour vous tenir informé

cordialement.
0
PapyLuc51 Messages postés 4412 Date d'inscription dimanche 3 mai 2009 Statut Membre Dernière intervention 26 novembre 2024 1 446
Modifié le 2 juil. 2019 à 14:49
Bonjour,
salutations Via

Peut-être aussi partir sur INDEX + EQUIV

Mettre la série des codes sur la ligne 64 de D64 à S64

=INDEX(Feuil2!$D$65:$S$76;EQUIV($B$12;Feuil2!$C$65:$C$76;0);EQUIV($E$4;Feuil2!$D$64:$S$64;0))

J'espère ne pas m'être trompé dans les références des cellules

Cordialement
0
alexis_1416 Messages postés 6 Date d'inscription mardi 2 juillet 2019 Statut Membre Dernière intervention 3 juillet 2019
3 juil. 2019 à 10:31
Bonjour PapyLuc51 et Via,

merci pour votre réponse.
Je vais essayer avec vos formules voir si cela peut solutionner mon problème.

En revanche, savez vous comment joindre mon fichier au forum pour que vous ayez toutes les infos, car en y réfléchissant j'ai pensé à une autre logique en utilisant =CONCATENER( afin de réduire les niveaux d'imbrications
0
via55 Messages postés 14499 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 26 novembre 2024 2 735
3 juil. 2019 à 11:26
Re

Tu poste ton fichier sur mon-partage.fr, tu fais créer un lien que tu copies et reviens coller ici
0
alexis_1416 Messages postés 6 Date d'inscription mardi 2 juillet 2019 Statut Membre Dernière intervention 3 juillet 2019
3 juil. 2019 à 11:36
Re,

effectivement je n'avais pas pensé à cette solution.

ci-dessous un lien pour le DL :

https://mediashare.mediapost.fr/pickup.php?claimID=98CrhSmsEug9hzg7&claimPasscode=asvmzBsH4j7hjDxF&emailAddr=
0
via55 Messages postés 14499 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 26 novembre 2024 2 735
Modifié le 3 juil. 2019 à 13:41
En modifiant la feuil2 de manière à n'avoir qu'un unique tableau, la recherche se limite à un INDEX EQUIV
https://mon-partage.fr/f/6BnII0vU/

Cdlmnt
Via

0
alexis_1416 Messages postés 6 Date d'inscription mardi 2 juillet 2019 Statut Membre Dernière intervention 3 juillet 2019
3 juil. 2019 à 13:45
Merci Via,

je vais regarder ça :)

cdt,
0
PapyLuc51 Messages postés 4412 Date d'inscription dimanche 3 mai 2009 Statut Membre Dernière intervention 26 novembre 2024 1 446
3 juil. 2019 à 13:59
Salutations Via,

La messe est dite ;) c'est ce que j'aurai fait.

Cordialement
0
PapyLuc51 Messages postés 4412 Date d'inscription dimanche 3 mai 2009 Statut Membre Dernière intervention 26 novembre 2024 1 446
Modifié le 3 juil. 2019 à 15:20
Sauf peut-être un petit ajout : si la case cherchée est vide ça inscrit la date du 0 janvier 1900.

en C12 modifier la formule pour laisser vide

=SI(INDEX(Feuil2!$D$12:$BO$21;EQUIV(Feuil1!B12;Feuil2!$C$12:$C$21;0);EQUIV(Feuil1!$E$4;Feuil2!$D$10:$BO$10;0))="";"";INDEX(Feuil2!$D$12:$BO$21;EQUIV(Feuil1!B12;Feuil2!$C$12:$C$21;0);EQUIV(Feuil1!$E$4;Feuil2!$D$10:$BO$10;0)))

ou mettre aucune

=SI(INDEX(Feuil2!$D$12:$BO$21;EQUIV(Feuil1!B12;Feuil2!$C$12:$C$21;0);EQUIV(Feuil1!$E$4;Feuil2!$D$10:$BO$10;0))="";"aucune";INDEX(Feuil2!$D$12:$BO$21;EQUIV(Feuil1!B12;Feuil2!$C$12:$C$21;0);EQUIV(Feuil1!$E$4;Feuil2!$D$10:$BO$10;0)))

Cordialement
0
alexis_1416 Messages postés 6 Date d'inscription mardi 2 juillet 2019 Statut Membre Dernière intervention 3 juillet 2019
3 juil. 2019 à 17:21
Un grand merci à vous 2.

cela va bcp m'aider.

bonne journée.
0