Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

sommeprod sous vba, je cale

147 views
Skip to first unread message

merguez07

unread,
Feb 12, 2011, 4:04:56 AM2/12/11
to
Bonjour � tous,
voil� mon probl�me est assez simple
J'ai une fichier excel sous Excel 2000 dans lequel j'ai des tableau avec
un certain nombre de calcul matriciel utilisant la formule sommeprod.

Pour donner un peu plus de visibilit� dans les formules (il s'agit de
formule sommeprod � rallonge) j'ai d�cid� de cr�er des formules
personnalis�s.


Jusque la pas de probl�me, plut�t que d'utiliser des formules sommeprod
j'utilise donc sous vba des boucles qui balaye chaque ligne et me donne
le r�sultat escompt�. le hic c'est le temps de calcul qui peut d�passer
une minute alors qu'avec les sommeprod le r�sultat �tait dans la seconde.


La solution serait donc d'utiliser les sommeprod dans le vba et l� je
bloque


ci dessous je dois calculer le nombre de date en d�cembre. La date se
trouve dans la 10eme colonne de la feuille "test"

Total =
Application.WorksheetFunction.SumProduct((Month(Worksheets("test").Columns(10))=
12))
l� le programme sort de la formule sans calcul et sans message d'erreur

J'ai aussi essay�


Total = [SumProduct((Month(Worksheets("test").Columns(10)) = 12))]
et j'ai un message d'erreur 2015

Help me please

Jacquouille

unread,
Feb 12, 2011, 5:50:30 AM2/12/11
to
Bonjour
Je suis surpris que sommeprod prenne une minute....
Bien v�rifier que les cellules de la colonne J soient bien format�es en
date.
D'abord, sommeprod ne peut s'utiliser sur une colonne compl�te. Il lui faut
au moins une ligne de libre (celle des titres de colonnes suffit).
Si j'ai bien compris, il suffit de calculer le nombre de fois que le mois de
d�cembre se trouve dans la colonne A
=Sommeprod((mois(J2:J100)=12)*1) --> � placer dans une cellule de la m�me
feuille (ex: en A1) et valider par un simple "Enter". Sommeprod n'est pas
une matricielle.
-----------------------------------
ou bien, toujours les dates en col J
compteur=0
for each c in range("j1:j100")
if month(c)=12 then
compteur=compteur+1
end if
next
msgbox compteur

Jacquouille

" Le vin est au repas ce que le parfum est � la femme."
"merguez07" a �crit dans le message de groupe de discussion :
4d564d34$0$8434$426a...@news.free.fr...

merguez07

unread,
Feb 12, 2011, 6:26:07 AM2/12/11
to
Merci "Jacquouille" mais en fait ce que je veux c'est utiliser la
fonction sommeprod sous vba

ce qui prend 1 minute de calcul ce n'est pas la fonction sommeprod mais
bien les boucles vba comme par exemple celle que tu cites en exemple.
Je ne veux pas mettre sommeprod comme formule de cellule car cela fait
une formule à rallonge incompréhensible. L'exemple que j'ai donné pour
le calcul du nombre de mois de décembre est un juste un exemple simple
de ce que j'essaye de faire sous vba mais en fait je souhaite faire des
somme matricielle bien plus complexe.


Le 12.02.2011 11:50, Jacquouille a écrit :
> Bonjour
> Je suis surpris que sommeprod prenne une minute....

> Bien vérifier que les cellules de la colonne J soient bien formatées en
> date.
> D'abord, sommeprod ne peut s'utiliser sur une colonne complète. Il lui


> faut au moins une ligne de libre (celle des titres de colonnes suffit).
> Si j'ai bien compris, il suffit de calculer le nombre de fois que le

> mois de décembre se trouve dans la colonne A
> =Sommeprod((mois(J2:J100)=12)*1) --> à placer dans une cellule de la
> même feuille (ex: en A1) et valider par un simple "Enter". Sommeprod


> n'est pas une matricielle.
> -----------------------------------
> ou bien, toujours les dates en col J
> compteur=0
> for each c in range("j1:j100")
> if month(c)=12 then
> compteur=compteur+1
> end if
> next
> msgbox compteur
>
> Jacquouille
>

> " Le vin est au repas ce que le parfum est à la femme."
> "merguez07" a écrit dans le message de groupe de discussion :
> 4d564d34$0$8434$426a...@news.free.fr...
>
> Bonjour à tous,
> voilà mon problème est assez simple


> J'ai une fichier excel sous Excel 2000 dans lequel j'ai des tableau avec
> un certain nombre de calcul matriciel utilisant la formule sommeprod.
>

> Pour donner un peu plus de visibilité dans les formules (il s'agit de
> formule sommeprod à rallonge) j'ai décidé de créer des formules
> personnalisés.
>
>
> Jusque la pas de problème, plutôt que d'utiliser des formules sommeprod


> j'utilise donc sous vba des boucles qui balaye chaque ligne et me donne

> le résultat escompté. le hic c'est le temps de calcul qui peut dépasser
> une minute alors qu'avec les sommeprod le résultat était dans la seconde.
>
>
> La solution serait donc d'utiliser les sommeprod dans le vba et là je
> bloque
>
>
> ci dessous je dois calculer le nombre de date en décembre. La date se


> trouve dans la 10eme colonne de la feuille "test"
>
> Total =
> Application.WorksheetFunction.SumProduct((Month(Worksheets("test").Columns(10))=
>
> 12))

> là le programme sort de la formule sans calcul et sans message d'erreur
>
> J'ai aussi essayé

michdenis

unread,
Feb 12, 2011, 6:33:11 AM2/12/11
to
Bonjour,

Essaie comme ceci :

Tu dois adapter le nom de la feuille et de la plage de cellules
si nécessaire. La plage doit contenir soit des dates, soit être
vide.

'----------------------------------------------------
Sub test()
Dim Rg As Range
Dim LeMois As Integer, Lannée As Integer

LeMois = 2 ' Le mois et l'année que tu désires
Lannée = 2011

With Worksheets("Feuil1")
Set Rg = .Range("J1:J" & .Range("J65536").End(xlUp).Row)
End With

With Rg
'Nombre de données tenant compte que tu mois
x = Evaluate("SumProduct((month(" & .Parent.Name & _
"!" & .Address & ")=" & LeMois & ")*1)")

'Nombre de données tenant compte du mois et de l'année
F = Evaluate("SumProduct((month(" & .Parent.Name & "!" & _
.Address & ")=" & LeMois & ")*(year(" & _
.Parent.Name & "!" & .Address & ")=" & _
Lannée & "))")
End With
End Sub
'----------------------------------------------------


MichD
--------------------------------------------

michdenis

unread,
Feb 12, 2011, 6:35:31 AM2/12/11
to
Bonjour,

Sommeprod n'est pas une matricielle.

Tu veux dire, sommeprod ne requiert pas une validation matricielle Maj + Ctrl + Enter
mais C'EST une formule matricielle. Un certain AV ne serait pas fier de son secrétaire !
;-))


MichD
--------------------------------------------
"Jacquouille" a écrit dans le message de groupe de discussion : 4d5665f8$0$14260$ba62...@news.skynet.be...

Bonjour
Je suis surpris que sommeprod prenne une minute....

Bien vérifier que les cellules de la colonne J soient bien formatées en
date.
D'abord, sommeprod ne peut s'utiliser sur une colonne complète. Il lui faut


au moins une ligne de libre (celle des titres de colonnes suffit).
Si j'ai bien compris, il suffit de calculer le nombre de fois que le mois de

décembre se trouve dans la colonne A
=Sommeprod((mois(J2:J100)=12)*1) --> à placer dans une cellule de la même


feuille (ex: en A1) et valider par un simple "Enter". Sommeprod n'est pas
une matricielle.
-----------------------------------
ou bien, toujours les dates en col J
compteur=0
for each c in range("j1:j100")
if month(c)=12 then
compteur=compteur+1
end if
next
msgbox compteur

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"merguez07" a écrit dans le message de groupe de discussion :
4d564d34$0$8434$426a...@news.free.fr...

Bonjour à tous,
voilà mon problème est assez simple


J'ai une fichier excel sous Excel 2000 dans lequel j'ai des tableau avec
un certain nombre de calcul matriciel utilisant la formule sommeprod.

Pour donner un peu plus de visibilité dans les formules (il s'agit de


formule sommeprod à rallonge) j'ai décidé de créer des formules
personnalisés.


Jusque la pas de problème, plutôt que d'utiliser des formules sommeprod


j'utilise donc sous vba des boucles qui balaye chaque ligne et me donne

le résultat escompté. le hic c'est le temps de calcul qui peut dépasser
une minute alors qu'avec les sommeprod le résultat était dans la seconde.


La solution serait donc d'utiliser les sommeprod dans le vba et là je
bloque


ci dessous je dois calculer le nombre de date en décembre. La date se


trouve dans la 10eme colonne de la feuille "test"

Total =
Application.WorksheetFunction.SumProduct((Month(Worksheets("test").Columns(10))=
12))

là le programme sort de la formule sans calcul et sans message d'erreur

J'ai aussi essayé

Jacquouille

unread,
Feb 12, 2011, 7:15:04 AM2/12/11
to
Salut Denis
En fait, SP ce n'est pas du...mais c'est comme...;
De l� � dire que le Pr�sident AV ne serait pas fier de son secr�taire
.....alors que celui-ci cherche � faire comprendre SP � tout le monde ?
Donc SP travaille comme une matricielle, mais se valide du bout d'un doigt.

Jacquouille

" Le vin est au repas ce que le parfum est � la femme."
"michdenis" a �crit dans le message de groupe de discussion :
ij5raq$36a$1...@speranza.aioe.org...

Bonjour,

Sommeprod n'est pas une matricielle.

Tu veux dire, sommeprod ne requiert pas une validation matricielle Maj +
Ctrl + Enter
mais C'EST une formule matricielle. Un certain AV ne serait pas fier de son

secr�taire !
;-))


MichD
--------------------------------------------
"Jacquouille" a �crit dans le message de groupe de discussion :
4d5665f8$0$14260$ba62...@news.skynet.be...

Bonjour
Je suis surpris que sommeprod prenne une minute....

Bien v�rifier que les cellules de la colonne J soient bien format�es en
date.
D'abord, sommeprod ne peut s'utiliser sur une colonne compl�te. Il lui faut


au moins une ligne de libre (celle des titres de colonnes suffit).
Si j'ai bien compris, il suffit de calculer le nombre de fois que le mois de

d�cembre se trouve dans la colonne A
=Sommeprod((mois(J2:J100)=12)*1) --> � placer dans une cellule de la m�me


feuille (ex: en A1) et valider par un simple "Enter". Sommeprod n'est pas
une matricielle.
-----------------------------------
ou bien, toujours les dates en col J
compteur=0
for each c in range("j1:j100")
if month(c)=12 then
compteur=compteur+1
end if
next
msgbox compteur

Jacquouille

" Le vin est au repas ce que le parfum est � la femme."
"merguez07" a �crit dans le message de groupe de discussion :
4d564d34$0$8434$426a...@news.free.fr...

Bonjour � tous,
voil� mon probl�me est assez simple


J'ai une fichier excel sous Excel 2000 dans lequel j'ai des tableau avec
un certain nombre de calcul matriciel utilisant la formule sommeprod.

Pour donner un peu plus de visibilit� dans les formules (il s'agit de


formule sommeprod � rallonge) j'ai d�cid� de cr�er des formules
personnalis�s.


Jusque la pas de probl�me, plut�t que d'utiliser des formules sommeprod


j'utilise donc sous vba des boucles qui balaye chaque ligne et me donne

le r�sultat escompt�. le hic c'est le temps de calcul qui peut d�passer
une minute alors qu'avec les sommeprod le r�sultat �tait dans la seconde.


La solution serait donc d'utiliser les sommeprod dans le vba et l� je
bloque


ci dessous je dois calculer le nombre de date en d�cembre. La date se


trouve dans la 10eme colonne de la feuille "test"

Total =
Application.WorksheetFunction.SumProduct((Month(Worksheets("test").Columns(10))=
12))

l� le programme sort de la formule sans calcul et sans message d'erreur

J'ai aussi essay�

michdenis

unread,
Feb 12, 2011, 7:38:41 AM2/12/11
to
Peut-être que tu préfères cette syntaxe :

'-------------------------------------------------
Sub test()
Dim Adr As String


Dim LeMois As Integer, Lannée As Integer

LeMois = 2 ' Le mois et l'année que tu désires
Lannée = 2011

With Worksheets("Feuil1")
Adr = .Name & "!" & .Range("J1:J" & .Range("J65536").End(xlUp).Row).Address
End With

'Nombre de données tenant compte que tu mois

x = Evaluate("SumProduct((month(" & Adr & ")=" & LeMois & ")*1)")

'Nombre de données tenant compte du mois et de l'année

F = Evaluate("SumProduct((month(" & Adr & ")=" & LeMois & _
")*(year(" & Adr & ")=" & Lannée & "))")

End Sub
'-------------------------------------------------


MichD
--------------------------------------------

michdenis

unread,
Feb 12, 2011, 7:43:16 AM2/12/11
to
|En fait, SP ce n'est pas du...mais c'est comme...;

***Ne crée pas un doute dans l'esprit des gens !
La seule différence entre sommeprod() et d'autres formules matricielles
c'est la validation de la formule qui ne requiert pas la combinaison des
touches Maj + Ctrl + Enter. Tout le reste du processus est le même.

;-)

merguez07

unread,
Feb 12, 2011, 8:42:01 AM2/12/11
to
ça répond exactement à ma demande. Je ne sais pas s'il y a un moyen
d'éviter la syntaxe complexe pour générer une chaine de caractère (est
on obligé de passer par evaluate?) mais en tout cas ça marche bien et
c'est rapide.

Merci


Le 12.02.2011 13:38, michdenis a écrit :
> Peut-être que tu préfères cette syntaxe :
>
> '-------------------------------------------------
> Sub test()
> Dim Adr As String
> Dim LeMois As Integer, Lannée As Integer
>
> LeMois = 2 ' Le mois et l'année que tu désires
> Lannée = 2011
>
> With Worksheets("Feuil1")

> Adr = .Name& "!"& .Range("J1:J"& .Range("J65536").End(xlUp).Row).Address


> End With
>
> 'Nombre de données tenant compte que tu mois

> x = Evaluate("SumProduct((month("& Adr& ")="& LeMois& ")*1)")


>
> 'Nombre de données tenant compte du mois et de l'année
> F = Evaluate("SumProduct((month("& Adr& ")="& LeMois& _

> ")*(year("& Adr& ")="& Lannée& "))")

Jacquouille

unread,
Feb 12, 2011, 8:43:24 AM2/12/11
to
C'était pertinemment ce que je disais en dernière ligne.
Quand on cite, on cite tout, pour pas induire les gens en erreur.-)

>>Donc SP travaille comme une matricielle, mais se valide du bout d'un
>>doigt.


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"michdenis" a écrit dans le message de groupe de discussion :
ij5v9s$ck4$1...@speranza.aioe.org...

michdenis

unread,
Feb 12, 2011, 9:15:32 AM2/12/11
to
| Je ne sais pas s'il y a un moyen d'�viter la syntaxe complexe
| pour g�n�rer une chaine de caract�re (est on oblig� de
| passer par evaluate?)

Voici d'autres variantes :

Si tu veux employer des variables et avoir le loisir de leur attribuer
des valeurs diff�rentes. "Evaluate" est requis.

Si ta plage de date a d�j� un "NOM" (plage nomm�e, insertion / nom / d�finir)
et sans possibilit� de variables, il y a ceci :

x = [SumProduct((month(toto)=2)*1)]


Sub test()

With Sheet1 ' Worksheets("Feuil1")
'Attribue le nom "toto" � la plage
.Range("J1:J" & .Range("J65536").End(xlUp).Row).Name = "toto"
End With

'La formule devient : Mois de f�vrier peu importe l'ann�e.
x = [SumProduct((month(toto)=2)*1)]

'Ou celle-ci : Mois de f�vrier et l'ann�e 2011
x = [SumProduct((month(toto)=2)*(year(toto)=2011))]

'Quoi que tu pourrais toujours utilis� des "NOMS" comme des variables

Dim M As Integer, An As Integer
M = 2
An = 2011

'Ces 2 noms sont invisibles via l'interface de calcul
ThisWorkbook.Names.Add "Lemois", M, False
ThisWorkbook.Names.Add "Lann�e", An, False

'Et les formules deviendraient :

'La formule devient : Mois de f�vrier peu importe l'ann�e.
x = [SumProduct((month(toto)=LeMois)*1)]

'Ou celle-ci : Mois de f�vrier et l'ann�e 2011
x = [SumProduct((month(toto)=LeMois)*(year(toto)=Lann�e))]

End Sub
'---------------------------------------------


MichD
--------------------------------------------

michdenis

unread,
Feb 12, 2011, 9:18:01 AM2/12/11
to
Désolé, je lis les messages dans une fenêtre restreinte et il
arrive que je ne vois (regarde) pas la fin des messages.

Mes excuses Jacquouille.


MichD
--------------------------------------------

merguez07

unread,
Feb 12, 2011, 11:29:18 AM2/12/11
to
Que dire si ce n'est : Génial


Un grand merci

Le 12.02.2011 15:15, michdenis a écrit :
> | Je ne sais pas s'il y a un moyen d'éviter la syntaxe complexe

> | pour générer une chaine de caractère (est on obligé de


> | passer par evaluate?)
>
> Voici d'autres variantes :
>
> Si tu veux employer des variables et avoir le loisir de leur attribuer

> des valeurs différentes. "Evaluate" est requis.
>
> Si ta plage de date a déjà un "NOM" (plage nommée, insertion / nom / définir)
> et sans possibilité de variables, il y a ceci :


>
> x = [SumProduct((month(toto)=2)*1)]
>
>
> Sub test()
>
> With Sheet1 ' Worksheets("Feuil1")

> 'Attribue le nom "toto" à la plage


> .Range("J1:J"& .Range("J65536").End(xlUp).Row).Name = "toto"
> End With
>

> 'La formule devient : Mois de février peu importe l'année.
> x = [SumProduct((month(toto)=2)*1)]
>
> 'Ou celle-ci : Mois de février et l'année 2011
> x = [SumProduct((month(toto)=2)*(year(toto)=2011))]
>
> 'Quoi que tu pourrais toujours utilisé des "NOMS" comme des variables


>
> Dim M As Integer, An As Integer
> M = 2
> An = 2011
>
> 'Ces 2 noms sont invisibles via l'interface de calcul
> ThisWorkbook.Names.Add "Lemois", M, False

> ThisWorkbook.Names.Add "Lannée", An, False
>
> 'Et les formules deviendraient :
>
> 'La formule devient : Mois de février peu importe l'année.
> x = [SumProduct((month(toto)=LeMois)*1)]
>
> 'Ou celle-ci : Mois de février et l'année 2011
> x = [SumProduct((month(toto)=LeMois)*(year(toto)=Lannée))]

merguez07

unread,
Feb 13, 2011, 2:35:47 AM2/13/11
to
par contre, l'utilisation des codes

ThisWorkbook.Names.Add "Lemois", M, False
ThisWorkbook.Names.Add "Lann�e", An, False

bloque le calcul dans presque toutes les autres cellules.
Je ne sais pas pourquoi

cordialement

merguez07

unread,
Feb 13, 2011, 4:53:48 AM2/13/11
to
bonjour à tous

je suis toujours sur mon pb de sommeprod en vba et je bloque à nouveau

je veux compter le nombre de dates contenues dans la plage DateAcompter
qui sont inférieur à la date contenue dans la variable LaDate

NbdeDateInférieur= Evaluate("SumProduct((" & DateCreationFE & " < " &
LaDate & ") * 1)")


Rien à faire j'ai toujours une erreur 2015

J'ai fait le test avec LaDate= 01.01.2010
DateCreation est une plage qui contient toujours des dates au format date

ça fait 3 heures que je bloque la dessus, au secours !


Le 13.02.2011 08:35, merguez07 a écrit :
> par contre, l'utilisation des codes
> ThisWorkbook.Names.Add "Lemois", M, False

> ThisWorkbook.Names.Add "Lannée", An, False

DanielCo

unread,
Feb 13, 2011, 6:07:55 AM2/13/11
to
Bonjour,
En supposant que DateCreationFE et LaDate soient des noms définis et
non des variables.
NbdeDateInférieur = Evaluate("SumProduct((DateCreationFE<LaDate)*1)")
Cordialement.
Daniel

merguez07

unread,
Feb 13, 2011, 8:30:52 AM2/13/11
to

Merci Daniel, Hᅵlas j'ai un pb avec les noms dᅵfinis c'est pourquoi je
prᅵfᅵre me rabattre sur les variables.

Lorsque j'utilise les noms dᅵfinis je ne sais pas pourquoi cela me
bloque le calcul des autres cellules alors qu'avec les variables je n'ai
aucun pb. Par contre je ne sais pas faire la comparaison de date avec
les variables. Il y a peut ᅵtre une formatage de date ᅵ faire avant (du
style inverser mois et jour pour un mise en forme amᅵricaine). Bref Je
nage en profondeur


Le 13.02.2011 12:07, DanielCo a ᅵcrit :
> Bonjour,
> En supposant que DateCreationFE et LaDate soient des noms dᅵfinis et non
> des variables.
> NbdeDateInfᅵrieur = Evaluate("SumProduct((DateCreationFE<LaDate)*1)")
> Cordialement.
> Daniel
>
>
>> bonjour ᅵ tous
>>
>> je suis toujours sur mon pb de sommeprod en vba et je bloque ᅵ nouveau


>>
>> je veux compter le nombre de dates contenues dans la plage

>> DateAcompter qui sont infᅵrieur ᅵ la date contenue dans la variable
>> LaDate
>>
>> NbdeDateInfᅵrieur= Evaluate("SumProduct((" & DateCreationFE & " < " &


>> LaDate & ") * 1)")
>>
>>

>> Rien ᅵ faire j'ai toujours une erreur 2015


>>
>> J'ai fait le test avec LaDate= 01.01.2010
>> DateCreation est une plage qui contient toujours des dates au format date
>>

>> ᅵa fait 3 heures que je bloque la dessus, au secours !
>>
>>
>> Le 13.02.2011 08:35, merguez07 a ᅵcrit :


>>> par contre, l'utilisation des codes
>>> ThisWorkbook.Names.Add "Lemois", M, False

>>> ThisWorkbook.Names.Add "Lannᅵe", An, False

michdenis

unread,
Feb 13, 2011, 9:02:08 AM2/13/11
to
A ) Il n'y a aucune raison que les "NOMS" ne fonctionnent pas...

B ) Si tu pr�f�res des variables : comme ceci :

Tu adaptes le nom de la feuille et de la plage de cellules, si tu as
des cellules vides dans la plage de cellules, elles vont jouer les
trouble-f�tes et tu vas devoir modifier la formule pour pouvoir
en tenir compte.

'-----------------------------------------
Sub test()

Dim LaDate As Date
Dim DatecreationFE As String

With Worksheets("Feuil1")
DatecreationFE = .Name & "!" & .Range("A1:A" & .Range("A65536").End(xlUp).Row).Address
End With

LaDate = CDate("01/03/11") 'Ou Date()

NbdeDateInf�rieur = Evaluate("SumProduct((" & DatecreationFE & "<" & LaDate * 1 & ")*1)")

End Sub
'-----------------------------------------

MichD

merguez07

unread,
Feb 13, 2011, 10:47:04 AM2/13/11
to
Salut MichD,

en fait les noms fonctionnent sur le cellule active mais bloque le
calcul sur les autres. je ne sais pas pourquoi , Toujours est il que
lorsque je retire le code de d�claration des noms le calcul des autres
cellules se fait.


Sinon ta demo ci dessous fonctionne � merveille. Je n'ai pas format� la
variable LaDate mais j'ai rajout� comme tu la fais la multiplication par
un de la variable LaDate. Je ne sais pas pourquoi il faut faire �a mais
si on le fait pas, force est de constater que �a marche pas.


Un grand merci


Le 13.02.2011 15:02, michdenis a �crit :


> A ) Il n'y a aucune raison que les "NOMS" ne fonctionnent pas...
>
> B ) Si tu pr�f�res des variables : comme ceci :
>
> Tu adaptes le nom de la feuille et de la plage de cellules, si tu as
> des cellules vides dans la plage de cellules, elles vont jouer les
> trouble-f�tes et tu vas devoir modifier la formule pour pouvoir
> en tenir compte.
>
> '-----------------------------------------
> Sub test()
>
> Dim LaDate As Date
> Dim DatecreationFE As String
>
> With Worksheets("Feuil1")

> DatecreationFE = .Name& "!"& .Range("A1:A"& .Range("A65536").End(xlUp).Row).Address


> End With
>
> LaDate = CDate("01/03/11") 'Ou Date()
>

> NbdeDateInf�rieur = Evaluate("SumProduct(("& DatecreationFE& "<"& LaDate * 1& ")*1)")
>
> End Sub
> '-----------------------------------------
>
> MichD

michdenis

unread,
Feb 13, 2011, 11:15:14 AM2/13/11
to

| en fait les noms fonctionnent sur le cellule active mais
| bloque le calcul sur les autres. je ne sais pas pourquoi

Je ne comprends pas ce que cela sous-tend. As-tu un petit exemple ?


MichD
--------------------------------------------

michdenis

unread,
Feb 13, 2011, 12:33:33 PM2/13/11
to
| j'ai rajouté comme tu la fais la multiplication par un de
| la variable LaDate. Je ne sais pas pourquoi il faut faire ça
| mais si on le fait pas, force est de constater que ça marche pas.

Suppose que tu veuilles écrire une formule pour dénombre le
nombre de cellules qui affichent la date : 17/2/11 dans la plage A1:A6

=Sommeprod((A1:A6=17/2/11)*1)
Si tu écris la formule comme ceci, Excel va te retourner zéro.

Pourquoi : Dans la barre des formules, sélectionnes 17/2/11 de la formule
et appuie sur la touche F9, il affichera l'évaluation qu'il fait de la chaîne de
caractères = 0,772727272727273

En fait, Excel n'a pas compris que c'était une date et il a divisé 17 par 2 et
le résultat par 11 d'où sa réponse : 0,772727272727273. En conséquence,
c'est normal qu'il retourne 0 comme solution à la formule !

Si tu prends la même formule que tu aménages de cette façon :
=Sommeprod((A1:A6="17/2/11"*1)*1)
En ajoutant des guillemets autour de la date, si tu arrêtais là, Excel interpréterait
cela comme était une chaîne de caractères sans plus. Si tu ajoutes une opération
mathématique sur cette chaîne de caractère, tu forces Excel à interpréter cette
information à l'interne et il "s'aperçoit" que c'est une date qu'il s'empresse de
retourne dans sa formule numérique. À la place de ="17/2/11"*1, j'aurais pu
choisir ="17/2/11"+0 , ="17/2/11"-0 pourvu que cela n'altère pas la valeur
numérique que représente la date aux fins de comparaison de la formule.

Un autre petit exemple de la dernière information.
Formate d'abord une cellule vide au format texte
Tape une date au hasard : 18/02/11
Dans une autre cellule, entre la formule suivante :
=Adresse de la cellule où tu viens de saisir la date * 1
OU
=Adresse de la cellule où tu viens de saisir la date + 0
et observes le résultat. ATTENTION : la cellule affichant
le résultat sera aussi au format Texte bien qu'il affiche
la valeur numérique de la date.

Ça, c'est le comportement normal d'Excel

Cette section de la formule : A1:A6 bien que celles-ci affichent des dates,
pour Excel cela représente une valeur numérique. C'est ce pourquoi, il
peut effectivement faire la comparaison entre les valeurs contenues
dans A1:A6 ET "17/2/11"*1

En vba, ce n'est pas vraiment différent, La propriété "Evaluate" de l'objet
application fait un travail similaire à la touche F9 lorsque qu'une chaîne
est sélectionnée dans la barre des formules.

Pour t'en convaincre, essaie ceci :

Sub Test()
Dim D As Date
D = Date
x = Evaluate("" & D & "")
x = 0,590909090909091
soit 13 divisé par 2 divisé par 11
End sub

Voilà!

merguez07

unread,
Feb 13, 2011, 2:19:22 PM2/13/11
to
Un petit cours personnalisé pour moi et un dimanche s'il vous plait.
Trop sympa.
Tu passes quand tu veux prendre l'apéro en Ardèche. tu seras bien reçu.

Merci

> x = Evaluate(""& D& "")

0 new messages