Evaluate

Accueil


Evaluate
Remplissage tableau 2 dimensions
Fonction renvoyant l'évaluation d'une expression dans une cellule

Evaluate(expression)

La fonction Evaluate(expression) ou [expression] donne la valeur d'une expression

x = Evaluate("(4+8)*6")

donne 72

x = [(4+8)*6]

donne 72

Générer des nombre de 1 à 25

a = Evaluate("row(1:25)")
MsgBox a(3, 1) -->3

Somme du champ D1:D5

x = Evaluate("SUM(D1:D5)")
x = [Sum(D1:D5)]

Nombre de jours ouvrés entre 1/1/2005 et 31/12/2005

x = [NB.JOURS.OUVRES("01/01/2005","31/12/2005")]

Nombre de jours ouvres entre 1/1/2005 et 31/12/2005

x = "NB.JOURS.OUVRES(""01/01/2005"",""31/12/2005"")"
z = Evaluate(x)

Nombre de jours ouvrés entre les dates de A1 et B1

x = [NB.JOURS.OUVRES(A1,B1)]

Nombre de jours ouvrés entre la date du jour et le 1er janvier 2006

fériés est le nom d'un champ contenant les jours fériés

d = #1/1/2006#
f = Date
x = Evaluate("NB.JOURS.OUVRES(""" & d & """,""" & f & """)")

d = #1/1/2008#
f = Date
z = Evaluate("NB.JOURS.OUVRES(""" & d & """,""" & f & """,fériés)")

Date en A1 décalée de 3 mois

x = "MOIS.DECALER(""" & [A1] & """,3)"
z = Evaluate(x)

Recherchev(A15;produit;2;Faux)

x = Evaluate("VLOOKUP(A15,produit,2,FALSE)")
If IsError(x) Then
  MsgBox "Erreur"
Else
  MsgBox x
End If

x = "souris"
z = Evaluate("VLOOKUP(" & Chr(34) & x & Chr(34) & ",produit,2,FALSE)")
If IsError(z) Then
  MsgBox "Erreur"
Else
  MsgBox z
End If

Dans un autre classeur ouvert

x = [vlookup("toto",'[Sem45.xls]BD'!$A$2:$B$8,2,false)]

Sommeprod((Service="compta")*(statut="cadre")*Salaire))

x = [SumProduct((Service="compta")*(statut="cadre")*Salaire)]

Calcule dynamiquement SommeProd((Nom="Dupont")*(prenom="Jean")*Age)

Private Sub Worksheet_Change(ByVal Target As Range)
  If (Target.Column = 1 Or Target.Column = 2) And Target.Count = 1 Then
     n = Cells(Target.Row, 1)
     p = Cells(Target.Row, 2)
     pos = Evaluate("Sumproduct((Nom=""" & n & """)*(prenom=""" & p & """)*Age)")
    If Not IsError(pos) Then
      Cells(Target.Row, 3) = pos
    End If
  End If
End Sub

Age pour une date de naissance en A1

x = [datedif(A1,today(),"y")]
x = Evaluate("datedif(A1,today(),""y"")")

Nombre années/mois/jours entre 2 dates

DateDiff


Private Sub Ok
  Me.TextBox3 = Evaluate("datedif(" & "datevalue(""" & cvDate(Me.TextBox1) & """)" & ",datevalue(""" &     cvDate(Me.TextBox2) & """),""y"")")
  Me.TextBox4 = Evaluate("datedif(" & "datevalue(""" & cvDate(Me.TextBox1) & """)" & ",datevalue(""" &    cvDate(Me.TextBox2) & """),""ym"")")
  Me.TextBox5 = Evaluate("datedif(" & "datevalue(""" & cvDate(Me.TextBox1) & """)" & ",datevalue(""" &     cvDate(Me.TextBox2) & """),""md"")")
End Sub

Function cvDate(d)
  p1 = InStr(d, "/")
  P2 = InStr(p1 + 1, d, "/")
  cvDate = Mid(d, p1 + 1, P2 - p1) & Left(d, p1) & Mid(d, P2 + 1)
End Function

Nombre d'items numériques différents avec critère

=NB(1/FREQUENCE(SI(date=DATE(2010;3;1);formes);formes))
valider avec maj+ctrl+entrée

En VBA:
n = [Count(1/FREQUENCY(If(date=DATE(2010,3,1),formes),formes))]

ou

d = "3/1/2010"
temp = "Count(1/FREQUENCY(If(date=DateValue(" & Chr(34) & d & Chr(34) & "),formes),formes))"
n = Evaluate(temp)

Dates         Formes
25/02/2010 4592
25/02/2010 4592
25/02/2010 4275
25/02/2010 4275
25/02/2010 4275
25/02/2010 4275
01/03/2010 4327
01/03/2010 4327
01/03/2010 4638
01/03/2010 4475
01/03/2010 4475
01/03/2010 4475
01/03/2010 4475

Remplissage d'un tableau à 2 dimensions

Crée un tableau a(,) 4 lignes 3 colonnes

a = Evaluate("{1,2,3;4,5,6;7,8,9;10,11,12}")
MsgBox UBound(a, 1)
MsgBox UBound(a, 2)

ou

a = [{1,2,3;4,5,6;7,8,9;"aa","bb","cc"}]
MsgBox a(3, 1)
MsgBox a(4, 1)

Tableaux pré-remplis

a = Evaluate("Row(1:10)")                                   ' tableau 2D rempli avec 1,2,3,4,10
b = Application.Transpose(Evaluate("Row(1:10)")) ' tableau 1D rempli avec 1,2,3,4,10

Fonction renvoyant l'évaluation d'une expression dans une cellule

Une cellule

Function Eval(c)
  Eval = Evaluate(Replace(c.Formula, ",", "."))
End Function

Un champ

Function EvalChamp(champ As Range)
   temp = 0
   For Each c In champ
      If c <> "" Then temp = temp + Evaluate(Replace(c.Formula, ",", "."))
   Next c
   EvalChamp = temp
End Function

Un champ multi-zones

L'appel de la fonction multi-zones se fait avec =EvalChampMZ((A1:A3;C1:C3))

Function EvalChampMZ(champ As Range)
   temp = 0
   For i = 1 To champ.Areas.Count
     For j = 1 To champ.Areas(i).Count
       If champ.Areas(i)(j) <> "" Then
         temp = temp + Evaluate(Replace(champ.Areas(i)(j).Formula, ",", "."))
       End If
     Next j
   Next i
   EvalChampMZ = temp
End Function

Evaluate matriciel

Retourne dans un tableau a() la concaténation de la colonne A et la colonne C

a = Evaluate("=A2:A10&char(32)&C2:C10")
MsgBox a(1, 1)

Donne la somme des nombres d'une cellule séparés par les caractères , ou espace.

Function sommeCel(c)
  Application.Volatile
  sommeCel = Evaluate(Replace(Replace(c, ",", "+"), " ", "+"))
End Function

Recherche d'un prix avec 3 critères

Evaluate 3 critères

Sub Macro2()
  Range("F13") = Evaluate("INDEX(prix,MATCH(1,(annee=A13)*(taille=B13)*(modele=C13),0))")
End Sub

Somme.Si.Ens sur plusieurs colonnes

SommeSiEns

Sub essai2()
  T = "sumproduct(SUMIFS(offset(B2:b10,,column(a:c)-1),A2:A10,""x""))"
  Cells(2, 10) = Evaluate(T)
End Sub

Sub essai3()
  T = "sumproduct(SUMIFS(offset(B2:b10,,{0;1;2}),A2:A10,""x""))"
  Cells(2, 10) = Evaluate(T)
End Sub

 






Exemples