SI(NB.SI EN VBA
Bonjour à tous, et merci pour toute votre aide
Ma question, comment traduire la fonction suivante en vba :
'=SI(NB.SI(M4:M$1001;M4:M$1001)>1;">>>";SOMME(SI(M$4:M$1001=M4;G$4:G$1001;"")))
Voici le détail et les objectifs de cette fonction :
une colonne M : = sous-traitant &" "& projet
>pour avoir une référence unique qui permettra de faire la somme des factures par sous-traitant ET par projet
une colonne N : '=SI(NB.SI(M4:M$1001;M4:M$1001)>1;">>>";SOMME(SI(M$4:M$1001=M4;G$4:G$1001;"")))
> qui permettait donc d'avoir le résultat texte ">>>" si il ne s'agit pas de LA DERNIERE facture d'un sous-traitant par projet
> et sinon la somme des factures situées en colonne G (donc par sous-traitant et par projet)
LA RAISON DE MON PASSAGE D'UNE FONCTION A UNE MACRO :
J'use et j'abuse des filtres et des tris pour avoir seulement les informations qui m'intéressent en fonction des circonstances.
Mais avec cette formule reproduite sur toute une colonne, un simple tri (et toutes modifications d'ordre des lignes!) la feuille se recharge avec un temps de calcul (qui défile en pourcentage en bas à gauche) et qui correspond donc au calcul de la fonction en question
Ce qui est très peu commode, car une simple recherche prend un temps fou et mon fichier n'est ainsi plus très manipulable ….
MA SOLUTION :
Tout passer en macro, ainsi le résultat est donc en "brut" dans les cellules et j'actualise régulièrement
Du coup les tris et filtres ne posent plus de problème!
MON PROBLEME :
Mais je coince sur la macro. j'ai beau tourner et retourner dans tous les sens les deux fonctions worksheetFunction, Countif et Sumif, que j'ai trouvées, sans savoir s'il s'agit bien de celles à utiliser ou s'il s'agit d'un problème de syntaxe.
Voici ma dernière tentative :
Dim i As Long
With Sheets("feuille1")
For i = 4 To 1000
If Application.CountIf(Range("M4:M1001"), Cell) > 1 Then
Range("N" & i).Value = ">>>"
Else
Range("N" & i).Value = Application.SumIf(Range("M4:M1001"), "M" & i, Range("G$4:G$1001"))
End IfMerci à tous!
Bonjour,
Voici la traduction en VBA:
"=IF(COUNTIF(R[3]C[12]:R1001C[12],R[3]C[12]:R1001C[12])>1,"">>>"",SUM(IF(R4C[12]:R1001C[12]=R[3]C[12],R4C[6]:R1001C[6],"""")))"
Cordialement
Salut Sam,
Merci pour ta traduction.
J'ai bien essayé mais j'obtiens zéro comme somme à chaque ligne.
Dans le cas de la fonction dans la cellule même que je recopiais en tirant la cellule sur toute la colonne, la ligne de départ changeait à chaque fois, la raison pour laquelle ça marchait avec comme critère ">1" (j'imagine)
Ainsi
à la ligne 4 j'avais =SI(NB.SI(M4:M$1001;M4:M$1001)>1;">>>";SOMME(SI(M$4:M$1001=M4;G$4:G$1001;"")))
à la ligne 5 j'avais =SI(NB.SI(M5:M$1001;M5:M$1001)>1;">>>";SOMME(SI(M$5:M$1001=M5;G$4:G$1001;"")))
à la ligne 6 j'avais =SI(NB.SI(M6:M$1001;M6:M$1001)>1;">>>";SOMME(SI(M$6:M$1001=M6;G$4:G$1001;"")))
ainsi de suite
Et ici, la traduction de la fonction ne prend pas en compte cette variable, non?
Une idée?
Dim i As Long
With Sheets("CITTI")
For i = 4 To 1000
'REPORTER REF CONTRAT
If .Range("A" & i).Value <> "" Then
Range("R" & i).Value = Application.VLookup(.Range("E" & i), Sheets("CONTRAT").Range("$C:$G"), 2, False)
End If
'CALCUL TOTAL FACTURES
'pour rappel la formule qui était avant dans la cellule =SI(NB.SI(M4:M$1001;M4:M$1001)>1;">>>";SOMME(SI(M$4:M$1001=M4;G$4:G$1001;"")))
If .Range("A" & i).Value <> "" Then
Range("T" & i).Formula = "=IF(COUNTIF(R[3]C[12]:R1001C[12],R[3]C[12]:R1001C[12])>1,"">>>"",SUM(IF(R4C[12]:R1001C[12]=R[3]C[12],R4C[6]:R1001C[6],"""")))"
End If
'REPORTER MONTANT MARCHE
If .Range("A" & i).Value <> "" And .Range("A" & i).Value <> "CITTI" Then
Range("U" & i).Value = "----------------"
End If
If .Range("A" & i).Value <> "" And .Range("A" & i).Value = "CITTI" Then
Range("U" & i).Value = Application.VLookup(.Range("E" & i), Sheets("CONTRAT").Range("$C:$F"), 6, False)
End If
Next i
End With
End Sub