Syntaxe fonction rechercheV et fonction SI en VBA
alexis_1416
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
alexis_1416 Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
alexis_1416 Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
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.
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.
A voir également:
- Syntaxe fonction rechercheV et fonction SI en VBA
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
4 réponses
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
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
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
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
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
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
Re
Tu poste ton fichier sur mon-partage.fr, tu fais créer un lien que tu copies et reviens coller ici
Tu poste ton fichier sur mon-partage.fr, tu fais créer un lien que tu copies et reviens coller ici
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=
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=
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
https://mon-partage.fr/f/6BnII0vU/
Cdlmnt
Via
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
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
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.