cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 4 févr. 2008 à 12:21
En fait, je voulais parler de SOMME.SI, mais bon, comme il y a 2 conditions SOMMEPROD est ^référable, ou encore une formula matricielle.
ex:
SOMMEPROD((A1:A1001)*(C1:C100<>0))
C'est tout de même plus simple à mettre en place que VBA
Sinon, dans ton code, tu dois ajouter la condition de la colonne C
For Each cellule In Range("Nom") If cellule.Value 1 AND cellule.Offset(0, 2) <> 0 Then Compteur Compteur + 1
Next
MsgBox Compteur
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
clea2809
Messages postés6Date d'inscriptionlundi 4 février 2008StatutMembreDernière intervention 5 février 2008 4 févr. 2008 à 12:51
Je viens de faire les modifs et j'ai une autre question (ci-dessous extrait du code)
La première colonne va fluctuer au fur et à mesure (1,2,3..30)
Je souhaite récuperer dans des cellules d'une autre feuille la valeur des compteurs
comment puis je faire ?
Le code ci-dessous marche pour la valeur 1 mais je veux don le faire jusqu'à 30 sans recopier autant de fois mon code (je ne sais pas si c'est très clair ??)
For Each cellule In Range("Num") If cellule.Value 1 And cellule.Offset(0, 7) <> 0 Then ComptDeb ComptDeb + 1 If cellule.Value 1 And cellule.Offset(0, 8) <> 0 Then ComptCre ComptCre + 1
Next
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 4 févr. 2008 à 16:08
Salut,
suivant le reglement de ce site on ne pose qu'une question a la fois, donc tu aurais du pauser ta question dans un nouveau
poste. De plus tu n'es pas tout a fait dans le bon theme. Tu aurais du etre ici : [infomsg.aspx Thèmes] / [infomsgf_VISUAL-BASIC_1.aspx Visual Basic 6] / [infomsgt_LANGAGES-DERIVES_287.aspx Langages dérivés] / [infomsgt_VBA_244.aspx VBA]
ceci etant dit, effectivement tu n'es pas tres claire mais voila "peut etre" la solution :
For Each cellule In Range("Num")
For n = 1 to 30 If cellule.Value n And cellule.Offset(0, 7) <> 0 Then ComptDeb ComptDeb + 1 If cellule.Value n And cellule.Offset(0, 8) <> 0 Then ComptCre ComptCre + 1
Next n
Next
clea2809
Messages postés6Date d'inscriptionlundi 4 février 2008StatutMembreDernière intervention 5 février 2008 4 févr. 2008 à 16:50
Désolé je saurai pour la prochaine fois.
Etant débutant je pensai qu'il fallait poser la question dans ce forum.
Si je comprends bien ta réponse je vais en effet boucler par contre je vais toujours incrémenter le même compteur ?
Pour essayer de faire plus clair :
au premier passage je teste la valeur 1 dans la première colonne et je vérifie que dans l'autre (offset 0,7) je suis différent de zéro et si oui j'incrémente mon compteur.
idem pour la deuxième colonne (offset (0,8)
mais il faut aussi que je teste la valeur 2 puis 3 etc et que j'incrémente un compteur.
Le résultat du compteur va alimenter une cellule dans une autre page Excel.
Donc les x compteurs iront alimenter x cellules
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 4 févr. 2008 à 17:28
...
c'est toujours pas claire.
il faut aussi que je teste la valeur 2 puis 3 etc et que j'incrémente un compteur.
c'est quoi ces valeurs 2 puis 3 etc ou ce trouve t'elles ? dans des celules ? leur direction : ligne, colonne ?
Le résultat du compteur va alimenter une cellule dans une autre page Excel.
Donc les x compteurs iront alimenter x cellules
Dans ton code je ne vois pas le moment ou tu "alimentes" tes celules la aussi precise un peu.
Autrement dit a quel moment consideres-tu qu'il faut ecrire la valeur des compteurs dans les celules de l'autre feuille?
et sous quelle condition(s)
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 4 févr. 2008 à 23:09
Si ton problème est aussi "simple" qu'il le semble, c'est-à-dire des numéros de 1 à 30, tu pourrais créer un tableau de 31 éléments (0 à 30)
Dim Tablo(30) As Double 'j'imagine que Double devrait être correct...
For Each cellule In Range("Num")
Tablo(cellule.value) = Tablo(cellule.value) + cellule.Offset(0, 7)
Next
Tablo(cellule.value) sert à inscrire la valeur dans cet item du tableau. S'il y a 2 inscrit dans cellule.value, Tablo(2) sera incrémenté...etc...
Ensuite, tu lis ton tableau (de 1 à 30) et tu inscris les données dans l'autre feuille.
Comme tu dois manipuler les crédits et débits, tu pourrais créer 2 tableaux et incrémenter un ou l'autre selon la valeur en Offset(0, 7) ou Offset(0, 8)
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
clea2809
Messages postés6Date d'inscriptionlundi 4 février 2008StatutMembreDernière intervention 5 février 2008 5 févr. 2008 à 09:44
Réponse à bigfish :
J'espère que cette fois ci ce sera clair.
exemple de mon tableau Excel (num correspondant à un numéro de relevé de compte, donc sur un même relevé (par ex le 1, j'ai 3 opérations de débit et 1 opération de crédit).
<col style=\"width: 48pt;\" width=\"64\" /><col style=\"width: 49pt;\" width=\"65\" /><col style=\"width: 57pt;\" width=\"76\" />----
Num, Débit, Crédit, ----
1, 130,00 ?, , ----
1, 45,00 ?, , ----
1, , 264,00 ?, ----
1, 24,00 ?, , ----
2, , 1 450,00 ?, ----
2, 287,00 ?, , ----
2, 29,00 ?, , ----
2, 98,00 ?, , ----
3, 74,00 ?, , ----
3, , 110,00 ?
Ce que je souhaite c'est compter le nombre d'opérations de débit et de crédit pour le relevé 1 puis pour le relevé 2 etc.. Ce qui donnera le tableau ci-dessous (qui se trouve dans un autre onglet Excel).
<col style=\"width: 21pt;\" width=\"28\" /><col />----
Num, <table x=\"\" style=\"border-collapse: collapse;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" height=\"141\" width=\"237\"><col style=\"width: 21pt;\" width=\"28\" /><col style=\"width: 43pt;\" width=\"57\" /><col style=\"width: 15pt;\" width=\"20\" /><col style=\"width: 50pt;\" width=\"66\" /><col style=\"width: 15pt;\" width=\"20\" />----
Num, Débits, Nb, Crédits, Nb, ----
1, 199,00 ?, 3, 264,00 ?, 1, ----
2, 414,00 ?, 3, 1 450,00 ?, 1, ----
3, 74,00 ?, 1, 110,00 ?, 1
<tr style="height: 11.25pt;" height="15"></tr></table>Je veux donc lorsque j'execute mon code qu'il aille récupérer tous ces totaux et alimenter mon tableau.
Pour MPi :
Je vais essayer ton idée.
Je ne sais pas trop comment marche les tableaux mais tes explications ont l'air claires et tu as très bien compris mon besoin.