Problème VBA - Fonction Somme Si Ens [Résolu]

Signaler
Messages postés
11
Date d'inscription
mardi 29 août 2017
Statut
Membre
Dernière intervention
7 avril 2020
-
Messages postés
11
Date d'inscription
mardi 29 août 2017
Statut
Membre
Dernière intervention
7 avril 2020
-
Bonjour,

je tente de faire un code vba utilisant la fonction "somme si ens (Sumifs)".

L'idée est que ma fonction fasse la somme des valeurs de la colonne B si les valeurs de la colonne A de la feuille 1 sont incluses dans un intervalle de valeurs définies dans la feuille 2.

J’inclurai en fin de message le code que j'ai déjà effectué.

Le problème est que lorsque je lance mon code en Pas à pas pour vérifier sont fonctionnement, arrivé à la ligne ou j'ai défini ma fonction "Sumifs" VBA me renvoie un message "Erreur d’exécution '1004' : Erreur définie par l'application ou par l'objet".

Je vous serait très reconnaissant du temps que vous prendrez pour jeter un oeil ...

D'avance merci,

Cordialement,

Ci après, mon code.

Sub PassageTiers()

Dim w As Integer 'Colonne Fine
Dim x As Integer 'Colonne tiers
Dim nbrfichier As Integer
Dim nbrfreq As Integer
Dim valtiers As Double


nbrfichier = 39
nbrfreq = 193
w = 1

Do Until w = nbrfichier + 1

w = w + 1

Do Until x = 29

x = 3

valtiers = Application.WorksheetFunction.SumIfs(Worksheets("Résultats_Bandes_Fines").Range(Cells(2, w), Cells(nbrfreq + 1, w)), Worksheets("Résultats_Bandes_Fines").Range(Cells(2, 1), Cells(nbrfreq + 1, 1)), "" > "" & Worksheets(Résultats_Tiers_Oct).Cells(2, x), Worksheets("Résultats_Bandes_Fines").Range(Cells(2, 1), Cells(nbrfreq + 1)), "" <= "" & Worksheets("Résultats_Tiers_Oct").Cells(3, x))
Worksheets("Résultats_Tiers_Oct").Cells(w + 3, x) = valtiers


x = x + 1
valtiers = 0

Loop
Loop
End Sub

3 réponses

Messages postés
12312
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
24 septembre 2020
693
bonjour, peux-tu utiliser les balises de code pour partager du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

as-tu essayé de calculer cela en VBA plutôt que via une formule?
Messages postés
11
Date d'inscription
mardi 29 août 2017
Statut
Membre
Dernière intervention
7 avril 2020

Bonjour,

quel type de balise dois-je utiliser pour du code vba... ? "Basic" ? "xml" ?
j'ai commencer vba il y a deux jours, je suis pas encore très bien rodé !
Messages postés
12312
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
24 septembre 2020
693 >
Messages postés
11
Date d'inscription
mardi 29 août 2017
Statut
Membre
Dernière intervention
7 avril 2020

basic, en effet.
Messages postés
11
Date d'inscription
mardi 29 août 2017
Statut
Membre
Dernière intervention
7 avril 2020

Ci après, mon code avec balises :

Sub PassageTiers()

Dim w As Integer 'Colonne Fine
Dim x As Integer 'Colonne tiers
Dim nbrfichier As Integer
Dim nbrfreq As Integer
Dim valtiers As Double


nbrfichier = 39
nbrfreq = 193
w = 1

Do Until w = nbrfichier + 1

    w = w + 1
    
        Do Until x = 29
        
        x = 3
        
        valtiers = Application.WorksheetFunction.SumIfs(Worksheets("Résultats_Bandes_Fines").Range(Cells(2, w), Cells(nbrfreq + 1, w)), Worksheets("Résultats_Bandes_Fines").Range(Cells(2, 1), Cells(nbrfreq + 1, 1)), "" > "" & Worksheets(Résultats_Tiers_Oct).Cells(2, x), Worksheets("Résultats_Bandes_Fines").Range(Cells(2, 1), Cells(nbrfreq + 1)), "" <= "" & Worksheets("Résultats_Tiers_Oct").Cells(3, x))
        Worksheets("Résultats_Tiers_Oct").Cells(w + 3, x) = valtiers
        
        MsgBox (valtiers)
        x = x + 1
        valtiers = 0
        
        Loop
Loop
End Sub
Messages postés
12312
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
24 septembre 2020
693
quand tu écris, "" > "", tu testes si "" est strictement plus grand que "".
surtout, ajoute
option explicit
en début de module.
si tu écris ton code ainsi:
Dim w As Integer 'Colonne Fine
Dim x As Integer 'Colonne tiers
Dim nbrfichier As Integer
Dim nbrfreq As Integer
Dim valtiers As Double, rg1 As Range, rg2 As Range, rg3 As Range, c1 As String, c2 As String
Set rg1 = Worksheets("Résultats_Bandes_Fines").Range(Cells(2, w), Cells(nbrfreq + 1, w))
Set rg2 = Worksheets("Résultats_Bandes_Fines").Range(Cells(2, 1), Cells(nbrfreq + 1, 1))
Set rg3 = Worksheets("Résultats_Bandes_Fines").Range(Cells(2, 1), Cells(nbrfreq + 1))
c1 = "" > "" & Worksheets("Résultats_Tiers_Oct").Cells(2, x)
c2 = "" <= "" & Worksheets("Résultats_Tiers_Oct").Cells(3, x)
x = Application.WorksheetFunction.SumIfs( _
    rg1, _
    rg2, _
      c1, _
    rg3, _
       c2)
, tu peux facilement, en cas d'erreur, faire le tour des variables pour vérifier si tout est normal.
Messages postés
11
Date d'inscription
mardi 29 août 2017
Statut
Membre
Dernière intervention
7 avril 2020

J'ai finalement réussi en déclarant au préalable mes plage de valeurs à tester en variable "Range" et mes cellules contenant les valeur test en variable "Double", ce qui a grandement simplifier l'écriture de la fonction SumIfs !

Merci d'avoir pris le temps de me donner un coup de main !

Bonne continuation.