Erreur d'exécution 1004

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
 

PAPA WALKER

XLDnaute Junior
Re : Erreur d'exécution 1004

Bonjour,

Merci déjà de votre réponse. J'ai cherché dans cette voie, mais je ne dois pas être bon dans ma syntaxe car je n'y suis pas arrivé.
Ou alors, ça vient d'ailleurs.
Le fichier original est lord alors je n'ai extrait que la partie concernée dans l'onglet Analyse.

Je joins le fichier et je continue de chercher

Cordialement
 

Pièces jointes

  • ERREUR1004.xlsm
    17.4 KB · Affichages: 35

JCGL

XLDnaute Barbatruc
Re : Erreur d'exécution 1004

Bonjour à tous,

Si ta formule fonctionne, peux-tu essayer en FormulaLocal :

VB:
Sub Formule()
    Range("BY2:BY27").FormulaLocal = _
        "=SI(ET(RECHERCHEV(BX2;$S$2:$AE$6;8;0)=0;BW2>=RECHERCHEV(BX2;$S$2:$AE$6;6;0);BW2<=RECHERCHEV(BX2;$S$2:$AE$6;12;0));""OK"";SI(BW2<=RECHERCHEV(BX2;$S$2:$AE$6;6;0);""AVANT"";SI(BW2>=RECHERCHEV(BX2;$S$2:$AE$6;12;0);""APRES"";SI(ET(BW2>=RECHERCHEV(BX2;$S$2:$AE$6;8;0);BW2<=RECHERCHEV(BX2;$S$2:$AE$6;10;0));""COUPURE"";""?""))))"
    Range("BY2").Select
End Sub

Avec gestion des Erreurs :
VB:
Option Explicit


Sub Formule()
    Range("BY2:BY27").FormulaLocal = _
        "=SIERREUR(SI(ET(RECHERCHEV(BX2;$S$2:$AE$6;8;0)=0;BW2>=RECHERCHEV(BX2;$S$2:$AE$6;6;0);BW2<=RECHERCHEV(BX2;$S$2:$AE$6;12;0));""OK"";SI(BW2<=RECHERCHEV(BX2;$S$2:$AE$6;6;0);""AVANT"";SI(BW2>=RECHERCHEV(BX2;$S$2:$AE$6;12;0);""APRES"";SI(ET(BW2>=RECHERCHEV(BX2;$S$2:$AE$6;8;0);BW2<=RECHERCHEV(BX2;$S$2:$AE$6;10;0));""COUPURE"";""?""))));"""")"
    Range("BY2").Select
End Sub


A+ à tous
 
Dernière édition:

PAPA WALKER

XLDnaute Junior
Re : Erreur d'exécution 1004

Effectivement cette proposition de JCGL marche

Je vais regarder cette notion de formule locale que je n'ai jamais utilisée et qui là, me sort bien de l'embarras.

Je vais intégrer ça dans mon code et voir si ça s'insère bien.

Merci en tout cas de cette aide aussi rapide, merci beaucoup.
 

PAPA WALKER

XLDnaute Junior
Re : Erreur d'exécution 1004

Re bonjour

J'ai testé mais ça ne donne pas le bon résultat.
D'une part il y a une constante "12:00" et dans ma formule je fais la chose suivante.
Je compare l'heure de la colonne BW à celle de la plage concernée par la colonne BX.
ensuite je regarde si cette heure est (dans la plage "S2:AE6")
Avant l'ouverture
Pendant la coupure de midi
Après la fermeture
ou dans une des plage d'ouverture du client
une petite difficulté est que j'ai des clients avec deux plages ouvertes entre une de coupure
et d'autres avec une coupure de début et de fin à 00:00
donc dans ta proposition, il manque certaines choses et je n'ai pas le même résultat.
C'est vrai qu'elle est plus condensée et je suis persuadé que ma manière de faire n'est pas la plus performante ..

Cordialement
 

Discussions similaires

Réponses
11
Affichages
497
Réponses
7
Affichages
421

Statistiques des forums

Discussions
312 654
Messages
2 090 563
Membres
104 577
dernier inscrit
GOGNAN