Somme de plusieurs onglets

patoq

XLDnaute Occasionnel
bonjour tout le monde,

Alors voila j'ai un onglet "besoins" qui doit être une synthése des autres onglets.

J'aurai besoin d'une formule qui additionne plusieurs valeurs présentes sur plusieurs onglets dans ce tableau récap.

Exemple ,additionner tous les 50181A de tous les onglets et les reporter dans l'onglet "besoins" en fonction d'une date au dessus.

Merci d'avance pour votre aide.

Cdt
Pat
 

tbft

XLDnaute Accro
Re : Somme de plusieurs onglets

bonjour

Est que le nombre de folio est toujours le même???

Je pense qu'il faudra passer par une macro ou par des calculs intermédiaires... a moins que les Tableaux croisés dynamiques fassent l'affaire.
 

patoq

XLDnaute Occasionnel
Re : Somme de plusieurs onglets

Bonsoir tout le monde et merci de vous interesser à mon problème.

Bien sur Robert ,une solution vba me conviendrait.

Je pensais qu'une formule paraissait plus simple, mais des sommes.si sur tous les onglets c'est fastidieux!!

Tbft, malheureusement le nombre d'onglets pourra varier.

Au départ je pensais faire qu'un onglet et une solution vba par userform; mais il y a plein de composants qui ne reviennent qu'une fois ( chaque onglet représente une nomenclature), d'ou l'usine à gaz si je part la dessus.

Voila ,si vous voulez plus de détails ,n'hésitez pas.

Merci pour tout
Cdt
Pat
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Somme de plusieurs onglets

Bonjour,

A tester ( avec fonction perso matricielle: S3D(début, fin, critLigne, CritColonne, ChampSomme))

Cette fonction perso matricielle calcule la somme de plusieurs onglets suivant 2 critères.
-Les listes des composants et des dates sont obtenues et triées automatiquement par la fonction.
-Cette fonction est rapide: grâce à Dictionary, la recherche de la ligne et de la colonne du tableau de cumul Tbl() se fait très rapidement.

-Sélectionner A1:O104
=s3D(2;14;"B3:B80";"H2:T2";"H3:T80")
valider avec maj+ctrl+entrée

2 -> feuille début
14 -> feuille fin

Trié par composant

Sélectionner A1:O104
=s3DTriée(2;14;"B3:B80";"H2:T2";"H3:T80")
valider avec maj+ctrl+entrée

http://boisgontierjacques.free.fr/fichiers/Matriciel/FonctionS3D2criteres.xls
http://boisgontierjacques.free.fr/fichiers/Matriciel/Fonction2crit23D.xls


JB
 

Pièces jointes

  • Besoins.xls
    750.5 KB · Affichages: 84
  • FonctionS3D.zip
    184.9 KB · Affichages: 46
Dernière édition:

patoq

XLDnaute Occasionnel
Re : Somme de plusieurs onglets

Bonsoir JB,

Tout d'abord merci et bravo, waouhhhh j'aurais jamais trouvé; rien que le code j'ai mal à la tête!!!

En tout cas, cela a l'air de marcher, plus qu'à le tester sur d'autres plages .....


Merci encore

Cdt
Pat
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Somme de plusieurs onglets

Bonsoir le fil, bonsoir le forum,

En pièce jointe ton fichier modifié avec le code commenté. Les macro 2 et 3 ne sont pas utiles mais te permettent de vérifier rapidement le résultat. La macro 2 montre les onglets filtrés, la 3 supprime les filtres.
Pour lancer la macro j'ai utilisé la macro événementielle du double-clic dans l'onglet besoins. Double-clique dans la cellule A1. Une boîte d'entrée (InputBox) te demande quel est le composant à calculer. Tape le nom du composant et valide. Les calculs se font, le curseur se place en colonne A de la ligne du composant...

Le code :
Code:
Sub Macro1()
Dim be As String 'déclare la variable be (Boîte d'Entrée)
Dim ob As Object 'déclare la variable ob (Onglet Besoins)
Dim ad As Range 'déclare la variable ad (Anciennes Données)
Dim os As Object 'déclare la variable os (Onglet Source)
Dim dl As Long 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim r As Range 'déclare la variable r (Recherche)
Dim i As Byte 'déclare la variable i (Incrément)
Dim t13d(1 To 13) As Double 'déclare le tableau de variables tv (Tableau des 13 Dates)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim li As Long 'déclare la variable li (LIgne)

be = InputBox("De quel composant voulez-vous faire le calcul ?", "COMPOSANT") 'définit la boîte d'entrée be
If be = "" Then Exit Sub 'si la boîte n'est pas renseignée, sort de la procédure
Set ob = Sheets("besoins") 'définit l'onglet besoins ob
If MsgBox("Voulez-vous effacer toutes les anciennes données ?", vbYesNo, "ATTENTION") = vbYes Then
    Set ad = ob.Range("A1").CurrentRegion 'définit la plage des anciennes données ad
    Set ad = ad.Offset(1, 1).Resize(ad.Rows.Count - 1, ad.Columns.Count - 1) 'redéfinit la plage sans la première ligne te la première colonne
    ad.ClearContents 'efface le contenue de la plage ad
End If
For Each os In Sheets 'boucle 1 : sur tous les onglets du classeur
    If Not os.Name = "Feuil1" And Not os.Name = "besoins" Then 'condition 1 : si le nom de l'onglet né st ni "Feuil1" ni "besoins"
        dl = os.Cells(Application.Rows.Count, 2).End(xlUp).Row 'de'finit la dernière ligne éditée dl de la colonne 2 (=B) de l'onglet os
        Set pl = os.Range("B3:B" & dl) 'définit la plage pl
        Set r = pl.Find(be, , xlValues, xlWhole) 'définit la recherche r (recherche le composant défini dans be dans la plage pl)
        If Not r Is Nothing Then 'condition 2 : si il existe au moins une occurrence
            os.Range("A2").AutoFilter Field:=2, Criteria1:=be 'filtre l'onglet os par rapport au compossant
            For i = 1 To 13 'boucle 2 : sur les 13 variable du tableau des 13 dates t13d
                'boucles 3 : sur toutes les celllule visible de la plage pl décalée de (5+i) colonnes
                For Each cel In pl.SpecialCells(xlCellTypeVisible).Offset(0, 5 + i)
                    'attribut à la variable indexée t13d(i) la valeur de la cellule cel ajoutée à la variable t13d(i) déja entrée
                    t13d(i) = t13d(i) + CDbl(cel.Value)
                Next cel 'prochaine cellule de la boucle 3
            Next i 'prochaine variable de la boucle 2
            os.Range("A2").AutoFilter 'supprime le filtre automatique
        End If 'fin de la condition 2
        'redéfinit la recherche r (recherche le composant définit par be dans la première colonne de l'onglet ob)
        Set r = ob.Columns(1).Find(be, , xlValues, xlWhole)
        If Not r Is Nothing Then 'condition : si il existe au moins une occurrence trouvée
            li = r.Row 'définit la ligne li de l'occurrence trouvée
            For i = 1 To 13 'boucle 4 : sur les 13 variable du tableau t13d
                'renvoie dans la cellule de l'occurrence trouvée décalée de (i+1) colonne, sa propre valeur ajoutée à la variable t13d(i)
                ob.Cells(li, i + 1).Value = CDbl(t13d(i) + ob.Cells(li, i + 1).Value)
            Next i 'prochaine varaible de la boucle 4
            ob.Select 'sélectionne l'onglet ob
            ob.Cells(li, 1).Select 'sélectionne la cellule en colonne A de l'occurrence trouvée
        Else 'sinon
            MsgBox "Composant non trouvé dans l'onglet " & Chr(34) & "besoins" & Chr(34) & " !": Exit Sub 'message. sort de la procédure
        End If 'fin de la condition
        For i = 1 To 13 'boucle 5 : sur les 13 variables du tableau t13d
            t13d(i) = 0 'réinitialise la variable t13d(i)
        Next i 'prochaine variable de la boucle 5
    End If 'fin de la condition 1
Next os 'prochain onglet de la boucle 1
End Sub

[Édition]
Bonsoir Jacques on s'est croisé... (iménerve ce BOISGONTIER, iménerve grave tellement tout est facile avec lui...)

Le fichier :
 

Pièces jointes

  • Patoq_v01.xlsm
    214.9 KB · Affichages: 48
Dernière édition:

patoq

XLDnaute Occasionnel
Re : Somme de plusieurs onglets

Bonjour tout le monde,

JB : A quoi correspond la séquence 2;14 dans la formule ,j'ai juste modifier la place d'un onglet et ça dérape;mais rien de grave.

Je pense que c'est la position des onglets ( de l'onglet 2 à l'onglet 14).

Sinon tout roule nickel

Merci
Cdt
Pat
 

Discussions similaires

Réponses
6
Affichages
389

Statistiques des forums

Discussions
312 282
Messages
2 086 771
Membres
103 391
dernier inscrit
lrol