Syntaxe fonction rechercheV et fonction SI en VBA

Messages postés
6
Date d'inscription
mardi 2 juillet 2019
Statut
Membre
Dernière intervention
3 juillet 2019
- - Dernière réponse : 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.
Afficher la suite 

4 réponses

Messages postés
11210
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
19 octobre 2019
1458
0
Merci
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
alexis_1416
Messages postés
6
Date d'inscription
mardi 2 juillet 2019
Statut
Membre
Dernière intervention
3 juillet 2019
-
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.
Commenter la réponse de via55
Messages postés
2133
Date d'inscription
dimanche 3 mai 2009
Statut
Membre
Dernière intervention
18 octobre 2019
429
0
Merci
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
alexis_1416
Messages postés
6
Date d'inscription
mardi 2 juillet 2019
Statut
Membre
Dernière intervention
3 juillet 2019
-
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
Commenter la réponse de PapyLuc51
Messages postés
11210
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
19 octobre 2019
1458
0
Merci
Re

Tu poste ton fichier sur mon-partage.fr, tu fais créer un lien que tu copies et reviens coller ici
alexis_1416
Messages postés
6
Date d'inscription
mardi 2 juillet 2019
Statut
Membre
Dernière intervention
3 juillet 2019
-
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=
Commenter la réponse de via55
Messages postés
11210
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
19 octobre 2019
1458
0
Merci
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

alexis_1416
Messages postés
6
Date d'inscription
mardi 2 juillet 2019
Statut
Membre
Dernière intervention
3 juillet 2019
-
Merci Via,

je vais regarder ça :)

cdt,
PapyLuc51
Messages postés
2133
Date d'inscription
dimanche 3 mai 2009
Statut
Membre
Dernière intervention
18 octobre 2019
429 -
Salutations Via,

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

Cordialement
PapyLuc51
Messages postés
2133
Date d'inscription
dimanche 3 mai 2009
Statut
Membre
Dernière intervention
18 octobre 2019
429 -
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
alexis_1416
Messages postés
6
Date d'inscription
mardi 2 juillet 2019
Statut
Membre
Dernière intervention
3 juillet 2019
-
Un grand merci à vous 2.

cela va bcp m'aider.

bonne journée.
Commenter la réponse de via55