OVH Cloud OVH Cloud

formule en vba

22 réponses
Avatar
magic-dd
bonsoir
j'ai un classeur avec 18 feuilles structur=E9es de la meme facon

dans des memes cellules de x6 =E0 x38 j'ai cette formule

=3DSI(NBCAR(B6)=3D0;"";(SOMME(D6:H6)*20)/25)

en changeant le b6 par "b" & i, d6 par "d" & i et "h" & i

ensuite j'ai une matricielle

de z6 =E0 z38

{=3DSI(OU(NBCAR(B6)=3D0;NB(N6:T6)=3D0);"";SOMME(SI(ESTNUM(N6:T6);N6:T6*$N
$5:$T$5))/SOMME.SI(N6:T6;">=3D0";$N$5:$T$5))}

la aussi tout ce qui n'est pas entre les $ peut etre fais avec la
valeur "b" & i etc.....

merci de votre aide ca permettra de rendre plus rapide mon programme
et surtout moins lourd.


@bientot

10 réponses

1 2 3
Avatar
magic-dd
un grand merci à toi pour tout le temps que tu as passé sur mon projet

merci et à charge de revanche si mon petit niveau me le permet.

@ bientot
Avatar
magic-dd
je viens de tester en faisant une boucle
le comportement de la macro est etrange car il efface les 1ers
resultats

jette un oeil si tu peux ( mais pas trop fort) et dis moi

merci

Sub Macro1()
For lig = 6 To 36 ' <----- choix du numéro de ligne à
calculer
Range("X" & lig) = Evaluate("(IF(LEN(B" & lig &
")=0,"""",SUM(D" & lig & ":H" & lig & ") * 20) / 25)")

Range("Y" & lig) = Evaluate("(IF(LEN(B" & lig &
")=0,"""",SUM(I" & lig & ":M" & lig & ") * 20) / 25)")

p1 = Range("N" & lig & ":T" & lig).Address
p2 = Range("N5:T5").Address
Range("Z" & lig) = Evaluate("IF(OR(LEN(B" & lig & ")=0,COUNT("
& p1 & ")=0),"""",SUM(IF(ISNUMBER(" & p1 & ")," & p1 & "*" & p2 & "))/
SUMIF(" & p1 & ","">=0""," & p2 & "))")

p3 = Range("U" & lig & ":V" & lig).Address
p4 = Range("U5:V5").Address
Range("AA" & lig) = Evaluate("IF(OR(LEN(B" & lig &
")=0,COUNT(" & p3 & ")=0),"""",SUM(IF(ISNUMBER(" & p3 & ")," & p3 &
"*" & p4 & "))/SUMIF(" & p3 & ","">=0""," & p4 & "))")

p5 = Range("W" & lig & ":AA" & lig).Address
p6 = Range("W5:AA5").Address
Range("AB" & lig) = Evaluate("IF(OR(LEN(B" & lig &
")=0,COUNT(" & p5 & ")=0),"""",SUM(IF(ISNUMBER(" & p5 & ")," & p5 &
"*" & p6 & "))/SUMIF(" & p5 & ","">=0""," & p6 & "))")

Range("AC" & lig) = Evaluate("IF(OR(LEN(B" & lig &
")=0,COUNT(" & Range("D" & lig & ":AA" & lig).Address &
")=0),"""",RANK(AD" & lig & ",AD6:AD38))")

x = Evaluate("MATCH(AJ" & lig & ",AK6:AK38,0)")
A = IsError(x)
B = [LEN(AB40)] = 0
C = Evaluate("ROWS(B" & lig & ")-5>B40")
If A Or B Or C Then
Range("AF" & lig) = ""
Range("AG" & lig) = ""
Else
Range("AF" & lig) = Evaluate("INDEX(B6:$B38," & x & ")") &
" " & Evaluate("LEFT(INDEX(C6:$C38," & x & "),1)")
Range("AG" & lig) = Evaluate("INDEX(AD6:AD38," & x & ")")
End If

Range("AH" & lig) = Evaluate("IF(LEN(AF" & lig & ")=0,"""",AJ"
& lig & ")")

Range("AI" & lig) = Evaluate("IF(LEN(AF" & lig & ")=0,"""",""/
""&C40)")

Range("AK" & lig) = Evaluate("IF(LEN(B" & lig &
")=0,"""",IF(COUNTIF(AC6:AC38,AC" & lig & ")=1,AC" & lig & ",AC" & lig
& " + COUNTIF(AC6:AC" & lig - 1 & ",AC6)))")
Next lig
End Sub
Avatar
magic-dd
j'ai mis une boucle mais le comportement de la macro est etrange.

il supprime des lignes

je te mets ma boucle

je l'ai adaptée de ce projet

http://cjoint.com/?dvw7JXQg5H

Sub Macro1()
For lig = 6 To 36 ' <----- choix du numéro de ligne à
calculer
Range("X" & lig) = Evaluate("(IF(LEN(B" & lig &
")=0,"""",SUM(D" & lig & ":H" & lig & ") * 20) / 25)")

Range("Y" & lig) = Evaluate("(IF(LEN(B" & lig &
")=0,"""",SUM(I" & lig & ":M" & lig & ") * 20) / 25)")

p1 = Range("N" & lig & ":T" & lig).Address
p2 = Range("N5:T5").Address
Range("Z" & lig) = Evaluate("IF(OR(LEN(B" & lig & ")=0,COUNT("
& p1 & ")=0),"""",SUM(IF(ISNUMBER(" & p1 & ")," & p1 & "*" & p2 & "))/
SUMIF(" & p1 & ","">=0""," & p2 & "))")

p3 = Range("U" & lig & ":V" & lig).Address
p4 = Range("U5:V5").Address
Range("AA" & lig) = Evaluate("IF(OR(LEN(B" & lig &
")=0,COUNT(" & p3 & ")=0),"""",SUM(IF(ISNUMBER(" & p3 & ")," & p3 &
"*" & p4 & "))/SUMIF(" & p3 & ","">=0""," & p4 & "))")

p5 = Range("W" & lig & ":AA" & lig).Address
p6 = Range("W5:AA5").Address
Range("AB" & lig) = Evaluate("IF(OR(LEN(B" & lig &
")=0,COUNT(" & p5 & ")=0),"""",SUM(IF(ISNUMBER(" & p5 & ")," & p5 &
"*" & p6 & "))/SUMIF(" & p5 & ","">=0""," & p6 & "))")

Range("AC" & lig) = Evaluate("IF(OR(LEN(B" & lig &
")=0,COUNT(" & Range("D" & lig & ":AA" & lig).Address &
")=0),"""",RANK(AD" & lig & ",AD6:AD38))")

x = Evaluate("MATCH(AJ" & lig & ",AK6:AK38,0)")
A = IsError(x)
B = [LEN(AB40)] = 0
C = Evaluate("ROWS(B" & lig & ")-5>B40")
If A Or B Or C Then
Range("AF" & lig) = ""
Range("AG" & lig) = ""
Else
Range("AF" & lig) = Evaluate("INDEX(B6:$B38," & x & ")") &
" " & Evaluate("LEFT(INDEX(C6:$C38," & x & "),1)")
Range("AG" & lig) = Evaluate("INDEX(AD6:AD38," & x & ")")
End If

Range("AH" & lig) = Evaluate("IF(LEN(AF" & lig & ")=0,"""",AJ"
& lig & ")")

Range("AI" & lig) = Evaluate("IF(LEN(AF" & lig & ")=0,"""",""/
""&C40)")

Range("AK" & lig) = Evaluate("IF(LEN(B" & lig &
")=0,"""",IF(COUNTIF(AC6:AC38,AC" & lig & ")=1,AC" & lig & ",AC" & lig
& " + COUNTIF(AC6:AC" & lig - 1 & ",AC6)))")
Next lig
End Sub
Avatar
isabelle
bonjour magic,

il n'y a pas de boucle dans le dernier classeur que tu as envoyé, peut être as tu fais une mauvaise manip.

isabelle

j'ai mis une boucle mais le comportement de la macro est etrange.

il supprime des lignes

je te mets ma boucle

je l'ai adaptée de ce projet

http://cjoint.com/?dvw7JXQg5H

Sub Macro1()
For lig = 6 To 36 ' <----- choix du numéro de ligne à
calculer
Range("X" & lig) = Evaluate("(IF(LEN(B" & lig &
")=0,"""",SUM(D" & lig & ":H" & lig & ") * 20) / 25)")

Range("Y" & lig) = Evaluate("(IF(LEN(B" & lig &
")=0,"""",SUM(I" & lig & ":M" & lig & ") * 20) / 25)")

p1 = Range("N" & lig & ":T" & lig).Address
p2 = Range("N5:T5").Address
Range("Z" & lig) = Evaluate("IF(OR(LEN(B" & lig & ")=0,COUNT("
& p1 & ")=0),"""",SUM(IF(ISNUMBER(" & p1 & ")," & p1 & "*" & p2 & "))/
SUMIF(" & p1 & ","">=0""," & p2 & "))")

p3 = Range("U" & lig & ":V" & lig).Address
p4 = Range("U5:V5").Address
Range("AA" & lig) = Evaluate("IF(OR(LEN(B" & lig &
")=0,COUNT(" & p3 & ")=0),"""",SUM(IF(ISNUMBER(" & p3 & ")," & p3 &
"*" & p4 & "))/SUMIF(" & p3 & ","">=0""," & p4 & "))")

p5 = Range("W" & lig & ":AA" & lig).Address
p6 = Range("W5:AA5").Address
Range("AB" & lig) = Evaluate("IF(OR(LEN(B" & lig &
")=0,COUNT(" & p5 & ")=0),"""",SUM(IF(ISNUMBER(" & p5 & ")," & p5 &
"*" & p6 & "))/SUMIF(" & p5 & ","">=0""," & p6 & "))")

Range("AC" & lig) = Evaluate("IF(OR(LEN(B" & lig &
")=0,COUNT(" & Range("D" & lig & ":AA" & lig).Address &
")=0),"""",RANK(AD" & lig & ",AD6:AD38))")

x = Evaluate("MATCH(AJ" & lig & ",AK6:AK38,0)")
A = IsError(x)
B = [LEN(AB40)] = 0
C = Evaluate("ROWS(B" & lig & ")-5>B40")
If A Or B Or C Then
Range("AF" & lig) = ""
Range("AG" & lig) = ""
Else
Range("AF" & lig) = Evaluate("INDEX(B6:$B38," & x & ")") &
" " & Evaluate("LEFT(INDEX(C6:$C38," & x & "),1)")
Range("AG" & lig) = Evaluate("INDEX(AD6:AD38," & x & ")")
End If

Range("AH" & lig) = Evaluate("IF(LEN(AF" & lig & ")=0,"""",AJ"
& lig & ")")

Range("AI" & lig) = Evaluate("IF(LEN(AF" & lig & ")=0,"""",""/
""&C40)")

Range("AK" & lig) = Evaluate("IF(LEN(B" & lig &
")=0,"""",IF(COUNTIF(AC6:AC38,AC" & lig & ")=1,AC" & lig & ",AC" & lig
& " + COUNTIF(AC6:AC" & lig - 1 & ",AC6)))")
Next lig
End Sub






Avatar
magic-dd
On 25 mar, 02:47, isabelle wrote:
bonjour magic,

il n'y a pas de boucle dans le dernier classeur que tu as envoyé, peut être as tu fais une mauvaise manip.

isabelle




en effet j'ai pas mis le bon

le voici

http://cjoint.com/?dzhJdDlz54

merci

Avatar
magic-dd
en effet j'ai pas mis le bon

le voici

http://cjoint.com/?dzhJdDlz54

merci
Avatar
isabelle
bonjour magic,

cette ligne range("ak" & lig)...
n'était pas calculer au bon moment.
http://cjoint.com/?dzx1FKH3et

isabelle


en effet j'ai pas mis le bon

le voici

http://cjoint.com/?dzhJdDlz54

merci


Avatar
magic-dd
bonjour isabelle
je viens d'essayer, c'est super ce que tu as fais mais il demeure un
pb

le classement n'est pas bon et en plus j'ai fais un test de ligne 6 à
10 et cela ne fonctionne pas jusqu'au bout

en effet seul les 3 premiers sont classés.

je t'envoi le fichier en question

etdésolé de t"embetter avec ca

j'ai essayé de decortiquer, faire du pas a pas mais je bloque.


dans l'attente de tes nouvelles

http://cjoint.com/?dAsYm2SVoX
Avatar
isabelle
peut tu m'expliquer cette formule,

=SI(ESTNA(SI(NBCAR($AB$40)=0;"";SI(LIGNE(B6)-5>$B$40;"";INDEX($B$6:$B$38;EQUIV(AJ6;$AK$6:$AK$38;0))&"
"&GAUCHE(INDEX($C$6:$C$38;EQUIV(AJ6;$AK$6:$AK$38;0));1))));"";SI(NBCAR($AB$40)=0;"";SI(LIGNE(B6)-5>$B$40;"";INDEX($B$6:$B$38;EQUIV(AJ6;$AK$6:$AK$38;0))&"
"&GAUCHE(INDEX($C$6:$C$38;EQUIV(AJ6;$AK$6:$AK$38;0));1))))

isabelle

bonjour isabelle
je viens d'essayer, c'est super ce que tu as fais mais il demeure un
pb

le classement n'est pas bon et en plus j'ai fais un test de ligne 6 à
10 et cela ne fonctionne pas jusqu'au bout

en effet seul les 3 premiers sont classés.

je t'envoi le fichier en question

etdésolé de t"embetter avec ca

j'ai essayé de decortiquer, faire du pas a pas mais je bloque.


dans l'attente de tes nouvelles

http://cjoint.com/?dAsYm2SVoX



Avatar
isabelle
je crois bien avoir trouver,
dit moi si ça va,

http://cjoint.com/?dBm7k2bDgR

isabelle

bonjour isabelle
je viens d'essayer, c'est super ce que tu as fais mais il demeure un
pb

le classement n'est pas bon et en plus j'ai fais un test de ligne 6 à
10 et cela ne fonctionne pas jusqu'au bout

en effet seul les 3 premiers sont classés.

je t'envoi le fichier en question

etdésolé de t"embetter avec ca

j'ai essayé de decortiquer, faire du pas a pas mais je bloque.


dans l'attente de tes nouvelles

http://cjoint.com/?dAsYm2SVoX



1 2 3