Sommes multi-conditionnelle

Sommes multi-conditionnelle - VB/VBA/VBS - Programmation

Marsh Posté le 20-10-2008 à 09:41:16    

Bonjour,
 
Je suis en première anné de BTS informatique, n'ayant jamais fait de VBA et mon entreprise m'en ayant donner a faire, je reste un peu coincé sur quelque point.
 
Mon classeur se compose de plusieurs feuille, seul 2 m'intéresse pour le calcul de la formule sur laquelle je bloque.
La première feuille un un simple tableau avec 3 colonnes qui m'intéresse, la deuxième feuille doit reprendre ce tableau et en faire un bilan afin de l'analyser.
Voici mon tableau :
_____________________________
|    Activité   |   Valeurs   |   type   |
|---------------------------------|
|       A1          |      20      |     A      |
|       A1          |      10      |     B      |
|       A1          |      2        |     C      |
|       A2          |       0       |     D      |
|       A1          |      50      |     A      |
|___________|________|_______|
 
Je souhaite calculer le nombre de "Type" qui sont egal a A pour "l'activité" A1(sachant que celle-ci n'est pas toujours A1)
Je souhaite aussi additionner les "Valeurs" correspondant a chaque Type qui ont A1 pour activité (adition des "Valeurs" du nombre trouver précédament)
Ce qui donne par exemple pour l'activité A1 :  
Il y a 2 Type A pour cette activité et 70valeurs de type A(50+20)
 
Voici la formule que j'avais entrer, j'ai surement fait une erreur d'ecriture, mais je ne voit pas laquel.

Code :
  1. Range("J5" ).FormulaR1C1 = "=SUM(IF('" & Sheets(a).Name & "'!E4:E500="A1",IF('" & Sheets(a).Name & "'!I4:I500="A",1,0),0))"


 
Merci d'avance


Message édité par darknewbie31 le 22-10-2008 à 08:41:37
Reply

Marsh Posté le 20-10-2008 à 09:41:16   

Reply

Marsh Posté le 21-10-2008 à 08:58:26    

Personne n'aurais d'idée pour m'aider ?

Reply

Marsh Posté le 22-10-2008 à 08:35:27    

En faite le principe serait bon, la formule comporterais juste une erreure et planterais le code, mais je ne voit pas d'ou ca peux venir.

Code :
  1. Range("J5" ).FormulaR1C1 = "=SUM(IF('" & Sheets(a).Name & "'!E4:E500="A1",IF('" & Sheets(a).Name & "'!I4:I500="A",1,0),0))"

Reply

Marsh Posté le 22-10-2008 à 10:03:08    

Bonjour,
 
    Range("j5" ).Select
     
    formi = "=SUMPRODUCT(((e1:e5)= ""A1"" )*((i1:i5)=""A"" ))"
    ActiveCell.Formula = formi
 
    Range("j6" ).Select
    formi = "=SUMPRODUCT(((e1:e5)= ""A1"" )*((i1:i5)=""A"" )* (b1:b5))"
    ActiveCell.Formula = formi

Reply

Marsh Posté le 27-10-2008 à 14:12:37    

Merci, cela marche très bien, cependant j'ai une petite question,
Je désir, dans un autre tableau reprendre cette formule et rajouter une argument qui sélectionnerais uniquement la valeurs correspondant au mois de janvier de l'année en cours.
je pensais a :

Code :
  1. =SOMMEPROD((('Accidents 2004'!$A$4:$A$500)="01/01/2008" )*(('Accidents 2004'!$E$4:$E$500)= "Escale" )*(('Accidents 2004'!$I$4:$I$500)="TO" ))


Mais aucun résultat, aurais-tu une idée ?

Reply

Marsh Posté le 27-10-2008 à 17:04:14    

Bonsoir,
essayer  avec DATEVAL("01/01/2008" )

Reply

Marsh Posté le 28-10-2008 à 11:17:41    

En faite, je souhaite afficher la mois suivant par rapport a la cellule qui est a gauche.
Pour cela j'ai trouver la fonction "mois.decaler" mais elle ne semble pas marcher dans les macro.
 
Pour ensuite utiliser la date de cette cellule dans ma formule pour le dateval.
 
Voila un petit exemple :
+---------------------------+
| Janvier 2008 | Fevrier 2008 |
|----------------------------|
| Valeur A       | Valeur B       |
+----------------------------+
 
La valeur A est :

Code :
  1. =SOMMEPROD((('Accidents 2004'!$A$4:$A$500)="Janvier 2008" )*(('Accidents 2004'!$E$4:$E$500)= "Escale" )*(('Accidents 2004'!$I$4:$I$500)="TO" ))


 
Idem pour la valeur B mais pour fevrier 2008.

Reply

Marsh Posté le 28-10-2008 à 18:34:39    

Bonsoir,
je n'ai pas tout compris, mais voici une formule qui permet de générer tes dates.  
 
=DATE(ANNEE(A1);MOIS(A1)+1;JOUR(A1))
A mettre en B1 puis étendre, le format des cellules de la ligne 1 devant être un format date personnalisé:  mmmm aaaa
ton somme....devient:
=SOMMEPROD((('Accidents 2004'!$A$4:$A$500)=A1 )*(('Accidents 2004'!$E$4:$E$500)= "Escale" )*(('Accidents 2004'!$I$4:$I$500)="TO" ))

Message cité 1 fois
Message édité par seniorpapou le 28-10-2008 à 18:37:50
Reply

Marsh Posté le 30-10-2008 à 14:12:33    

seniorpapou a écrit :


=SOMMEPROD((('Accidents 2004'!$A$4:$A$500)=A1 )*(('Accidents 2004'!$E$4:$E$500)= "Escale" )*(('Accidents 2004'!$I$4:$I$500)="TO" ))


Cette formule me renvoi un "#nom?" je ne comprend pas.
Alors que si je rentre la formule moi même (au lieu de le faire en macro) elle marche.
 
En revanche, quand on met =A1 ca veut dire la même date que en A1, or il me faudrait seulement le même mois et la même année, dois-je utiliser une double égalité ? (> et < ) ou y a t-il une aiutre astuce plus simple ?


Message édité par darknewbie31 le 30-10-2008 à 14:20:58
Reply

Marsh Posté le 30-10-2008 à 17:54:00    

=SOMMEPROD((format(('Accidents 2004'!$A$4:$A$500);"mmmm aaaa" )=format(A1;"mmmm aaaa" ) )*(('Accidents 2004'!$E$4:$E$500)= "Escale" )*(('Accidents 2004'!$I$4:$I$500)="TO" ))
 
sans garantie pace pas testé


Message édité par seniorpapou le 30-10-2008 à 17:54:29
Reply

Marsh Posté le 30-10-2008 à 17:54:00   

Reply

Marsh Posté le 31-10-2008 à 08:40:43    

Ne semble pas marcher, renvoie un "#nom?", decidement je comprend vraiment pas :p
Je vais me pencher sur cette formule, qui me semble idéale pour mon problème, il doit forcement y avoir une solution.

Reply

Marsh Posté le 31-10-2008 à 09:07:24    

bonjour,
peux-tu mettre un "échantillon" de ton xls sur cjoint.com, ce qui me permettra de tester dans des conditions proches de la réalité?
Merci
 
désolé, format n'est pas possible
 
=SOMMEPROD((ANNEE(($A$4:$A$500) )=ANNEE(A1 ) )*(MOIS(($A$4:$A$500) )=MOIS(A1 ) )*(($E$4:$E$500)= "Escale" )*(($I$4:$I$500)="TO" ))
 
tu ajoutes la référence à ta feuille que j'ai supprimée pour tester


Message édité par seniorpapou le 31-10-2008 à 09:20:58
Reply

Marsh Posté le 31-10-2008 à 11:13:27    

Ta formule renvoi a nouveau un "#nom?" mais si je tape entrer sous excel, elle est revalidé et cette fois elle marche.
Y-aurait-il un problème de "comprehension" entre ma macro et excel ?
 
Je ne peux malheuresement pas fournir l'echantillion a cause des restriction reseaux, en revanche, voici un extrait de ma macro :

Code :
  1. Sub Nwmnth()
  2. 'On selectionne le mois a metre en archive
  3. Worksheets("12 mois" ).Activate
  4. Range("AA3" ).Value = "=SOMMEPROD((ANNEE(('Accidents 2008'!$A$4:$A$500))=ANNEE(AA1))*(MOIS(('Accidents 2008'!$A$4:$A$500))=MOIS(AA1))*(('Accidents 2008'!$E$4:$E$500)=""Pays de la Loire"" )*(('Accidents 2008'!$I$4:$I$500)=""TO"" ))"
  5. Sheets(1).Select
  6. End Sub


 
Edit : J'ai trouver, en faite il me faut mettre toute mes fonctions en anglais (Mois=>Month etc ...)
Mais je ne comprend pas pourquoi en francais cela ne marche pas dans ma macro.


Message édité par darknewbie31 le 31-10-2008 à 13:02:42
Reply

Marsh Posté le 31-10-2008 à 13:11:50    

les mystères de l'informatique......
l'essentiel étant de ne pas l'oublier  
@+

Reply

Sujets relatifs:

Leave a Replay

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