Calcul d'un champ à partir d'une recherche

P

papoow

Guest
Bonsoir la communauté Excel !

Je voudrais avec ou sans macro faire la somme d'un champ défini à partir d'une recherche.

A savoir, je recherche la dernière cellule remplie dans la colonne AR, puis je me déplace sur la même ligne à la colonne P.
Puis de cette ligne, je voudrais faire la somme de des cellules de P? à P-100...

Par macro :
Sub Cumul_colonneP()
Sheets("Base de données").Select
Range("AR65535").End(xlUp).Select
ActiveCell.Offset(0, -28).Select

et là je coince !

Est-ce possible par une formule (sans macro) ?

Merci beaucoup pour votre aide, et bonne soirée à toutes et tous !
 
R

Robert

Guest
Bonsoir Papoow, bonsoir le forum,

C'est certainement faisable par formule et tu vas certainement avoir des réponses la-dessus mais comme je ne sais pas faire je te propose une solution VBA :

Sub Cumul_colonneP()
Dim col As Long 'déclare la variable col
Dim som As Variant 'déclare la variable som (à adapter car je ne connais pas le type)
'définit la variable col
col = Sheets("Base de données").Range("AR65535").End(xlUp).Row
'définit la variable som
som = Application.WorksheetFunction.Sum(Sheets("Base de données").Range("P100:p" & col))
'affiche un message de la somme
MsgBox som
End Sub

À plus,

Robert
 
C

CBernardT

Guest
Bonsoir Papow

Une solution par macro :

Comme je ne sais pas si la colonne AR à toujours plus de 100 lignes, j'ai mis un garde fou à partir de moins de 100.

Sub Cumul_colonneP()
Dim L As Integer

With Sheets("Base de données")
L = .Range("AR65535").End(xlUp).Row
If L > 100 Then
.Range("A1") = Application.Sum(Range(.Range("P" & L), .Range("P" & L - 100)))
Else
.Range("A1") = Application.Sum(Range(.Range("P" & L), .Range("P1")))
End If
End With
End Sub

Cordialement

CBernardT
 
P

papoow

Guest
CBernardT, Robert bonsoir

Merci pour votre aide trés précieuse.

La proposition de Robert fonctionne à 1 détail* prés, celle de Robert me pose pb, il me faut l'étudier un peu plus pour comprendre.

Le détail* est le suivant, je souhaite sélectionner un champ variable de 100 cellules (col P), ce champ est défini par la dernier cellule remplie (col AR). La premiére cellule de mon champ doit être sur la même ligne que ma cellule AR identifiée.

Voilà ma macro!
Elle ne me satisfait pas, j'aurais aimé faire le calcul directement en J46 sur ma sheet Bouclage sans faire de copie/coller sur Base de données.

Sub derniere_cellule_colonne()
Sheets("Base de données").Select
Range("AR65535").End(xlUp).Select
ActiveCell.Offset(0, -28).Range("A1").Activate
ActiveCell.Range("A1:A100").Select
Selection.Copy
Range("CO3").Select
ActiveSheet.Paste
Sheets("Bouclage").Select
Range("J47").Select

End Sub

Si vous pouvez m'apporter la dernière touche...

Merci, Merci et longue vie à ce Forum
Quel plaisir d'avancer avec un tel accompagnement, Merci beaucoup

Papoow
 
R

Robert

Guest
Re salut Papoow, CBernardT, salut le forum,

Je pense que cette macro devrait te convenir :

Sub Cumul_colonneP()
Dim li As Long 'déclare la variable li
Dim som As Variant 'déclare la variable som (à adapter car je ne connais pas le type)
'définit la variable li (li correspond au numéro de la dernière ligne éditée de la colonne AR)
li = Sheets("Base de données").Range("AR65535").End(xlUp).Row
'définit la variable som (som est la somme de P(li) à P(li+99))
'si li=10 : som est la somme de P10:p109 (soit 100 cellules)
som = Application.WorksheetFunction.Sum(Sheets("Base de données").Range("P" & li & ":p" & li + 99))
'affiche la somme dans l'onglet "Bouclage" cellule J46
Sheets("Bouclage").Range("J46").Value = som
End Sub

À plus,

Robert
 
P

papoow

Guest
Robert bonsoir, bonsoir le Forum,

Je suis impressionné, 2 propositions, 2 succés et du premier coup ! bravo

Je vais étudier (pour comprendre et progresser) ta proposition, celle ci me convient parfaitement, j'ai mis en place les protections de mes onglets (fichier d'enregistrement de productivité dans un atelier) et installé la macro sur le fichier.

Une dernière question, peut-on optimiser cette écriture ?

ex simple :
Sheets("Bouclage").Activate
ActiveSheet.Unprotect
Range("J46").Value = som
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

genre :

Sheets("Bouclage").activate.unprotect.Range("J46").Value = som ???

Encore merci Robert, excellent Week-end

Cordialement, papoow
 

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 327
Membres
103 517
dernier inscrit
XavG