Additionner des valeurs en fonction du nom figurant dans la cellule voisine en VBA

BChaly

XLDnaute Occasionnel
Bonsoir à tous,

Grace au Forum j'ai bricolé une macro qui devrait additionner des valeurs dans 2 feuilles ST_1 et ST_2, et reporter les sommes dans une feuille TOTAL.

Le code semble fonctionner en partie pour les valeurs A, mais pas pour les valeurs B et C dans mon exemple.

De plus, il semblerait que les cellules situées après une cellule vide ne sont pas prises en compte.
Il faudrait certainement remplacer:
Code:
Do While RgeA <> ""
mais par quoi?

Merci pour votre aide.

Cordialement,

BChaly



Code:
Option Explicit

Sub TotalValeur()

Dim RgeA, RgeB, RgeC As Range
Dim Total, i As Integer

Set RgeA = Sheets(1).Range("A2")

Do While RgeA <> ""
    Total = 0
        For i = 2 To ThisWorkbook.Sheets.count
            Set RgeB = Sheets(i).Columns(1).Find(what:=RgeA.Text, LookIn:=xlValues, lookat:=xlWhole)
                If Not RgeB Is Nothing Then Total = Total + Application.Sum(Sheets(i).Rows(RgeB.Row))
            Set RgeC = Sheets(i).Columns(2).Find(what:=RgeA.Text, LookIn:=xlValues, lookat:=xlWhole)
                If Not RgeC Is Nothing Then Total = Total + Application.Sum(Sheets(i).Rows(RgeC.Row))
        Next
    RgeA(1, 2) = Total
        Set RgeA = RgeA(2, 1)
Loop

End Sub
 

Pièces jointes

  • TestA.xls
    30.5 KB · Affichages: 67
  • TestA.xls
    30.5 KB · Affichages: 72
  • TestA.xls
    30.5 KB · Affichages: 72
Dernière édition:

Paritec

XLDnaute Barbatruc
Re : Additionner des valeurs en fonction du nom figurant dans la cellule voisine en V

Bonsoir Bchay le forum
bon alors première chose tu as des B des A et autre et tu fais une recherche find OK mais tu veux obtenir quoi?
la somme des lignes ou B est présent ?? si oui pourquoi on retrouves des doublons aussi dans la feuille total??
Des explications claires et on va te faire cela mais pour le moment sans explications PRÉCISES on ne peut rien
a+
papou:eek:
 

BChaly

XLDnaute Occasionnel
Re : Additionner des valeurs en fonction du nom figurant dans la cellule voisine en V

Bonsoir Papou,

Merci pour l'intérêt que tu portes à mon problème.

Oui, je souhaite faire la somme des valeurs correspondant à A, B, C... dans ST_1 et ST_2 et afficher le résultat dans la feuille TOTAL.

Effectivement il y a des doublons dans la feuille TOTAL, et je souhaite les laisser.
"A" par exemple aura le même résultat partout où il se trouve dans cette feuille TOTAL.

En ce qui concerne ta question située dans le fichier que tu as retourné, les "B" devrait afficher "5".

Cordialement

BChaly
 
Dernière édition:

Paritec

XLDnaute Barbatruc
Re : Additionner des valeurs en fonction du nom figurant dans la cellule voisine en V

Bonjour BChaly le forum
excuses moi de te demander de travailler un peu est-ce possible de mettre dans la feuille Total le résultat souhaité, car il y avait des doublons mais en plus il manquait des lettres alors pour décortiquer ta demande repasses ton fichier avec le résultat exact souhaité STP et on va faire
a+
papou:eek:
 

job75

XLDnaute Barbatruc
Re : Additionner des valeurs en fonction du nom figurant dans la cellule voisine en V

Bonjour BChaly, Papou,

Utiliser VBA pour ça c'est vraiment du vice :confused:

Formule en B2 de la feuille TOTAL, à tirer vers le bas :

Code:
=SOMME.SI(ST_1!A:A;A2;ST_1!B:B)+SOMME.SI(ST_2!B:B;A2;ST_2!C:C)
Fichier joint.

A+
 

Pièces jointes

  • TestA(1).xls
    32.5 KB · Affichages: 69

job75

XLDnaute Barbatruc
Re : Additionner des valeurs en fonction du nom figurant dans la cellule voisine en V

Re,

Evidemment, si tirer la formule vers le bas vous fatigue, lancez cette macro :

Code:
Sub SOMMESI()
With [B2:B7] 'à adapter
  .Formula = "=SUMIF(ST_1!A:A,A2,ST_1!B:B)+SUMIF(ST_2!B:B,A2,ST_2!C:C)"
  .Value = .Value
End With
End Sub
Edit : la macro ci-dessus fonctionne sur Excel 2010. Si problème sur d'autres versions, utiliser :

Code:
Sub SOMMESI()
 With [B2:B7] 'à adapter
   .FormulaR1C1 = "=SUMIF(ST_1!C1,RC1,ST_1!C2)+SUMIF(ST_2!C2,RC1,ST_2!C3)"
   .Value = .Value
 End With
 End Sub
A+
 
Dernière édition:

BChaly

XLDnaute Occasionnel
Re : Additionner des valeurs en fonction du nom figurant dans la cellule voisine en V

Bonsoir Job75,

Merci pour cette macro qui va me rendre un grand service.

Maintenant, je souhaite également faire le contraire dans un autre fichier.

Ainsi les valeurs de la feuille "TOTAL" (Colonne B) doivent être additionnées
et les résultats doivent être répartis sur les feuilles ST_1 (Col. B), ST_2 (Col. C).
(Sachant que j'aurai 12 feuilles dans ce que je souhaite réaliser).

Avec le code que j'ai tenté de modifier, les résultats sont enregistrés uniquement dans ST_1.

Où est l'erreur?

Cordialement

BChaly


Code:
Option Explicit

Sub SOMMESI()
Sheets("ST_1").Select
With [B2:B7]
  .Formula = "=SUMIF(TOTAL!A:A,A2,TOTAL!B:B)"
  .Value = .Value
End With
Sheets("ST_2").Select
With [C2:C7]
  .Formula = "=SUMIF(TOTAL!A:A,A2,TOTAL!B:B)"
  .Value = .Value
End With
End Sub
 

Pièces jointes

  • TestB.xls
    26.5 KB · Affichages: 69
  • TestB.xls
    26.5 KB · Affichages: 69
  • TestB.xls
    26.5 KB · Affichages: 72

BChaly

XLDnaute Occasionnel
Re : Additionner des valeurs en fonction du nom figurant dans la cellule voisine en V

Bonsoir à tous,

J'ai trouvé mon erreur et le code semble fonctionner.
Pour ceux que ça intéresse, la deuxième formule doit être modifiée ainsi:

Code:
.Formula = "=SUMIF(TOTAL!A:A,B2,TOTAL!B:B)"

Avec mes 12 feuilles je vais répéter ça 12 fois.
Il y a certainement une possibilité de simplifier, mais pour l'amateur que je suis c'est OK.

Cordialement,

BChaly
 

job75

XLDnaute Barbatruc
Re : Additionner des valeurs en fonction du nom figurant dans la cellule voisine en V

Bonjour BChaly, Papou, le forum,

Avec mes 12 feuilles je vais répéter ça 12 fois.

Pas besoin, mettez dans ThisWorkbook :

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim ref As Range, h As Long
Set ref = Sh.UsedRange.Find("ST*", , xlValues, xlWhole)
If Not ref Is Nothing Then
  h = ref(65537 - ref.Row).End(xlUp).Row - ref.Row 'hauteur
  If h Then
    With ref(2, 2).Resize(h)
      .FormulaR1C1 = "=SUMIF(TOTAL!C1,RC[-1],TOTAL!C2)"
      .Value = .Value
    End With
  End If
End If
End Sub
Seule condition : au dessus du tableau la cellule avec ST xx

Le tableau peut être n'importe où, avec un nombre de lignes quelconque.

Fichier joint.

A+
 

Pièces jointes

  • TestB(1).xls
    39.5 KB · Affichages: 73

BChaly

XLDnaute Occasionnel
Re : Additionner des valeurs en fonction du nom figurant dans la cellule voisine en V

Bonsoir Job75,

Cette solution est Géniale!!!

Les tableaux figurant sur mes 12 feuilles à des endroits différents, sont remplis automatiquement!!!

Je vous remercie Cent Mille fois et vous félicite pour vos compétences.

Cordialement,

BChaly
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
147

Statistiques des forums

Discussions
312 198
Messages
2 086 149
Membres
103 133
dernier inscrit
mtq