PAPA WALKER
XLDnaute Junior
Bonjour,
Je souhaite, via VBA, inclure une formule dans une cellule.
Je suis passé par le mode enregistrement de macro pour enregistrer l’équivalence des formule ci-dessous :
SI(ET(RECHERCHEV(BX2;$S$2:$AE$6;8;FAUX)=0;BW2>=RECHERCHEV(BX2;$S$2:$AE$6;6;FAUX);BW2<=RECHERCHEV(BX2;$S$2:$AE$6;12;FAUX));"OK";SI(BW2<=RECHERCHEV(BX2;$S$2:$AE$6;6;FAUX);"AVANT";SI(BW2>=RECHERCHEV(BX2;$S$2:$AE$6;12;FAUX);"APRES";SI(ET(BW2>=RECHERCHEV(BX2;$S$2:$AE$6;8;FAUX);BW2<=RECHERCHEV(BX2;$S$2:$AE$6;10;FAUX));"COUPURE";"?"))))
En VBA, ça donne :
Range("BY2").Select
ActiveCell.FormulaR1C1 = _
"=IF(AND(VLOOKUP(RC[-1],R2C19:R6C31,8,FALSE)=0,RC[-2]>=VLOOKUP(RC[-1],R2C19:R6C31,6,FALSE),RC[-2]<=VLOOKUP(RC[-1],R2C19:R6C31,12,FALSE)),""OK"",IF(RC[-2]<=VLOOKUP(RC[-1],R2C19:R6C31,6,FALSE),""AVANT"",IF(RC[-2]>=VLOOKUP(RC[-1],R2C19:R6C31,12,FALSE),""APRES"",IF(AND(RC[-2]>=VLOOKUP(RC[-1],R2C19:R6C31,8,FALSE),RC[-2]<=VLOOKUP(RC[-1],R2C19:R6C31,10,FALSE)),""COUPURE"",""?""))))"
Range("BY2").Select
Cette première syntaxe fonctionne bien, mais elle ne me donnait pas le résultat attendu.
J’ai donc modifié et complété ma formule comme suit :
SI(ET(RECHERCHEV(BX2;$S$2:$AE$6;8;FAUX)=0;BW2>=RECHERCHEV(BX2;$S$2:$AE$6;6;FAUX);BW2<=RECHERCHEV(BX2;$S$2:$AE$6;12;FAUX));"OK";SI(ET(BW2>=RECHERCHEV(BX2;$S$2:$AE$6;8;FAUX);BW2<=RECHERCHEV(BX2;$S$2:$AE$6;10;FAUX));"COUPURE";SI(ET(BW2>=RECHERCHEV(BX2;$S$2:$AE$6;6;FAUX);BW2<=RECHERCHEV(BX2;$S$2:$AE$6;12;FAUX));"OK";SI(BW2<=RECHERCHEV(BX2;$S$2:$AE$6;6;FAUX);"AVANT";SI(BW2>=RECHERCHEV(BX2;$S$2:$AE$6;12;FAUX);"APRES";"?")))))
Qui en VBA donne :
Range("BY2").Select
ActiveCell.FormulaR1C1 = _
"=IF(AND(VLOOKUP(RC[-1],R2C19:R6C31,8,FALSE)=0,RC[-2]>=VLOOKUP(RC[-1],R2C19:R6C31,6,FALSE),RC[-2]<=VLOOKUP(RC[-1],R2C19:R6C31,12,FALSE)),""OK"",IF(AND(RC[-2]>=VLOOKUP(RC[-1],R2C19:R6C31,8,FALSE),RC[-2]<=VLOOKUP(RC[-1],R2C19:R6C31,10,FALSE)),""COUPURE"",IF(AND(RC[-2]>=VLOOKUP(RC[-1],R2C19:R6C31,6,FALSE),RC[-2]<=VLOOKUP(RC[-1],R2C19:R6C31,12,FALSE)),""OK"",IF(RC[-2]<=V" & _
"C[-1],R2C19:R6C31,6,FALSE),""AVANT"",IF(RC[-2]>=VLOOKUP(RC[-1],R2C19:R6C31,12,FALSE),""APRES"",""?"")))))"
Range("BY2").Select
Mais là, quand j’exécute, j’ai un message d’erreur 1004 ?
Quelqu’un a-t-il une piste ?
J’ai trouvé bizarre le V] avant la troncature de la ligne, mais je ne suis pas arrivé à couper ailleurs et à faire fonctionner ça en VBA…
Je me suis aussi demandé si le souci venait du fait que dans la base de recherche il y a des cellules fusionnée, mais pour le premier, ça marche et ça fait appel à lamême zone de recherche, alors???
Merci de vos réponses
Je souhaite, via VBA, inclure une formule dans une cellule.
Je suis passé par le mode enregistrement de macro pour enregistrer l’équivalence des formule ci-dessous :
SI(ET(RECHERCHEV(BX2;$S$2:$AE$6;8;FAUX)=0;BW2>=RECHERCHEV(BX2;$S$2:$AE$6;6;FAUX);BW2<=RECHERCHEV(BX2;$S$2:$AE$6;12;FAUX));"OK";SI(BW2<=RECHERCHEV(BX2;$S$2:$AE$6;6;FAUX);"AVANT";SI(BW2>=RECHERCHEV(BX2;$S$2:$AE$6;12;FAUX);"APRES";SI(ET(BW2>=RECHERCHEV(BX2;$S$2:$AE$6;8;FAUX);BW2<=RECHERCHEV(BX2;$S$2:$AE$6;10;FAUX));"COUPURE";"?"))))
En VBA, ça donne :
Range("BY2").Select
ActiveCell.FormulaR1C1 = _
"=IF(AND(VLOOKUP(RC[-1],R2C19:R6C31,8,FALSE)=0,RC[-2]>=VLOOKUP(RC[-1],R2C19:R6C31,6,FALSE),RC[-2]<=VLOOKUP(RC[-1],R2C19:R6C31,12,FALSE)),""OK"",IF(RC[-2]<=VLOOKUP(RC[-1],R2C19:R6C31,6,FALSE),""AVANT"",IF(RC[-2]>=VLOOKUP(RC[-1],R2C19:R6C31,12,FALSE),""APRES"",IF(AND(RC[-2]>=VLOOKUP(RC[-1],R2C19:R6C31,8,FALSE),RC[-2]<=VLOOKUP(RC[-1],R2C19:R6C31,10,FALSE)),""COUPURE"",""?""))))"
Range("BY2").Select
Cette première syntaxe fonctionne bien, mais elle ne me donnait pas le résultat attendu.
J’ai donc modifié et complété ma formule comme suit :
SI(ET(RECHERCHEV(BX2;$S$2:$AE$6;8;FAUX)=0;BW2>=RECHERCHEV(BX2;$S$2:$AE$6;6;FAUX);BW2<=RECHERCHEV(BX2;$S$2:$AE$6;12;FAUX));"OK";SI(ET(BW2>=RECHERCHEV(BX2;$S$2:$AE$6;8;FAUX);BW2<=RECHERCHEV(BX2;$S$2:$AE$6;10;FAUX));"COUPURE";SI(ET(BW2>=RECHERCHEV(BX2;$S$2:$AE$6;6;FAUX);BW2<=RECHERCHEV(BX2;$S$2:$AE$6;12;FAUX));"OK";SI(BW2<=RECHERCHEV(BX2;$S$2:$AE$6;6;FAUX);"AVANT";SI(BW2>=RECHERCHEV(BX2;$S$2:$AE$6;12;FAUX);"APRES";"?")))))
Qui en VBA donne :
Range("BY2").Select
ActiveCell.FormulaR1C1 = _
"=IF(AND(VLOOKUP(RC[-1],R2C19:R6C31,8,FALSE)=0,RC[-2]>=VLOOKUP(RC[-1],R2C19:R6C31,6,FALSE),RC[-2]<=VLOOKUP(RC[-1],R2C19:R6C31,12,FALSE)),""OK"",IF(AND(RC[-2]>=VLOOKUP(RC[-1],R2C19:R6C31,8,FALSE),RC[-2]<=VLOOKUP(RC[-1],R2C19:R6C31,10,FALSE)),""COUPURE"",IF(AND(RC[-2]>=VLOOKUP(RC[-1],R2C19:R6C31,6,FALSE),RC[-2]<=VLOOKUP(RC[-1],R2C19:R6C31,12,FALSE)),""OK"",IF(RC[-2]<=V" & _
"C[-1],R2C19:R6C31,6,FALSE),""AVANT"",IF(RC[-2]>=VLOOKUP(RC[-1],R2C19:R6C31,12,FALSE),""APRES"",""?"")))))"
Range("BY2").Select
Mais là, quand j’exécute, j’ai un message d’erreur 1004 ?
Quelqu’un a-t-il une piste ?
J’ai trouvé bizarre le V] avant la troncature de la ligne, mais je ne suis pas arrivé à couper ailleurs et à faire fonctionner ça en VBA…
Je me suis aussi demandé si le souci venait du fait que dans la base de recherche il y a des cellules fusionnée, mais pour le premier, ça marche et ça fait appel à lamême zone de recherche, alors???
Merci de vos réponses