Erreur 1004 sur VBA

Bonjour

Je viens vers vous pour un peu d'aide, j'ai laissé excel écrire la macro sur une formule hyper longue mais je ne peux faire autrement.

La formule excel fonctionne correctement sans macro.

Hors lorsque je lance la macro il me renvoi l'erreur 1004 et la mes compétences sont limitées, je ne comprends rien.

Voici ma formule excel écrite en N2 :

=SI(NB.SI(B2;"HJ*");D2*J2;
SI(ET(D2<E2;D2<>0);H2+(I2*(D2-1));
SI(ET(D2<E2;D2=0);H2;
SI(ET(D2>F2;L2=0);J2-(M2*G2);
SI(ET(D2>F2;L2="");J2-(M2*G2);
SI(ET(D2>F2;L2<>0);L2-(M2*G2);
SI(ET(D2>=E2;D2<=F2;(D2-E2)<7);J2;
SI(ET(D2>=E2;D2<=F2;(D2-E2)>=7;(D2-E2)<14);K2;
SI(ET(D2>=E2;D2<=F2;(D2-E2)>=14;(D2-E2)<=21);L2;
"NA")))))))))

Et j'ai vraiment besoin de toutes ces données car il s'agit d'un fichier de centaines de ligne qui peuvent rentrer dans chacune des conditions.

Et voici la macro :

Range("N2").Select
ActiveCell.FormulaR1C1 = _
"=IF(COUNTIF(RC[-12],""HJ*""),RC[-10]*RC[-4]," & Chr(10) & "IF(AND(RC[-10]<RC[-9],RC[-10]<>0),RC[-6]+(RC[-5]*(RC[-10]-1))," & Chr(10) & "IF(AND(RC[-10]<RC[-9],RC[-10]=0),RC[-6]," & Chr(10) & "IF(AND(RC[-10]>RC[-8],RC[-2]=0),RC[-4]-(RC[-1]*RC[-7])," & Chr(10) & "IF(AND(RC[-10]>RC[-8],RC[-2]=""""),RC[-4]-(RC[-1]*RC[-7])," & Chr(10) & "IF(AND(RC[-10]>RC[-8],RC[-2]<>0),RC[-2]-(RC[-1]*RC[-7])," & Chr(10) & "IF(AND(RC[-10]>=RC[-9],RC[-10]<=RC[-8],(RC[-10]" & _
"<7),RC[-4]," & Chr(10) & "IF(AND(RC[-10]>=RC[-9],RC[-10]<=RC[-8],(RC[-10]-RC[-9])>=7,(RC[-10]-RC[-9])<14),RC[-3]," & Chr(10) & "IF(AND(RC[-10]>=RC[-9],RC[-10]<=RC[-8],(RC[-10]-RC[-9])>=14,(RC[-10]-RC[-9])<=21),RC[-2]," & Chr(10) & """NA"")))))))))"
Range("N3").Select

Merci d'éclairer mes lumières car la je ne trouve pas de solution. Et pour information mon excel est sur mon lieux de travail avec accès limiter donc aucune manipulation possible dans C://programme files...

Après peut être qu'il est possible de simplifier la formule mais je ne suis pas assez expérimentée.

Merci à vous par avance.

Lamarie

Bonjour,

-1) il n'est pas nécessaire de faire un select avant d'écrire dans une cellule.

-2) POur éviter les erreurs de rédaction si votre formule fonctionne en francais alors utilisez l'option formula local dans le vba pour garder la même formulation.

Range("N2").FormulaLocal="=SI(NB.SI(B2;"HJ*");D2*J2;
SI(ET(D2<E2;D2<>0);H2+(I2*(D2-1));
SI(ET(D2<E2;D2=0);H2;
SI(ET(D2>F2;L2=0);J2-(M2*G2);
SI(ET(D2>F2;L2="");J2-(M2*G2);
SI(ET(D2>F2;L2<>0);L2-(M2*G2);
SI(ET(D2>=E2;D2<=F2;(D2-E2)<7);J2;
SI(ET(D2>=E2;D2<=F2;(D2-E2)>=7;(D2-E2)<14);K2;
SI(ET(D2>=E2;D2<=F2;(D2-E2)>=14;(D2-E2)<=21);L2;
"NA")))))))))"

Merci beaucoup pour cette information que je ne connaissais pas.

Je suis sous excel 2010 et je viens de transférer ton info dans un module de macro mais excel me le refuse et met la phrase en rouge.

Est ce que j'ai oublié de faire quelques chose ?

Sub gmt()
Range("N2").FormulaLocal="=SI(NB.SI(B2;"HJ*");D2*J2;
SI(ET(D2<E2;D2<>0);H2+(I2*(D2-1));
SI(ET(D2<E2;D2=0);H2;
SI(ET(D2>F2;L2=0);J2-(M2*G2);
SI(ET(D2>F2;L2="");J2-(M2*G2);
SI(ET(D2>F2;L2<>0);L2-(M2*G2);
SI(ET(D2>=E2;D2<=F2;(D2-E2)<7);J2;
SI(ET(D2>=E2;D2<=F2;(D2-E2)>=7;(D2-E2)<14);K2;
SI(ET(D2>=E2;D2<=F2;(D2-E2)>=14;(D2-E2)<=21);L2;
"NA")))))))))"
End Sub

Oops j'ai copié tes lignes mais tu avais ajouté des retours de ligne.

Enlève tous les retours de ligne comme si tu écrivez tout sur une seule ligne.

Merci beaucoup pas de soucis.

Mais l'informatique m'en veut car maintenant il me dit :

"Erreur de compilation : Attendu : fin d'instruction"

Et me surligne mon HJ dans ma formule => =SI(NB.SI(B2;"HJ*")

Mais je ne peux pas remplacer par autre chose car c'est vraiment ce qui est écrit dans ma case.

J'ai essayé de mettre des guillemets supplémentaire mais cela ne fonctionne pas.

Bonjour, salut Xmenpl !

Si la formule contient des guillemets, il faut les doubler pour que VBA n'interprète pas le caractère comme un délimiteur de texte.

Exemple :

Range("A1").FormulaLocal = "=SI(NB.SI(B2;"HJ*")" 'Forme incorrecte
Range("A1").FormulaLocal = "=SI(NB.SI(B2;""HJ*"")" 'Forme correcte

Bonjour Pedro

Merci pour cette info j'ai fait je pense comme tu as dit mais désolé la ligne reste en erreur.

Sub gmt()

Range("N2").FormulaLocal = "=SI(NB.SI(B2;"""HJ*""");D2*J2;SI(ET(D2<E2;D2<>0);H2+(I2*(D2-1));SI(ET(D2<E2;D2=0);H2;SI(ET(D2>F2;L2=0);J2-(M2*G2);SI(ET(D2>F2;L2="");J2-(M2*G2);SI(ET(D2>F2;L2<>0);L2-(M2*G2);SI(ET(D2>=E2;D2<=F2;(D2-E2)<7);J2;SI(ET(D2>=E2;D2<=F2;(D2-E2)>=7;(D2-E2)<14);K2;SI(ET(D2>=E2;D2<=F2;(D2-E2)>=14;(D2-E2)<=21);L2;"""NA""")))))))))"

End Sub

Tu as oublié un guillemet à chaque fois... A tester :

Sub gmt()

Range("N2").FormulaLocal = "=SI(NB.SI(B2;""HJ*"");D2*J2;SI(ET(D2<E2;D2<>0);H2+(I2*(D2-1));SI(ET(D2<E2;D2=0);H2;SI(ET(D2>F2;L2=0);J2-(M2*G2);SI(ET(D2>F2;L2="""");J2-(M2*G2);SI(ET(D2>F2;L2<>0);L2-(M2*G2);SI(ET(D2>=E2;D2<=F2;(D2-E2)<7);J2;SI(ET(D2>=E2;D2<=F2;(D2-E2)>=7;(D2-E2)<14);K2;SI(ET(D2>=E2;D2<=F2;(D2-E2)>=14;(D2-E2)<=21);L2;""NA"")))))))))"

End Sub

Pour ma gouverne, quel est l'intérêt d'inscrire une formule Excel via VBA, sachant qu'aucun élément de la formule n'est modifié par la macro (en clair elle ne change jamais) ?

Ben désolé mais retour au débogage avec erreur 1004.

Donc cette macro me sert à inscrire la formule à rallonge qui pourra s'appliquer à différents fichiers.

Je travaille dans le milieu hospitalier et j'ai 6 fichiers avec des appellations de services différentes à chaque fois.

Car en fonction des mes fichiers je change seulement les données entre guillemet.

Il reste des guillemets non traités dans la formule, j'ai édité mon post précédent pour rectifier ça.

Super tu es un chef, tu me sauve la vie car je ne me voyais pas réécrire à chaque fois ou faire une note pour copier coller.

Merci encore et bonne journée

Merci du retour !

bonjour,

si la formule en N2 est correcte et fonctionne

Sub MaFormule()
      Range("N3").Value = "'" & Range("N2").Formula     'la formule en anglais
     Range("N4").Value = "'" & Range("N2").FormulaLocal     'la formule en français
     Range("N5").Value = "'" & Range("N2").FormulaR1C1     'la formule en anglais format RC

     Range("N10:N100").Formula = Range("N5").Value     'copier la formules dans d'autres cellules

End Sub

Merci à toi BsaLV je suis encore un peu trop novice et je ne suis pas sure de tout comprendre mais j'essayerais tes formules.

Toutes nouvelles idées sont bonne à prendre et apprendre

l'idée, c'est de créer votre formule sur votre feuille, en français, donc facile.

Puis en lisant cette formule sous format "formulaR1C1", elle est traduit en anglais et puis vous collez cette formule dans des autres cellules.

Rechercher des sujets similaires à "erreur 1004 vba"