Somme d'une ligne variable

Bonjour à tous,

Je travaille sur un fichier, qui doit permettre à l'utilisateur de sélectionner plusieurs critères, et qui selon les critères choisis, doit faire la somme d'une ligne en question.

Seulement j'ai un soucis au niveau de la définition de la ligne à aller récupérer. J'ai essayer avec une ligne "classique" et ça fonctionne, mais dès que la ligne dépend de mes variables, ça bloque.

Je vous mets le code dessous.

image

Merci d'avance pour votre aide !!

Antonin

Bonjour,

pas facile sans fichier !

Vous définissez pb comme un Range, vous lui attribuez les ROWS d'une recherche avec Find, déjà le ROWS avec le S m'inquiète, mais surtout pb est bien égale à une cellule donc un Range, mais le soucis c'est que vous utilisez pb comme une valeur numérique dans la définition de la variable Plage, ajputez un ".Row" après le pb pour voir ?

@ bientôt

LouReeD

Bonjour,

J'aurais bien mis mon fichier, mais il contient beaucoup de données confidentielles.

Vous parlez d'un ".Row" à ajouter au niveau de ""Range(Cells(pb.Row, 4), Cells(pb.Row, 34))" ?

Si c'est bien à cet endroit là, j'ai essayé mais ça ne fonctionne pas. Je me demande si il n'y aurait pas un autre moyen que Range pour déclarer "pb", mais je n'ai pas trouvé d'autres solutions.

Antonin

Bonjour,

proposition de correction avec commentaires :

Option Explicit
Dim S As String, P As String, m As String, L As String, A As String
Dim svc As Range, pdt As Range, pb As Range
Dim Plage As Range

Sub Synthèse()
    With Sheets("Synthèse annuelle")
        S = .Range("A23").Value ' c'est bien un String
        P = .Range("B23").Value ' c'est bien un String
        m = .Range("C23").Value ' c'est bien un String
        L = .Range("D23").Value ' c'est bien un String
        A = .Range("E23").Value ' c'est bien un String
    End With

    With Sheets(m & " " & L)
        'Set svc = .Column(1).Find(S, lookat:=xlWhole).Rows
        ' find trouve la première cellule correspondant à la valeur cherchée dans la colonne 1
        ' donc il ne retourne qu'un seul objet de type Range
        ' Set permet d'attribuer ce Range trouvé à la variable objet Range de nom svc
        ' donc le Rows est en trop
        ' je mettrais ceci :
        Set svc = .Column(1).Find(S, lookat:=xlWhole) ' c'est bien un Range
        ' idem pour les suivants
        'Set pdt = .Column(2).Find(P, lookat:=xlWhole).Rows
        Set pdt = .Column(2).Find(P, lookat:=xlWhole) ' c'est bien un Range
        'Set pb = .Column(3).Find(a, lookat:=xlWhole).Rows
        Set pb = .Column(3).Find(A, lookat:=xlWhole) ' c'est bien un Range
        ' on a bien en mémoire dans ces trois variables les cellules correspondantes aux trois recherches
        ' la Plage devrait donc être définie comme ceci :
        'Set Plage = .Range(Cells(pb, 4), Cells(pb, 34))
        Set Plage = .Range(Cells(pb.Row, 4), Cells(pb.Row, 34)) ' c'est bien un Range
        ' ou bien si vous trouvez que le Rnage avec les Cells c'est "pas beau"
        ' Set Plage = .Cells(pb.Row, 4).Resize(,31) de 4 à 34 cela fait bien 31 colonnes

        If .Cells(svc.Row, 1).Value = S Then
            If .Cells(pdt.Row, 3).Value = A Then ActiveSheet.Range("F23").Value = Application.WorksheetFunction.Sum(Plage)
        End If
    End With
End Sub

Il est bien évident que je n'ai pas pu tester en l'absence d'un fichier, et remarquez aussi que cela aurait été plus vite si au lieu d'une image il y avait eu une copie du code ! Avec mes trois doigts il ne m'est pas possible de taper vite !

J'ai supprimé dans ce cas la variable Total qui n'apporte rien.

@ bientôt

LouReeD

Rechercher des sujets similaires à "somme ligne variable"