KMIKZ
Messages postés21Date d'inscriptionmardi 12 octobre 2004StatutMembreDernière intervention26 avril 2008
-
25 juil. 2007 à 14:28
Ziragora Alphonse
Messages postés1Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention 3 août 2007
-
3 août 2007 à 11:41
Bonjour à tous voici mon petit bout de programme qui me pose problème :
Range("A1").Activate If ActiveCell.Offset(0, 2).Value 6 And ActiveCell.Offset(0, 3).Value "C" Then
y = y + 1
x = x + totaltActiveCell.Offset(0, 1).Value
End If
J'ai un tableau dans lequel je recherche dans la colonne C la valeur 6 et dans la colonne D la lettre "C"
Je compte toutes les lignes où la combinaison "6C" apparait (y=y+1)
Et je voudrais maintenant calculer la somme des cases B lorsque j'ai la combinaison "6C"
Mais la macro se bloque sur la ligne en rouge. Quelqu'un a une idée ???
Je voulais que pour la première ligne "6C" rencontrée il mémorise la valeur de la case B (x) pour l'additionner à la valeur de la case B de la seconde ligne "6C" rencontrée et ainsi de suite.
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 25 juil. 2007 à 15:20
Et pourquoi ne pas créer une colonne E concaténant les colonnes C et D ?
E: =C1&D1 etc etc ...
Plus qu'à faire dans une celulle à part un =NB.Si(E:E;"6C") pour avoir le nb d'occurence, et un =SOMME.SI(E:E;"6C";"B:B") pour avoir la somme des cases B quand il y a 6C dans leurs lignes ?
A moins qu'il ne faille absolument le faire en VBA ? Et même dans ce cas, à moins que tu n'es pas le choix, je ne m'embêterais pas avec les Offset, je ferais plutôt une boucle :
Somme = 0
For i = 1 to 10 'Je prends 10 lignes, mais tu fais le nb que tu veux bien sûr ^^ if cells(i,3).value "6" AND cells(i,4).value"C" then
somme = somme + cells(i,2).value
end if
Next i
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 26 juil. 2007 à 00:49
Ou tu pourrais y aller avec la fonction SOMMEPROD
SOMMEPROD((C2:C206)*(D2:D20="C")*(B2:B20))
L'important, c'est que tous les Range soient identiques, c'est-à-dire de la ligne 2 à 20 dans mon exemple. Les premières séries de parenthèses sont les critères. La dernière est la plage sur laquelle tu veux faire la somme. Tu peux ajouter d'autres critères au besoin.
C'est une formule qui est gourmande, donc à utiliser avec parcimonie
MPi
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 26 juil. 2007 à 11:03
Si tu tiens à passer par VBA, utilise des conditions avec
IsNumeric (voir l'aide)avant de faire des additions.
Tes nombres, si ce sont tous des nombres... sont peut-être au format texte ou encore seulement quelques-uns d'entre eux.
Ziragora Alphonse
Messages postés1Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention 3 août 2007 3 août 2007 à 11:41
Bonjour,
Tout en respectant l'utilisation de "Offset", je trouve qu'il y a une solution. Si l'on pense que ton programme est complet, il ne donnera pas toutes les valeurs à stocker dans x. J'ai rajouter les lignes en rouge et ça marche bien.... Il faudra peut-être définir les variables "FinTableau" et "Rg" si ton module contient l'instruction "Option Explicit". Sinon si l'erreur continue à apparaître à la ligne en rose, il faudra penser à vérifier le format des cellules de la colonne B(Si le format est text l'erreur sera évidente).Tu peux également mettre les valeurs de x dans la colonne A en insérant la ligne suivante après la rose: ActiveCell.Value = x
FinTableau = Range("C65536").End(xlUp).Row
For Each Rg In Range(Cells(1, 1), Cells(1, 1).Offset(FinTableau, 0))
Rg.Activate If ActiveCell.Offset(0, 2).Value 6 And ActiveCell.Offset(0, 3).Value "C" Then
Y = Y + 1
x = x + ActiveCell.Offset(0, 1).Value
End If
Next