Code Vba

Bonjour,

S'il vous plait je veut bien transformer la fonction logique suivante en code vba:

=SI(D4="Stock";SI(JOURSEM(SOMMEPROD((U$4:U$96>=B4)-(U$4:U$96>=(B4+45)+ENT(45/5)))+B4+45)=1;SOMMEPROD((U$4:U$96>=B4)-(U$4:U$96>=(B4+45)+ENT(45/5)))+B4+46;SOMMEPROD((U$4:U$96>=B4)-(U$4:U$96>=(B4+45)+ENT(45/5)))+B4+45);SI(JOURSEM(SOMMEPROD((U$4:U$96>=B4)-(U$4:U$96>=(B4+10)+ENT(10/5)))+B4+10)=1;SOMMEPROD((U$4:U$96>=B4)-(U$4:U$96>=(B4+10)+ENT(10/5)))+B4+11;SOMMEPROD((U$4:U$96>=B4)-(U$4:U$96>=(B4+10)+ENT(10/5)))+B4+10))
D4: nature commande stock ou urgente
U$4:U$96: colonne des jours fériés
B4: les dates des commandes placées

j'ai essayé avec ce code mais ça pas marché
While Cells(j, 1) <> ""
If Range("d" & j) = "Stock" Then
ActiveCell.FormulaR1C1 = _
      "=IF(WEEKDAY(SUMPRODUCT((R4C[12]:R96C[12]>=RC[-7])-(R4C[12]:R96C[12]>=(RC[-7]+45)+INT(45/5)))+RC[-7]+45)=1,SUMPRODUCT((R4C[12]:R96C[12]>=RC[-7])-(R4C[12]:R96C[12]>=(RC[-7]+45)+INT(45/5)))+RC[-7]+46,SUMPRODUCT((R4C[12]:R96C[12]>=RC[-7])-(R4C[12]:R96C[12]>=(RC[-7]+45)+INT(45/5)))+RC[-7]+45))"

else
 ActiveCell.FormulaR1C1 = _
        "=IF(WEEKDAY(SUMPRODUCT((R4C[12]:R96C[12]>=RC[-7])-(R4C[12]:R96C[12]>= (RC[-7]+10)+INT(10/5)))+RC[-7]+10)=1,SUMPRODUCT((R4C[12]:R96C[12]>=RC[-7])-(R4C[12]:R96C[12]>=RC[-7]+10)+INT(10/5)))+RC[-7]+11,SUMPRODUCT((R4C[12]:R96C[12]>=RC[-7])-(R4C[12]:R96C[12]>=(RC[-7]+10)+INT(10/5)))+RC[-7]+10))"
endif
End If
  
   
    j = j + 1
    
 Wend


Merci d'avance

2 réponses

  1. Contributeur
    bonjour, pourquoi fais-tu cela?
    tu ne nous montres qu'une partie de ton code.
    il est recommandé de ne pas utiliser "active" et "select", donc pas non plus "activecell".
    tu écris "cela ne marche pas", sans décrire ce qui se passe.
    1. bonjour

      Merci bien pour votre réponse je suis débutant en programmation, en excel la fonction marche bien, s'il vous plait aider moi à transformer la fonction excel en code vba excel.
      le code voulu consiste à ajouter 45 jours ouvrables pour les commandes de stock et 10 jours ouvrables pour les commandes urgentes à une date en tenant compte des jours fériés sans que le dernier jour coïncide avec un dimanche ou un jour férié. ensuite étaler ce code le long de la table
    2. @brahmiBonjour,

      En général, on utilise VBA quand on ne peut pas résoudre le problème avec Excel !
      Si la formule marche bien, gardes la.
      Si tu veux qu'elle "s'étale", utiliss un tableau structuré Excel

      Ici un excellent cours VBA gratuit pour débutants :
      http://bidou.ftp-developpez.com/Cours/VB/VB-excel2.pdf
  2. Bonjour

    une petite remarque, dans cet extrait
    (B4+45)+ENT(45/5)

    45/5 est une valeur fixe => 9. Ent(45/5) c'est donc toujours 9.
    On a donc:
    (B4+45)+9

    Que l'on peut réduire à
    B4 + 53


    Et comme ce type de calcul se répète plusieurs fois dans ta formule, il y a moyen de simplifier un peu partout. Non seulement c'est plus lisible, mais moins y'a de calculs inutiles et plus ça se fait vite.
    1. Bonjour Mr

      Merci pour votre aide ça va simplifier mieux la formule.
      si vous avez le code me le communiquer .
    2. @brahmiNon, je ne fais pas de VBA.
      Mais comme Patrice l'a dit, un code VBA qui copie colle une formule, ça n'a pas trop d'intêret.