Aide VBA somme si condition sur plusieurs colonnes

Bonjour à tous

après avoir cherché un peu partout, je viens poster ici afin de savoir si l'un d'entre vous auriez unesolution(ou des pistes de solutions) à mon problème.

Alors voilà, dans le cadre d'une division de propriété (un immeuble) en "différents volumes", j'ai réalisé le fichier excel en PJ. Je suis débutant en VBA d'où certainement quelques éléments à améliorer parmi les macros déjà présentes bref ..

Ce fichier nous permet d'effectuer un contrôle de superficie pour chaque niveau (étage par exemple) d'un immeuble grâce notamment au contrôle de la superficie (colonnes D et E) mais il nous permet également de contrôler les volumes (colonne P), ou le résultat en P248 doit être le plus proche de 0.

Pour vérifier notre division de propriété , il nous faut également faire un contrôle par altimétrie supérieure / altimétrie inférieure (indiquées en colonnes F et H). En clair, pour une même côte altimétrique, nous devons avoir un résultat similaire entre les sommes des superficies relatives aux altimétries inférieures et ceux relatives aux altimétries supérieures Par exemple, si je prendsla côte de 35.87m somme des superficies (colonne E) en alt. inférieure (colonne F) doit être égale à somme des superficies(colonne E toujours) en alt. supérieure (colonne H).

Ainsi, je cherche à faire une macro qui me permettrait de remplir un tableau (cf tableau vert de la feuille contrôle-volumes) avec comme résultats la somme des superficies pour les Alt inf. et Alt sup ainsi que les Altimétries concernées. Cela me permettrait de contrôler beaucoup plus vite la division de l'immeuble (surtout lorsque l'on doit étudier une cinquantaine de côtes altimétriques..).

Je visualise à peu près ce que à quoi ressemblerait le résultat (somme si Altitude similaire et rempli le tableau au fur et à mesure) mais j'ai du mal à le traduire en VBA.

Je vous remercie pour l'aide que vous pourrez m'apporter

Bonjour Loic.

Tu peux utiliser un code comme celui-ci :

Option Explicit

Sub superficieAltimetrique()
Dim dInf As Object, dSup As Object
Dim i&
Dim tabl(), k

Set dInf = CreateObject("Scripting.Dictionary")
Set dSup = CreateObject("Scripting.Dictionary")

With Sheets("Controle-volumes") 'A modifier si changement de nom.
    i = .Cells.Find("*", , , , xlByRows, xlPrevious).Row 'Cherche la dernière ligne.
        For i = 16 To i 'Boucle depuis la ligne 16 à la dernière ligne.
            If Not .Cells(i, "F").Value = "" Then dInf(CDbl(.Cells(i, "F").Value)) = dInf(CDbl(.Cells(i, "F").Value)) + .Cells(i, "E").Value
            If Not .Cells(i, "H").Value = "" Then dSup(CDbl(.Cells(i, "H").Value)) = dSup(CDbl(.Cells(i, "H").Value)) + .Cells(i, "E").Value
        Next i
    'Transfert des éléments dans un array (permettra de trier les valeurs).
    ReDim tabl(1 To dSup.Count, 1 To 4)
        i = 1
        For Each k In dSup.keys
            tabl(i, 1) = k
            tabl(i, 2) = k
            tabl(i, 3) = dInf(k)
            tabl(i, 4) = dSup(k)
            i = i + 1
        Next k
    'Suppression des contrôles actuels.
    .[R17].Resize(200, 4).ClearContents
    'Export des valeurs dans le tableau en R17.
    .[R17].Resize(dSup.Count, 4).Value = tabl
    'Tri des données.
    .[R17].Resize(dSup.Count, 4).Sort Key1:=[R17], Order1:=xlAscending
End With
End Sub

Whoua ! je vais avoir le temps d'étudier cela, il y a pas mal d'éléments que je n'ai jamais utilisé dans ce code .

Merci beaucoup pour ta recherche et ta réponse rapide

Rechercher des sujets similaires à "aide vba somme condition colonnes"