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é
Merci d'avance
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
-
Contributeurbonjour, 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.-
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 -
@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
-
-
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.
-
-
@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.
-