Re: USF et Formules Matricielle VBA
Bonsoir simyron et le forum,
Voici pour remplir pour ta feuille scatter98 dans ton fichier joint
En mettant juste les résultats on utilise Evaluate
Sub GrantEval()
Dim I As Byte, N As Byte, Resul As Double
With Sheets("Scatter98")
For I = 6 To 37
For N = 7 To 22
Resul = Evaluate("SUM((Height98>=" & .Cells(I, 4).Address & " )*(Height98<" & .Cells(I, 6).Address & " )*(Period98=" & .Cells(38, N).Address & "))")
If Resul > 0 Then .Cells(I, N) = Resul
Next N
Next I
End With
End Sub
On remarquera que les noms Period98 et Height98 n'ont pas besoin de " commes les adresses qui sont considéées comme des chaines de caractères
où en VBA on rajoute des ".
Pour écrire les formules en dur
Les ; sont à remplacé par des virgules en VBA, formulaarray sert uniquement pour les formules matricielles
Sub GrantENDUR()
Dim I As Byte, N As Byte
With Sheets("Scatter98")
For I = 6 To 37
For N = 7 To 22
Cells(I, N).FormulaArray = "=" & "IF(SUM((Height98>=" & .Cells(I, 4).Address & " )*(Height98<" & .Cells(I, 6).Address & " )*(Period98=" & .Cells(38, N).Address & "))>0,SUM((Height98>=" & .Cells(I, 4).Address & " )*(Height98<" & .Cells(I, 6).Address & " )*(Period98=" & .Cells(38, N).Address & ")),"""")"
Next N
Next I
End With
End Sub
Il y a 4 " dans la conditon fausse du si car en VBA pour mettre une chaine de caractere est à mettre entre "" et "" est une chaine ....
*******************USF*******************
Cela revient à adpater GrantEval comme suit mais sans nom défini Excel
Il faut changer les variables perd et hgt en string
Dim Perd as string,HG as string
Perd=Me.Refedit1.value
HG=Me.Refedit2.value
Ta boucle For est à inverser en fait la même que pour GrantEval:
For I = 6 To 37
For N = 7 To 22
With sheets("Ta feuille source")
Result=Evaluate("SUM((" & Perd & ">=" & .Cells(I, 4).Address & " )*(" & Perd & "<" & .Cells(I, 6).Address & " )*(" & HG & "=" & .Cells(J, K).Address & "))")
If Result>0 then cells(I,N)=Result
end with
Voilà en tout cas grace à toi et au fichier des filles que je recommande même aux VBAistes, je comprends mieux les Formules matricielles .....
En conclusion utiliser une formule matricielle en VBA est un peu comme sur une feuille de calcul, si ce n'est qu'en VBA on a pas les () qui clignotent par contre
les Variables string sont à mettre entre " & NomVariable & "
Les cells(1,2), ou cells(L,C) sont à mettre & cells(L,C).address.
Les ; de separation il faut des ,
Toutefois un conseil que je me permettrai de donner aprés cette expérience formidable pour moi dans mon apprentissage VBA .
Ecrire sa formule sur une feuille de calcul et ensuite la traduire en VBA.
J'espère ne pas avoir été trop brouillon car ce n'est pas évident d'être explicite avec les F M .....
A+++