SumIf

Bonjour tout le monde

J'ai une erreur avec une ligne de code concernant la fonction somme.si :

sht.Cells(i, j) = Application.WorksheetFunction.SumIfs(Worksheets("feuille2").Columns(Z), Worksheets("feuille2").Range("BB9:BB1000"), sht.Range("B7").Value)

En effet, la formule est située dans une boucle. L'idée est de remplir un tableau par la formule somme.si pour qu'elle puisse additionner la somme à partir d'un autre tableau. la fonction va parcourir tout le tableau de recherche pour remplir mon tableau initial. Z est étant un un compteur utilisé pour passer d'une colonne à l'autre.

Voilà, je vous remercie d'avance pour votre aide.

Cordilament

Bonjour, Quelle erreur ? Une boucle avec des colonnes complètes, ça commence à en faire des cellules... L'erreur indique t elle un dépassement de capacité ?

vbMBHB

Bonjour

Les sumifs et autres nécessitent des plages de même taille donc soit tu travailles de la ligne 9 à 1000, soit sur la colonne mais pas un mélange...

Par ailleurs sht.Range("B7").Value renvoie bien du texte ?

Merci 78chris, je n'avais pas relever ceci... Mais bon l'énoncé de l'erreur serait le bienvenu, non ?

vbMBHB

Bonjour chris

Merci tout d'abord pour votre message.

Ensuite, sht.Range("B7").Value s'agit bien d'un texte.

J'ai fait comme vous m'avez dit, en optant pour la colonne pour parcourir l'autre tableau.

En effet, ça a marché mais la boucle a tourné et n'a pas donné un résultat !

voilà je mets toute la boucle comme ça vous pouvez voir.

nn1 = sht.Range("prlng").Row

nn2 = sht.Range("derlgn").Row

m = nn2 - nn1 - 1

If nn2 >= nn1 + 2 Then

For i = nn1 + 1 To nn2 - 1

For j = 3 To 100

If sht.Range("AZ7") = hzo.Range("A7") Then

For l = 3 To 30

For w = 3 To 100

If (sht.Cells(nn1 - 1, w).Value = hzo.Cells(7, l).Value) Then

For z = 3 To 30

sht.Cells(i, j) = Application.WorksheetFunction.SumIfs(Worksheets("HZO215").Columns(z), Worksheets("HZO215").Columns(54), sht.Range("code_da").Value)

Next z

End If

Next w

Next l

End If

Next j

Next i

End If

Merci d'avance pour vos réponses.

indentez le code,

utilisez les balise de mise en forme...

vbMBHB

Ce qui peut donner ceci :

nn1 = sht.Range("prlng").Row
nn2 = sht.Range("derlgn").Row
m = nn2 - nn1 - 1

If nn2 >= nn1 + 2 Then
    For i = nn1 + 1 To nn2 - 1
        For j = 3 To 100
            If sht.Range("AZ7") = hzo.Range("A7") Then
                For l = 3 To 30
                    For w = 3 To 100
                        If (sht.Cells(nn1 - 1, w).Value = hzo.Cells(7, l).Value) Then
                            For Z = 3 To 30
                                sht.Cells(i, j) = Application.WorksheetFunction.SumIfs(Worksheets("HZO215").Columns(Z), Worksheets("HZO215").Columns(54), sht.Range("code_da").Value)
                            Next Z
                        End If
                    Next w
                Next l
            End If
        Next j
    Next i
End If

Un peu plus lisible, non ?

vbMBHB

Merci pour la mise en page

Bonjour,

mettre cette instruction

sht.Cells(i, j) = Application.WorksheetFunction.SumIfs(Worksheets("HZO215").Columns(Z), Worksheets("HZO215").Columns(54), sht.Range("code_da").Value)

à l'intérieur de 3 boucles l,w,z tend à me faire penser que ces 3 boucles sont inutiles. On garde toujours dans sht.cells(i,j) le résultat de l'exécution du dernier sumifs.

pour pouvoir aider davantage, merci de mettre un fichier représentatif des données, le résultat souhaité et les instructions/règles pour y arriver.

Bonjour

Merci h2so4 pour la réponse.

Vous trouverez ci-joint le fichier excel.

j'attends votre réponse

Merci encore

re-bonjour,

une proposition sur base de ce que j'ai essayé de déduire du fichier envoyé (tu n'as pas beaucoup d'explications )

Sub aargh()
    Set wsn = Sheets("nombre")
    fln = 19 'N° première ligne cellule à remplir wsn
    lln = 24 'N° dernière ligne cellule à remplir wsn
    fcn = 3 'N° première colonne cellule à remplir wsn
    lcn = 57 'N° dernière colonne cellule à remplir wsn
    Set wsh = Sheets("HZO215")
    dlh = wsh.Cells(Rows.Count, 1).End(xlUp).Row
    Set cc = wsh.Range("BA9:BA" & dlh) 'plage des centres de coûts sur wsh
    wsn.Range("C19:BE24").ClearContents
    For i = fln To lln ' de la première à la dernière ligne
        For j = fcn To lcn 'de la première à la dernière colonne
            Set rub = Range(wsh.Cells(9, j - 1), wsh.Cells(dlh, j - 1)) 'plage des montants de la rubrique
            wsn.Cells(i, j).Formula = Application.WorksheetFunction.SumIfs(rub, cc, wsn.Cells(i, 1))
        Next j
    Next i
End Sub
18test-sumif.xlsm (54.73 Ko)

Bonjour

Je tiens à te remercier pour ta réponse. c'est bien ce que je cherchait. c'est clair j'ai compris le code.

Ce n'est juste qu'une partie d'un projet. normalement ça doit marcher avec ce code. Je reviendrais vers vous si je trouverais une erreur.

Merci encore.

Bonjour

Je trouve un peu de difficulté pour développer la macro.

En effet, je voulais que la fonction cherche le code correspondant dans la deuxième et dès qu'il le trouve il fait la somme si dans la cellule correspondante.

C'est à dire il faut que chaque rubrique de la feuille 1 doit être cherché dans toute la ligne des rubriques de la feuille 2.

Je ne sais pas si vous m'avez compris.

Merci d'avance pour votre réponse.

bonjour

désolé, j'ai rien compris.

Re bonjour

par exemple pour la cellule 1300 ( C17 dans la feuille 1)

Je veux que la macro cherche dans toute la ligne 7 la 1300 puis faire la somme si dans la cellule correspondante.

Donc ça va être plusieurs recherches pour chaque valeur de la ligne 17.

Là la macro fonctionne si les codes de la ligne 17 (feuille 1) et de la ligne 7 (feuille 2) sont ordonnés.

Si je mets par exemple sur la feuille 1300 à la place de 1610, la macro ne trouve pas la somme.

Re-bonjour,

une adaptation de la macro

18test-sumif.xlsm (55.92 Ko)

Merci beaucoup c très gentil

P.S. je viens de voir la réponse

Bonjour

Je veux faire un cumul s'il y la rubrique deux fois dans le tableau de la feuille HZO215

Pour le moment il prend la dernière

Cordialement

Khaled

bonjour,

code adapté

Merci beaucoup

c'est très gentil

Rechercher des sujets similaires à "sumif"