Explications et trucs^^ [VBA]

Explications et trucs^^ [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 26-05-2005 à 18:37:08    

salut, je voulais savoir a quoi sert "With" en VBA ? comment on l'utilise et pouquoi?
 
sinon, les underscore : _ servent bien a aller a la ligne ?
 
enfin, si quelqu'un pouvait me dechiffrer ceci, chaque etape, je comprends pas :(

Code :
  1. sFormula = "=SUMPRODUCT(" & _
  2. "--(B2:B" & iLastRow & ">=--""" & Format(date_debut, "yyyy/mm/dd" ) & """ )," & _
  3. "--(D2:D" & iLastRow & "<=--""" & Format(date_fin, "yyyy/mm/dd" ) & """ )," & _
  4. "--((E2:E" & iLastRow & "-C2:C" & iLastRow & " )>=--""00:01:00"" ))"
  5. .Offset(0, 6).Formula = sFormula
  6. .Offset(0, 6).NumberFormat = "#,##0"


 
merci :)


Message édité par atmakefka le 26-05-2005 à 18:38:35
Reply

Marsh Posté le 26-05-2005 à 18:37:08   

Reply

Marsh Posté le 26-05-2005 à 18:49:47    

• le With permet de faire appel a un objet sans le rappeler trop souvent. ex a la place de dire
'--
Form.Label1.Caption = ""
Form.Label2.Caption = ""
...
'On peut utiliser
With Form
   .Label1.Caption = ""
   .Label2.Caption = ""
End With
'--
 
 
• Oui
 
• Pour le reste, tu dois avoir une référence à une valeur 'iLastRow', mais la compréhension globale ...
je ne la maitrise pas. Si Alain passe par là ...  [:anathema]


Message édité par knakes le 26-05-2005 à 18:52:36

---------------
now : do nothing
Reply

Marsh Posté le 26-05-2005 à 18:59:03    

d'accord merci, je vais attendre Alain :)
enfin, esperer qu'il reponde ^_^

Reply

Marsh Posté le 27-05-2005 à 05:14:35    

J'y jette un oeil dès que je suis au boulot.
 
En attendant, il faudrait que tu vérifies tes messages privés de temps en temps...
 
Tu en as un qui est non lu depuis le 17/5...
Il n'est sûrement plus d'actualité mais bon...


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 27-05-2005 à 06:20:42    

je n'avais pas vu pour le PM :( désolé

Reply

Marsh Posté le 27-05-2005 à 08:52:08    

Il s'agit d'une fonction qui écrit une formule dans une cellule.
 
Avec les paramètres suivants:

iLastRow = 25
date_debut = CDate("01/01/2005" )
date_fin = CDate("31/12/2005" )


La formule fabriquée donne:

=SUMPRODUCT(--(B2:B25>=--"2005/01/01" );--(D2:D25<=--"2005/12/31" );--((E2:E25-C2:C25)>=--"00:01:00" ))


Evidemment, le programme ne tient pas compte de la langue d'interface de Excel et génère la formule en syntaxe anglaise.
 
Voici la définition de SUMPRODUCT:

Multiplies corresponding components in the given arrays, and returns the sum of those products.
 
Syntax
 
SUMPRODUCT(array1,array2,array3, ...)
 
Array1, array2, array3, ...   are 2 to 30 arrays whose components you want to multiply and then add.
 
· The array arguments must have the same dimensions. If they do not, SUMPRODUCT returns the #VALUE! error value.
· SUMPRODUCT treats array entries that are not numeric as if they were zeros.
 
The following formula multiplies all the components of the two arrays on the preceding worksheet and then adds the products ¾ that is, 3*2 + 4*7 + 8*6 + 6*7 + 1*5 + 9*3.
 
SUMPRODUCT({3,4;8,6;1,9}, {2,7;6,7;5,3}) equals 156
 
Remark
 
The preceding example returns the same result as the formula SUM(A1:B3*D1:E3) entered as an array. Using arrays provides a more general solution for doing operations similar to SUMPRODUCT. For example, you can calculate the sum of the squares of the elements in A1:B3 by using the formula SUM(A1:B3^2) entered as an array.


 
Ce qui me tracasse, ce sont les doubles tirets (moins).
Je n'en vois pas la raison.
En tout cas, Excel anglais accepte la formule sans broncher.
 
je continue à chercher car cette formule me titille.
Il semble fabriquer une array sur base de paramètres conditionnels.
J'ai encore jamais vu.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 27-05-2005 à 09:25:17    

merci ! :)

Reply

Marsh Posté le 27-05-2005 à 09:36:18    

Trouvé ça (merci Google)

Citation :

the -- converts the boolean value returned by the comparison to 0/1
(FALSE = 0; TRUE = 1)
It is a double minus


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 27-05-2005 à 10:17:14    

Suis pas certain mais je pense qu'il y a des moins moins en trop.
Ceux qui sont devant les dates.
Si tu as une possiblité de tester la formule sur des data réelles, ça m'intéresserait de la comprendre.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 27-05-2005 à 10:21:38    

Une meilleure explication ici:
http://www.mrexcel.com/board2/view [...] ght=coerce

Citation :

=SUMPRODUCT((LEFT(A2:A4,3)=C2))  
 
evaluates to {TRUE;TRUE;FALSE}  
 
...which is interesting, but useless for sumproduct, as sumproduct can only sum numeric values. so, we need to coerce the logicals to numerics. the basic method to do this is to perform a mathematical operation on the array, so any of:  
 
=SUMPRODUCT(--(LEFT(A2:A4,3)=C2))  
=SUMPRODUCT((LEFT(A2:A4,3)=C2)*1)  
=SUMPRODUCT((LEFT(A2:A4,3)=C2)+0)  
 
would do. the -- option is preferred by some as it is more efficient (albeit marginally so). after the coersion, the array is:  
 
{1;1;0}  
 
...which, as a numeric array, can be fed to the sumproduct to give the answer.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 27-05-2005 à 10:21:38   

Reply

Marsh Posté le 27-05-2005 à 18:31:23    

merci :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed