Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

additionner différentes cellules sur differentes feuillesà partir d'une liste non déterminée

ymanot

XLDnaute Occasionnel
Bonjour le Forum
Bonjour les Barbatrucs

j ai une feuille "Global seances" dans laquelles je voudrais centraliser les résultats de mes élèves acquis sur 10 seances et notés sur des feuilles "Recap Seance.."
le soucis
- je ne peux pas faire une addition classique car la liste ne sera jamais la même, et je ne peux pas savoir à l avance quel nom sera inscrit en 1er.

j ai bien pensé à faire une recherche telle que =SI(ESTNUM(TROUVE... mais je me heurte à l addition qui me pose problème.

Aussi si une âme charitable pouvait m apporter la solution
je vous en remercie
 

Pièces jointes

  • doc escalade nov 2019 question sommes.xlsm
    874.1 KB · Affichages: 25

job75

XLDnaute Barbatruc
Bonjour ymanot,

Voyez le fichier joint avec cette formule en C4 de la feuille "Global seances" :
Code:
=SIERREUR(EXP(LN(SIERREUR(--RECHERCHEV($B4;'recap S1'!$B:$AY;COLONNE()-1;0);0)+SIERREUR(--RECHERCHEV($B4;'recap S2'!$B:$AY;COLONNE()-1;0);0)+SIERREUR(--RECHERCHEV($B4;'recap S3'!$B:$AY;COLONNE()-1;0);0)+SIERREUR(--RECHERCHEV($B4;'recap S4'!$B:$AY;COLONNE()-1;0);0)+SIERREUR(--RECHERCHEV($B4;'recap S5'!$B:$AY;COLONNE()-1;0);0)+SIERREUR(--RECHERCHEV($B4;'recap S6'!$B:$AY;COLONNE()-1;0);0)));"")
à recopier sur la plage C4:AY143.

Pourquoi la formule =SOMMEPROD(C4:AX4) en AZ4 ? =SOMME(C4:AY4) est plus logique non ?

A+
 

Pièces jointes

  • doc escalade nov 2019 question sommes(1).xlsm
    900.8 KB · Affichages: 10

ymanot

XLDnaute Occasionnel
Bonsoir Job75
Bonsoir les barbatrucs,
Bonsoir amis lecteurs

merci pour la réponse, et oui effectivement j ai rajouté une voie toute prise et j ai oublié de la dupliquer. et oui "somme prod" intutile ici,
Merci pour la vérif !
 
Dernière édition:

job75

XLDnaute Barbatruc
Voici une solution VBA avec cette macro dans le ThisWorkbook du fichier joint :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim P As Range, ncol%, x$, y$, d As Object, d1 As Object, i&, w As Worksheet, tablo, a, b, j%
Set P = Sh.[A2:AY143] 'à adapter
ncol = P.Columns.Count
x = "recap s" 'texte à adapter, en minuscules
y = "SEANCE "
Set d = CreateObject("Scripting.Dictionary")
Set d1 = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
d1.CompareMode = vbTextCompare
Application.ScreenUpdating = False
If LCase(Sh.Name) Like x & "#*" Then
    P.Offset(2) = "" 'RAZ
    i = Val(Mid(Sh.Name, Len(x) + 1))
    On Error Resume Next
    Set w = Sheets(y & i)
    On Error GoTo 0
    If w Is Nothing Then Exit Sub
    tablo = w.[A1].CurrentRegion.Resize(, 6) 'matrice, plus rapide
    For i = 2 To UBound(tablo)
        x = tablo(i, 2)
        If x <> "" And Not d.exists(x) Then d(x) = d.Count + 1
        y = x & Chr(1) & tablo(i, 3) & Chr(1) & tablo(i, 6)
        d1(y) = d1(y) + 1 'comptage
    Next i
    If d.Count = 0 Then Exit Sub
    '---restitution---
    a = d.keys: b = d.items
    tablo = P 'matrice, plus rapide
    For i = 3 To d.Count + 2
        x = a(i - 3)
        tablo(i, 1) = b(i - 3): tablo(i, 2) = x
        For j = 3 To ncol
            y = x & Chr(1) & tablo(1, j) & Chr(1) & tablo(2, j)
            If d1.exists(y) Then tablo(i, j) = d1(y)
    Next j, i
    P.Resize(d.Count + 2) = tablo
ElseIf LCase(Sh.Name) = "global seances" Then
    P.Offset(2) = "" 'RAZ
    For Each w In Worksheets
        If LCase(w.Name) Like x & "#*" Then
            Workbook_SheetActivate w 'lance la macro
            tablo = w.Range(P.Address) 'matrice, plus rapide
            For i = 3 To UBound(tablo)
                y = tablo(i, 2)
                If y <> "" And Not d.exists(y) Then d(y) = d.Count + 1
                For j = 3 To ncol
                    If tablo(i, j) <> "" Then d1(y & j) = d1(y & j) + tablo(i, j)
            Next j, i
        End If
    Next w
    If d.Count = 0 Then Exit Sub
    '---restitution---
    a = d.keys: b = d.items
    tablo = P 'matrice, plus rapide
    For i = 3 To d.Count + 2
        y = a(i - 3)
        tablo(i, 1) = b(i - 3): tablo(i, 2) = y
        For j = 3 To ncol
            tablo(i, j) = d1(y & j)
    Next j, i
    P.Resize(d.Count + 2) = tablo
End If
End Sub
La macro travaille sur les plages A2:AY143 des feuilles "recap" et "Global seances" et les recalcule, elles ne contiennent plus de formules.

Bonne nuit.
 

Pièces jointes

  • doc escalade nov 2019 question sommes(2).xlsm
    499.5 KB · Affichages: 1
Dernière édition:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…