Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Somme conditionnelle sur 2 colonnes en vba

fb62840

XLDnaute Impliqué
Bonjour,

Je suis embarrassé car je dois faire une somme conditionnelle en vérifiant sur toutes les feuilles d'un classeur (avec plus de 100 feuilles qui ont la même structure) si les cellules en colonne C et en colonne F contiennent, pour la Colonne C la valeur "ROSE" et pour la colonne F la valeur "HYB" et, si c'est le cas alors valoriser à 1 et faire la somme des 1 pour toutes les cellules qui en colonne C et en colonne F contiennent les valeurs critères dans toutes les feuilles à l'exception de la feuille "CONSO".

Je n'y arrive pas avec un dénombrement conditionnel par formule (trop nombreux onglets) et il me faudrait alors votre aide pour obtenir une solution en vba.

Merci beaucoup
 

Lolote83

XLDnaute Barbatruc
Bonjour,
En reprenant le code de Sylvanu du post suivant https://www.excel-downloads.com/thr...ur-plusieurs-feuilles.20058330/#post-20439148, cela devrait le faire.
Code:
Sub Compte()
    Dim N%: R = 0: H = 0
    For Each F In Worksheets
        If F.Name <> "CONSO" Then
            R = R + Application.CountIf(F.[C2:C1000], "ROSE")
            H = H + Application.CountIf(F.[F2:F1000], "HYB")
        End If
    Next F
    [C5] = R + H
End Sub
Edit
Je viens de corriger le code car j'avais conservé la colonne C pour HYB alors qu'il s'agit de la colonne F.
@+ Lolote83
 
Dernière édition:

fb62840

XLDnaute Impliqué
Merci beaucoup pour votre aide, en fait, il me semble que ça ne fonctionne pas exactement comme je le souhaite

Avec la proposition ci-dessous R prend la valeur de 1 si la cellule en colonne C a la valeur "Rose"
et H prend la valeur de 1 si la cellule en colonne H a la valeur "HYB"
Or, c'est si la valeur en colonne C est "Rose" et si la valeur en colonne H est "Hyb" que je devrais valoriser à 1 (les 2 conditions sont à respecter)

En l'état actuel ça valorise à 1 si la cellule en colonne C contient la valeur "Rose" même si la colonne H ne contient pas "HYB" et la valorisation est à 1 également si la colonne C ne contient pas "Rose" et si la colonne H contient "HYB"
 

Lolote83

XLDnaute Barbatruc
Re bonjour,
Voila une précision qui est plus parlante

Or, c'est si la valeur en colonne C est "Rose" et si la valeur en colonne H est "Hyb" que je devrais valoriser à 1 (les 2 conditions sont à respecter)

Donc voici un nouveau code certainement plus approprié
VB:
Sub Compte2()
    Dim N%: R = 0
    For Each F In Worksheets
        If F.Name <> "CONSO" Then
            R = R + Evaluate("=SUMPRODUCT((C2:C1000=""ROSE"")*(F2:F1000=""HYB""))")
        End If
    Next F
    [A1] = R
End Sub
@+ Lolote83
 

fb62840

XLDnaute Impliqué
Merci, mais finalement ça ne fonctionne pas, le total reste à 0
 
Dernière édition:

fb62840

XLDnaute Impliqué
Merci, mais finalement ça ne fonctionne pas, le total reste à 0
C'est étrange car en rédigeant le code ainsi :
R = R + Evaluate("=SUMPRODUCT((C2:C1000=""ROSE"")*(F2:F1000=""HYB""))")
H = H + Evaluate("=SUMPRODUCT((C2:C1000=""BLEUE"")*(F2:F1000=""""))")

s'il est exécuté depuis la feuille "CONSO" il ne calcule pas ou le résultat est égal à 0 pour R et pour H
et s'il est exécuté depuis une autre feuille H est calculé mais R ne semble pas être calculé, ça reste à 0

Comment obtenir que les calculs soient corrects exécutés depuis la feuille CONSO ?

(est-ce que cela pourrait venir du fait que les couleurs et les valeur HYB ou vide soient des valeurs de cellules à liste déroulante ?)
 

Lolote83

XLDnaute Barbatruc
Re bonjour,
J'ai cru lire tout à l'heure que tout était OK ???? Me serais-je trompé ?
N'ayant pas de fichier joint, il est difficile de faire des tests sérieux. Donc, j'ai imaginé plusieurs onglets avec en colonne C des couleurs (dont du ROSE) et en colonne F des données (dont HYB).
La formule suivante sur chaque onglet donne un résultat
A1=SOMMEPROD(($C$2:$C$1000="ROSE")*($F$2:$F$1000="HYB"))
C'est donc cette formule que j'ai repris dans le code et mes essais étaient positifs.
Est ce que le résultat de la formule donnée ci-dessus te donne de bons résultats (1 formule par onglet).
Cordialement
@+ Lolote83
 

fb62840

XLDnaute Impliqué

Oui, la formule donne le bon résultat sur chaque feuille​
 

fb62840

XLDnaute Impliqué
Ce qui est très étrange par exemple c'est que pour la valeur H le total n'est pas le même dans l'exécution de la macro, selon que la macro est lancé depuis une feuille ou une autre...
 

ChTi160

XLDnaute Barbatruc
Bonjour fb62840
Bonjour le Fil ,Lolote83
il manque surement l'indication de la feuille source dans la Fonction !
genre .
VB:
 R = R + Evaluate("=SUMPRODUCT((F!C2:C1000=""ROSE"")*(F!F2:F1000=""HYB""))")
j'attend @Lolote83 pour voir !(je suis Nul en formule )
jean marie
 

Lolote83

XLDnaute Barbatruc
Re bonjour,
Et la macro ne donne pas les mêmes résultats ?
Sinon, tu peux essayer dans l'onglet CONSO d'avoir le résultat par formule



@Chrti160 , le code donné parcours l'ensemble des onglets et effectue le calcul donc le résultat devrait être OK. Je refais des essais
@+ Lolote83
 

fb62840

XLDnaute Impliqué
Une solution par formule j'y avais pensé et m'intéresserait mais j'au un très grand nombre d'onglets (et le nombre d'onglets peut varier d'une semaine sur l'autre). La limite est atteinte il me semble avec plus de 30 arguments et je suis au dessus (j'ai parfois de 80 à 100 onglets, voir davantage)


J'ai essayé également avec la proposition de Chi160 mais dans ce cas j'ai un message d'erreur :
Erreur d'exécution 13 Incompatibilité de type
 

Lolote83

XLDnaute Barbatruc
Re bonjour à tous.
Bien vu ChTi160,
Voici donc le code corrigé
VB:
Sub Compte2()
    Dim N%: R = 0
    For Each F In Worksheets
        If F.Name <> "CONSO" Then
            R = R + Sheets(F.Name).Evaluate("=SUMPRODUCT((C2:C1000=""ROSE"")*(F2:F1000=""HYB""))")
        End If
    Next F
    [A1] = R
End Sub
@+ Lolote83
 

Discussions similaires

Réponses
2
Affichages
281
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…