Comment additionner des cellules si d'autres cellules de la même ligne répondent
drine des iles
Messages postés42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006
-
20 sept. 2006 à 05:36
drine des iles
Messages postés42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006
-
26 sept. 2006 à 05:09
Bonjour,
dans la plage B9:H999
je voudrais faire une boucle qui teste chaque ligne . si les conditions spécifiées dans chaque ligne sont remplies alors on additionne les cellules en tête de ligne et on inscrit le total en B1001.
exemple:
si la cellule D9=condition1 et la cellule F9=condition2 et la cellule E9=condition3 et la cellule H9=condition4 alors je retiens la valeur de la cellule B9 pour l'addition finale.
ligne suivante
si la cellule D10=condition1 et la cellule F10=condition2 et la cellule E10=condition3 et la cellule H10=condition4 alors je retiens la valeur de la cellule B10 pour l'additionner à B9.
etc.
par contre, si l'une des conditions n'est pas remplie = je passe à la ligne suivante sans rien retenir à additionner.
Je n'arrive pas à écrire ce code, il y a toujours une variable ou un autre truc qui cloche !
quelqu'un peut-il m'aider ?
drine des iles
A voir également:
Comment additionner des cellules si d'autres cellules de la même ligne répondent
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 20 sept. 2006 à 07:24
Salut,
Dim i As Integer
Dim MaVal As Double
MaVal = 0
For i = 9 To 999
If Cells(i, 4) tacondition1 AND Cells(i, 6) tacondition2 AND _
Cells(i, 5) tacondition3 Cells(i, 8) tacondition4 Then
MaVal = MaVal + Cells(i, 2).Value
End If
Next i
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 20 sept. 2006 à 11:24
Selon la complexité de tes conditions, tu pourrais simplement écrire
une formule dans une autre colonne (i, par exemple) avec vérification
des 4 conditions.
drine des iles
Messages postés42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006 20 sept. 2006 à 23:13
Merci à tous les 2 de m'avoir répondu.
Tout d'abord, pour répondre MPi, j'ai pensé effectivement à la solution "fonction SI" mais j'ai trop d'arguments à traiter, excel ne gère pas plus de 30 conditions (or j'ai 999 lignes à tester).
j'ai donc pris le code du "chevalier" (cf son portrait !) que j'ai adapté à mes conditions et ça ne marche toujours pas. Par contre il n'y a aucun message d'erreur ou de bogue.
Je ne comprend pas pourquoi rien ne s'inscrit dans la cells (1001,2) ?
Pouvez-vous m'aider ?
Sub ventil()
Dim i As Integer
Dim MaVal As Double
Dim CH As String
Dim payé As String
Dim m As Double
m = InputBox("Entrez le numéro du mois à éditer")
MaVal = 0
For i = 9 To 999If Cells(i, 4) m And Cells(i, 6) CH And _ Cells(i, 5) CH And Cells(i, 8) payé Then
MaVal = MaVal + Cells(i, 2).Value
End If
Next i
cells(1001, 2).Value = MaVal
End Sub
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 20 sept. 2006 à 23:22
Salut,
essaie comme ceci (et vérifie ce que je t'ai mis en commentaires) :
Sub ventil()
Dim i As Integer
Dim MaVal As Double
Dim CH As String
Dim payé As String
Dim m As Byte ' ***(pas Double)
' *** payé est déclaré, mais ne possède aucune affectation de caractères !!
' *** idem pour CH
m = InputBox("Entrez le numéro du mois à éditer")
MaVal = 0
For i = 9 To 999
If Cstr(Cells(i, 4).Value) = Cstr(m) And _
Cstr(Cells(i, 6).Value) = cStr(CH) And _
Cstr(Cells(i, 5).Value) = Cstr(CH) And _
Cstr(Cells(i, 8).Value) = payé Then
MaVal = MaVal + CDbl(Cells(i, 2).Value)
End If
Next i
cells(1001, 2).Value = MaVal
End Sub
<small>Coloration syntaxique automatique</small>
@++
<hr width="100%" size="2" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
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 20 sept. 2006 à 23:56
L'important, ce n'est pas le nombre de lignes mais le nombre de conditions que tu as à chaque ligne.
D'après ce que je comprends, sur la ligne 9, tu veux vérifier les
valeurs de D9, E9, F9 et H9 ,donc 4 conditions. Puis sur la ligne 10,
tu veux vérifier D10, E10, F10 et H10, donc 4 autres conditions.
Donc, avec le genre de formule que je t'ai inscrite, tu n'as qu'à la
créer une fois sur la ligne 9, dans une colonne vierge, puis la copier
sur les autres lignes en-dessous. Si les 4 conditions sont vérifiées,
ça inscrit la valeur de B, sinon 0. Tu pourras donc faire le total de
cette colonne aisément.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 21 sept. 2006 à 00:00
Salut MPi,
je confirme ce que tu dis, il suffit de coller ta formule sur la première ligne (la 9ème), de la sélectionnée, et de faire glisser la sélection jusqu'à la ligne 999.
Les valeurs s'incrémenteront par rapport à leurs positions dans les lignes.
@++
<hr width="100%" size="2" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
drine des iles
Messages postés42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006 21 sept. 2006 à 00:14
Oui je suis d'accord avec vous. j'ai simplifié la formule pour qu'elle soit plus facileà expliquer mais en fait j'ai des conditions assez complexe à gérer. J'aurais dû vous le dire dés le début pour ne pas vous faire perdre de temps. Sorry
condition 1 = il faut que le mois inscrit dans la cellule corresponde au mois inscrit dans la input box
condition 2 = Ch
condtion 3 = si la cellule est vide, se rendre dans la cellule voisine à gauche (ça je sait faire avec les réfénce offset...) pour voir si la condition se réalise
condition 4= payé
puis je recommence les mêmes conditions en changeant Ch par ES, puis je recommence en changeant ES par VR et enfin, en changeant VR par PRL.
et ceci dans se répeter dans 6 listes différentes pour au final ne donner qu'un seul montant.
mon souci est que je n'arrive pas à déclarer les variables comme il faut.
D'ailleurs merci Mortalino, tu m'a montré la variable byte que je n'avais jamais vu.
Malheureusemen ta dernière proposition de code ne fonctionne pas non plus.
Je ne vois vraiment pas où est le problème ? Vous qui étes plus expérimentés le trouverez certainement maitenant que je vous ai tout détaillé .
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 21 sept. 2006 à 00:41
Le problème ne vient pas du mois donc, mais vient, je pense de tes conditions.
Par exemple, dans le code que je t'ai mis (celui coloré), tu as donc CH et payé comme variables, mais techniquement, elles sont vides.
Et d'après tes explications, CH est une condition où je sais pas raiment quoi.
En fait, SI dans tes cellules, c'est marqué CH et payé, tel quel, dans ce cas là, pas besoins de variables dans ton code mais d'une chaine de caractères :
Sub ventil()
Dim i As Integer
Dim MaVal As Double
' *** variables ici supprimés (CH et payé)
Dim m As Byte ' ***(pas Double)
' *** payé est déclaré, mais ne possède aucune affectation de caractères !!
' *** idem pour CH
m = InputBox("Entrez le numéro du mois à éditer")
MaVal = 0
For i = 9 To 999
If Cstr(Cells(i, 4).Value) = m And _
Cstr(Cells(i, 6).Value) = "CH" And _ ' *** CH est à mettre entre ""
Cstr(Cells(i, 5).Value) = "CH" And _ ' *** CH est à mettre entre ""
Cstr(Cells(i, 8).Value) = "payé" Then ' *** payé est à mettre entre ""
MaVal = MaVal + CDbl(Cells(i, 2).Value)
End If
Next i
cells(1001, 2).Value = MaVal
End Sub
<small>Coloration syntaxique automatique</small>
@++
<hr width="100%" size="2" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
drine des iles
Messages postés42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006 21 sept. 2006 à 00:58
Désolée ça ne fonctionne toujours pas. Par contre cette fois il me donne toutes ces lignes en surlignés jaune pour m'indiquer que l'erreur est par là. J'ai essayé quelques modifications "à l'instinct" mais là je suis dépassée. Je ne comprend toujours pas ou ça coince !
If CStr(Cells(i, 4).Value) = m And _
CStr(Cells(i, 6).Value) = "CH" And _
CStr(Cells(i, 5).Value) = "CH" And _
CStr(Cells(i, 8).Value) = "payé" Then
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 21 sept. 2006 à 01:05
Supprime mes commentaires à droite des _ (underscore)
Sans toucher la mise en forme du code (un espace de moins et c'est foutu).
Je veins de faire le test, un copier coller du code suivant sera plus facile :
Sub ventil()
Dim i As Integer
Dim MaVal As Double
' *** variables ici supprimés (CH et payé)
Dim m As Byte ' ***(pas Double)
' *** payé est déclaré, mais ne possède aucune affectation de caractères !!
' *** idem pour CH
m = InputBox("Entrez le numéro du mois à éditer")
MaVal = 0
For i = 9 To 999
If Cstr(Cells(i, 4).Value) = m And _
Cstr(Cells(i, 6).Value) = "CH" And _
Cstr(Cells(i, 5).Value) = "CH" And _
Cstr(Cells(i, 8).Value) = "payé" Then
MaVal = MaVal + CDbl(Cells(i, 2).Value)
End If
Next i
cells(1001, 2).Value = MaVal
End Sub
<small>Coloration syntaxique automatique</small>
@++
<hr width="100%" size="2" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 21 sept. 2006 à 01:25
Là franchement je sèche et faut que j'aille me coucher (je me lève à 5h) mais en cas, mets moi ce qui à dans tes cellules exemple :
(écrie en courier New pour l'espacement des caractères) :
Colonne A Colonne B Colonne C
L1 1 Bonjour =NB.SI(...)
L2 2 Au revoir =mainntenant()
L3 3 Bonjour =autres formules
je regarde ça demain matin
@++
<hr width="100%" size="2" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
1070906M,
50 ? ,
15,
07,
CH,
,
à déposer le 30 sept.,
voici ls 3 1ères lignes du tableau. cette même liste se reproduit 6 fois (en tant qu'association nous sommes larges avec les adhérents et nous proposons jusqu'à 6 échéances). Voilà pourquoi au bout d'un moment , il est difficile de savoir qui a payé à quel moment et par quel moyen.
si tu peux m'aider dans la macro ça résoudra mon problème : sur le mois x, combien de chéques ont été porté en banque, et pour quel montant (idem pour les ES, CB...) ?
drine des iles
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 22 sept. 2006 à 16:19
Salut Drine,
désolé, je ne vois pas ce que tu veux dire avec tes cellules dans une liste.
Si chaque cellule possède des coordonnées, il ne devrait pas y avoir de problèmes, mais j'ai déjà rencontrer des difficultés, surtout avec les dates, pour comparer entre le format excel et le format vb, qques fois c'est difficile.
@++
<hr width="100%" size="2" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>