Passage formule en VBA

Bonjour, grâce à vous j'ai appris à passer des formules en VBA pour qu'elles s'ajoutent automatiquement dans les cases.

Sauf que celle-ci ne fonctionne pas je ne trouve pas pourquoi.

De l'aide svp ?

Formule en case :

=SI(OU(JOURSEM(C81;1)=1;C81=Légende!J14;C81=Légende!J15;C81=Légende!J16;C81=Légende!J17;C81=Légende!J18;C81=Légende!J19);0;SI(B81="C";RECHERCHEV(JOURSEM(C81;1);INDIRECT(D81);11;0);SI(B81="Dc";RECHERCHEV(JOURSEM(C81;1);INDIRECT(D81);11;0)/2;0)))

Fonctionne correctement

Passage en VBA :

.Range("E" & LR).Formula = _

"=IF(OR(WEEKDAY(C" & LR & ",1)=1,C" & LR & "=Légende!$J$14,C" & LR & "=Légende!$J$15,C" & LR & "=Légende!$J$16,C" & LR & "=Légende!$J$17,C" & LR & "=Légende!$J$18,C" & LR & "=Légende!$J$19),"""",IF(B" & LR & "=C,VLOOKUP(WEEKDAY(C" & LR & ",1),INDIRECT(D" & LR & "),11,0),IF(B" & LR & "=Dc,VLOOKUP(WEEKDAY(C" & LR & ",1),INDIRECT(D" & LR & "),11,0)/2,"""")))"

Ne s'ajoute pas à cause d'une erreur de restranscription quelque part..mais où ???

merci d'avance à tous

bonjour,

il est impossible de tester ça sans fichier joint.

A+

ça va te rappeler quelqque chose Roger...

Il doit manquer quelque chose que je ne trouve pas.

Et pourtant je cherche...

'tain...

Je reconnait bien là ton laconisme habituel...

Et on se la met ou cette formule quelle feuille, quelle cellule ?

A+

Je la voudrais dans le code de la feuille "Janvier"

Case "BdCongés"

.Range(E & LR).Formula

Merci Roger...

Heu... Ya quelque chose qui m'échappe !

Déjà bien qu'Excel ne refuse pas cette formule, il refuse de me la mouliner via l'enregistreur.

Comme Ya rien dans Légende!J14 etc... Je vois pas comment je peux évaluer ton truc.

ça serait bien que tu donnes dès le départ une formule qui fonctionne bien pour une ligne existante et les références parce que là j'ai ni lignes 81 ni les références qui vont avec la formule.

Donc ça serait bien que tu me mettes la feuille référence KIVABIEN avec... (et complète de préférence ! )

A+

autant pour moi, c'est l'erreur de passer d'un doc original avec des noms et des renseignements confidentiels à un fichier exemple.

Donc le voici modifié pour une meilleure compréhension, j'ai même mis une petite bulle dans la feuille "BdCongés", là où ma formule se trouve, histoire d'être moins laconique.

Merci pour ta patience.

Bonsoir,

T'es un peu pénible ! C'est truffé d'erreurs, d'approximations, de références qui pointes sur je ne sais quoi...

La formule de départ pointait sur D81... Dieu seul sait pourquoi !

Maintenant à la place, il y a une référence circulaire dans cette formule. La formule fait référence à elle même :

INDIRECT( D8 )

Je passe la main. Si quelqu'un d'autre à une bonne boule de cristal...

A+

oops...

en fait c'est que ma formule devrait être dans la colonne E

Donc au lieu de .Range D c'est .Range E

D'où la référence circulaire.

Désolé, comme j'ai expliqué j'ai le document réèl et le fichier exemple qui me sert sur le net afin de ne pas divulguer d'informations confidentielles.

C'est pour cette raison que parfois je me trompe de colonne quand je copie/colle.

Ne m'abandonne pas Roger s'il te plaît..

Cette formule sert à calculer un horaire en fonction des dates et de codes horaires.

Lorsqu'elle se trouve dans la case de mon document original elle fonctionne bien mais lorsque que j'essaie de la restranscrire en VBA (.Range E dans le document exemple) ça ne marche pas.

Pourtant j'ai réussi la retranscription avec les autres formules. Il n'y a plus que celle là.

Mon problème ce n'est pas que la formule fonctionne (vu qu'elle fonctionne dans le document original) mais comment la retranscrire en VBA avec les " & LR & ", ou alors j'ai oublié une parenthèse, ou alors peut-être les , au lieu des : ou des ; ?

Alors si tu veux bien m'aider à trouver l'erreur de retranscription j'ai essayé quelque chose mais il doit me manquer du savoir :

Si j'enlève le "on error resume next" je vois bien que le code bloque à la ligne où se trouve cette formule.

Il me la surligne en jaune mais me dit pas ou cela s'est arrêté ni pourquoi.

Y a t-il un moyen d'avoir plus d'infos dans le débogage ?

Merci

1ca-brut.xlsx (101.01 Ko)

bien sur !

Après avoir viré le On error... tu fais une saisie en janvier

Tu récupère le string fautif :

"=IF...

Tu vas dans la fenêtre d'exécution tu le colles et tu envoies (Enter)

Si le string est cohérent, il te le renvoie en clair.

Tu récupères le string qu'il t'a recraché et tu le colles dans une TextBox de ta feuille BDCongé.

Tu mets en forme ta TextBox de telle sorte que ça tienne tout sur une ligne... S'i t'as un écran qui fait au moins 1400 x... t'es bien parti !

Tu fais glisser ton TextBox juste sous la barre de formule et tu compares avec la formule attendue. Bien sur c'est en anglais, bien sur YA des virgules à la place des points virgules, mais tu verras très bien tes erreurs...

Moi j'en suis arrivé là :

"=IF(OR(WEEKDAY(C" & LR & ",1)=1,COUNTIF(Fériés,C" & LR & ")>0),"""",IF(B" & LR & "=""C"",VLOOKUP(WEEKDAY(C" & LR & ",1),INDIRECT(D" & LR & "),11,0),IF(B" & LR & "=""Dc"",VLOOKUP(WEEKDAY(C" & LR & ",1),INDIRECT(D" & LR & "),11,0)/2,"""")))"

oussa :

"=IF(OR(WEEKDAY(C" & LR & ",1)=1,COUNTIF(Fériés,C" & LR & ")>0),0,IF(B" & LR & "=""C"",VLOOKUP(WEEKDAY(C" & LR & ",1),INDIRECT(D" & LR & "),11,0),IF(B" & LR & "=""Dc"",VLOOKUP(WEEKDAY(C" & LR & ",1),INDIRECT(D" & LR & "),11,0)/2,0)))"

(au choix !)

A+

Bah vraiment merci.

J'ai lu succintement ta charte mais aujourd'hui je vais l'étudier de plus près.

Je vais également ouvrir un autre post pour savoir si une de mes idées pourrait être réalisable en ce qui concerne ce tableau, et encore un autre pour que dans le code je puisse avoir le cas de choix "cellule vide" => ne rien faire.

Je vais essayer

case """": S=""""

end select

end sub

on verra bien mais si ça marche pas je demanderai.

Je vais faire tout mon possible pour être plus précis et joindre des documents vérifiés.

merci encore de tout coeur.

Rechercher des sujets similaires à "passage formule vba"