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.
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 !
J'ai supprimé dans ce cas la variable Total qui n'apporte rien.
@ bientôt
LouReeD