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
drine des iles
Messages postés42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006 23 sept. 2006 à 01:04
C'est une liste qui sert à extraire des tableaux en croisé dynamique . C'est donc un outil spécial d'excel;
peut-être cette liste bloque -t-elle certaine fonctionnalité VBA ?
drine des iles
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 23 sept. 2006 à 02:23
Peut-être, je suis pas un pro dans les TCD mais si, avec l'arborescence ouverte, les cellules ont bien une adresse (ex : D5), beh il ne devrait pas y avoir de problèmes.
Il faut travailler avec les données dans le tableur, si ta liste est un module spécial, là effectivement ça ne marchera pas.
@++
<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 23 sept. 2006 à 18:02
Bonjour Mortalino
J'ai réécrit le code comme ci-dessous et j'obtient un résultat.
Le problème c'est que ça affiche le montant total de toute les cellules (i,3) sans tenir compte des conditions préalablement énoncées.
Si
Sub ventil_encaiss()
Dim mois As Variant
Dim maval As Double
Dim CH As String
Dim payé As String
Dim i As Integer
mois = InputBox("Entrez le numéro du mois à éditer.")
maval = 0
For i = 9 To 999 If Cells(i, 5) mois And Cells(i, 9) payé And _ Cells(i, 6) CH And Cells(i, 7) "" Then
EndIf '(si '(si je place le next i ou le total maval avant le end if ça ne marche plus !)
Next i
Range("B1001") = maval + Cells(i, 3).Value
End Sub
drine des iles
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 23 sept. 2006 à 18:39
For i = 9 To 999
If Cells(i, 5) mois And Cells(i, 9) "payé" And _
Cells(i, 6) "CH" And Cells(i, 7) "" Then
maval = maval + Cells(i, 3)
End If
Next i
Range("B1001") = maval
End Sub
Attention de mettre des guillemets autour des valeurs de texte qui ne sont pas des variables. Si mois est une variable, il n'est pas nécessaire d'en mettre pusiqu'elle les contient par défaut.
Attention aussi à la casse: CH est différent de ch ou Ch
MPi
Vous n’avez pas trouvé la réponse que vous recherchez ?
drine des iles
Messages postés42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006 23 sept. 2006 à 19:31
effectivement j'ai oublié les ". Mais ça ne permet pas de prendre en compte les conditions que j'ennonce ! la boucle continue d'additionner toutes les cellules de la colonne sans tenir compte des conditions annoncées !
drine des iles
Messages postés42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006 23 sept. 2006 à 22:53
Je crois que j'ai une piste mais je ne sais pas comment écrire le code.
1/ j'ai testé toutes les conditions comme tu me l'as dit et tout à l'air bon.
2/ j'en déduit qu'il tient donc compte des conditions émises au moment où il les lit
3/ le problème viendrait donc du fait que je ne lui ai pas dit ce qu'il faut faire si la condition n'est pas réalisée.
4/ donc, ne sachant pas quoi faire , condition réalisée ou pas il passe à la ligne suivante et additionne toutes les cells (i,3) sans sourciller !
5/ donc, j'ai essayé de lui écrire que si cells (i,5)= mois n'est pas VRAI il faut directement passer à la ligne suivante .
puis, si condition 1 est VRAI mais condition 2 est fausse, alors il faut passer à la ligne suivante etc.
6 / comment lui dire que si et seulement si toutes les conditions sont remplies il peut additionner les valeurs correspondantes ?
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 23 sept. 2006 à 23:01
Oui, confère mon code page 1 :
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
MaVal que ne prend la valeur que si la condition est vrai.
En gros, si tes 4 conditions sont vrais, MaVal égal lui même (donc 0 la première fois) + la valeur de la cellule Bi (i vaut pour 9 à 999).
Si les conditions ne sont pas vraies, pas il passe à la ligne suivante
@++
<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 23 sept. 2006 à 23:27
effectivement j'avais essayé ce code que tu m'avais déjà donné.
Il y a un problème au moment d'afficher le total.
si je laisse maval = maval+ CDbl(Cells(i, 3).Value) avant l'instruction end if : il ne m'affiche aucun montant.
si je place maval = maval+ CDbl(Cells(i, 3).Value) aprés end if il me donne le montant total de toute la colone sans tenir compte des conditions !!!!
c'est à devenir FOU !!!
Sub ventil()Dim m As Variant
Dim maval As Double
Dim CH As String
Dim payé As String
Dim i As Long
m = InputBox("Entrez le numéro du mois à éditer.Exemple : 05 (mai)")
maval = 0
For i = 9 To 999
If CStr(Cells(i, 5).Value) = m And _
CStr(Cells(i, 7).Value) = "CH" And _
CStr(Cells(i, 6).Value) = "CH" And _
CStr(Cells(i, 9).Value) = "payé" Then
' maval = maval + CDbl(Cells(i, 3).Value)
End If
maval = maval + CDbl(Cells(i, 3).Value)
Next i
Range("b1001").Value = maval
End Sub
drine des iles
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 23 sept. 2006 à 23:55
Beh en fait, on en revient toujours au même problème : tes conditions ne se vérifient pas.
Sache, que lorsque tu testes comme tout à l'heure (avec les message box), tu as une valeur qui apparait, je reprends mon test :
MsgBox Cells(i, 5).Value & " - " & mois
Si il apparait :
10 - 10
c'est bon, les valeurs sont les mêmes,
par contre s'il apparait :
"10" - 10 bah c'est pas bon, la première valeur est de type String (chaines de caractères) alors que la seconde est de type numérique.
Il faut que les données soient concordantes, d'où le fait de bien déclarer ses variables, et l'importances des "".
@++
<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 24 sept. 2006 à 00:19
Désolée, j'ai refait le test et les messages donne tous des valeurs identiques.
je crois que je vais laisser tomber et trouver un autre moyen d'arriver à ce résultat sans passer par une macro parceque je n'en vois plus le bout.
si un jour je trouve la solution (quand je serais devenue "forte" en VBA), je ne manquerais pas de te dire le résultat.
je te remercie ENORMEMENT pour tous le temps que tu m'a accordé.
Je pense qu'en provence il doit être l'heure d'aller dormir alors : BONNE NUIT ET MERCI ENCORE POUR TOUT;
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 24 sept. 2006 à 16:21
Drine, tu dois absolument procéder comme te l'indique Mortalino
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
------------------------------------------------------
MaVal = MaVal + CDbl(Cells(i, 2).Value)
doit être à l'intérieur du If ... End If
Si la valeur est 0 lorsque la boucle se termine, c'est que toutes les
conditions n'ont pas été vraies. Si, d'après toi, certaines lignes
contiennent les 4 conditions vraies, il faut alors vérifier les valeurs
des cellules.
Comme j'ai dit CH est différent de Ch et de ch, mais aussi "CH " est différent de "CH".
Il y a peut-être des espaces dans les valeurs de tes cellules. Il faudrait alors utiliser Instr() ou Trim()
For i = 9 To 999
If Cstr(Cells(i, 4).Value) = m And _
Trim(Cells(i, 6).Value) = "CH" And _ ' *** CH est à mettre entre ""
Trim(Cells(i, 5).Value) = "CH" And _ ' *** CH est à mettre entre ""
Trim(Cells(i, 8).Value) = "payé" Then ' *** payé est à mettre entre ""
MaVal = MaVal + CDbl(Cells(i, 2).Value) ' *** à laisser là
drine des iles
Messages postés42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006 24 sept. 2006 à 20:19
Bonjour MPi, merci de ton coup de main à toi aussi;
Bien, j'ai tout repris. j'ai vérifier, comme Mortalino me l'avait expliqué la valeur des cellule grace à une msgbox. A chaque fois le résultat annoncé dans la msgbox est égal à celle du code. Mais effectivement le résultat de la boucle est 0. Donc je me suis surement trompée dans les déclarations. Voilà ce que j'ai saisi ( les références des cellules ont un peu changé car j'ai modifié un brin le tableau qui contient les données.
Qu'en penses-tu ?
Sub ventil()
Dim i As Long
Dim payé As String
Dim CH As String
Dim m As Byte
Dim maval As Double
maval = 0
m = InputBox("Entrez le numéro du mois à éditer")
For i = 9 To 999
If CStr(Cells(i, 5).Value) = m And _
CStr(Cells(i, 7).Value) = "CH" And _
CStr(Cells(i, 6).Value) = "CH" And _
CStr(Cells(i, 9).Value) = "payé" Then
maval = maval + CDbl(Cells(i, 3).Value)
End If
Next i
Range("j4").Value = maval
drine des iles
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 24 sept. 2006 à 20:53
Ces déclarations ne servent à rien
Dim payé As String
Dim CH As String
Les termes "payé" et "CH" que tu recherches sont des valeurs de cellules et non des variables.
Si tu veux, tu peux m'envoyer le contenu de ta feuille. Ça peut être dû
à un détail idiot qu'on ne voit pas. La façon dont le code est écrit
semble correcte, mais c'est difficile pour nous de voir où peut être
l'erreur ou le problème...
drine des iles
Messages postés42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006 26 sept. 2006 à 05:09
Merci encore mille fois à Mortalino et à MPi.
j'avoue que j'avais laché prise et pour cause, j'étais bien loin d'arriver à écrire ce code seule (ça dépasse largement le contenu de mon "VBA pour les nuls"!!!)!!!
Merci aussi aux concepteurs du site car j'avoue que ces quelques jours d'échanges autour d'un code qui me posait problème auront été trés riches d'enseignements.