XL pour MAC Somme issue d'une recherche sur plusieurs feuilles

fpinet

XLDnaute Nouveau
Bonjour,
Grand débutant, j'ai besoin d'aide pour une formule, je vais essayer d'être précis. Je cherche à réaliser la somme de données récupéré sur plusieurs onglets (plus de 10 au final) d'un classeur. J'ai tenté d'utiliser la fonction sommeprod et rechercheV mais je coince.
Le plus est que regardiez le fichier exemple que je viens de préparer.

Merci pour votre aide
 

Pièces jointes

  • TEST.xlsx
    27.5 KB · Affichages: 22

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Bonjour,

>Pourquoi utilise-t-on un dLig.RemoveAll ou un dCol.Remove all sur le code de la fonction SD3D triée ?

-Création de l'index lignes non trié
-Tri des clés
-Raz dictionnaire
-Création dictionnaire à nouveau mais avec les clés triées

VB:
  Set dLig = CreateObject("Scripting.Dictionary")    ' Index lignes
  n = 0
  For s = début To fin                               ' Parcours de toutes les feuilles
     a = Sheets(s).Range(critLigne).Value            ' Lecture dans un Array a()
     For Each c In a
      If c <> "" Then
        tmp = CStr(c)
        If Not dLig.exists(tmp) Then dLig(tmp) = ""
      End If
     Next c
  Next s
  crit1 = dLig.keys: Tri crit1, LBound(crit1), UBound(crit1) ' Tri des critères
  dLig.RemoveAll       ' Raz dictionnaire
  For i = 0 To UBound(crit1): dLig(crit1(i)) = i + 1: Next   ' Création index lignes trié

Boisgontier
 

zebanx

XLDnaute Accro
Rebonjour à tous

@job75, @BOISGONTIER
Une petite utilité potentielle complémentaire par rapport à 2 de vos exemples de propositions en introduisant un coefficient "-" devant chaque feuille pour laquelle on ne souhaite pas additionner les informations mais les retrancher.

Cela évite de modifier inutilement les tableaux.
Et avec l'utilisation de w.index plutôt que de w.name, d'avoir directement les différences entre deux journées pour contrôle de différence.

Les codes sont vraiment modifiées à la marge.
Sauf erreur, j'avais déjà vu une fonction faite par JOB75 qui permettait de traiter une différence avec la feuille précédente en se référant sur l'adresse. Là, on a plusieurs feuilles possibles et un travail sur une référence.

Bonne journée
 

Pièces jointes

  • Fonction3DConsoColNumMult.xlsm
    25.7 KB · Affichages: 8
  • Private sub job75_add_coeff.xlsm
    80.6 KB · Affichages: 6
Dernière édition:

fpinet

XLDnaute Nouveau
Bonjour fpinet, bienvenue sur XLD, salut Jocelyn,

Jocelyn d'évidence tes résultats sont faux.

Puisqu'il faut un fichier .xlsm autant utiliser une fonction VBA :
VB:
Function SommeFeuilles(cible$, col%)
Application.Volatile
Dim w As Worksheet, tablo, i&
For Each w In Worksheets
    If w.Name <> Application.Caller.Parent.Name Then
        tablo = w.UsedRange.Resize(, col + 1) 'matrice, plus rapide
        For i = 1 To UBound(tablo)
            If tablo(i, col) = cible Then _
                If IsNumeric(tablo(i, col + 1)) Then SommeFeuilles = SommeFeuilles + tablo(i, col + 1)
        Next
    End If
Next
End Function
Le code doit être placé impérativement dans un module standard.

Formule en C4 de la feuille "DONNEES", à tirer vers le bas :
Code:
=SommeFeuilles(B4;1)
Le 2ème argument indique le numéro de colonne de la recherche dans les feuilles.

La fonction est volatile : elle se recalcule quand on modifie des données dans une feuille quelconque.

Bonne journée.

Bonjour,
Je reviens vers vous car je souhaite créer la même fonction qui prendrai la colonne d'origine +3, J'ai donc repris le code VBA en cherchant à le modifier et en créant un module 2. Je renomme la fonction et modifie col +1 en col +3 mais, j'ai certainement manqué quelque chose. Pouvez vous m'aider à comprendre.
Merci par avance et bonne fin de journée
Voici le code


Function SommeFeuillesEtud(cible$, col%)
Application.Volatile
Dim w As Worksheet, tablo, i&
For Each w In Worksheets
If w.Name <> Application.Caller.Parent.Name Then
tablo = w.UsedRange.Resize(, col + 3) 'matrice, plus rapide
For i = 1 To UBound(tablo)
If CStr(tablo(i, col)) = cible Then _
If IsNumeric(tablo(i, col + 3)) Then SommeFeuillesEtud = SommeFeuillesEtud + tablo(i, col + 3)


Next
End If
Next
End Function
 

Discussions similaires

Statistiques des forums

Discussions
312 164
Messages
2 085 877
Membres
103 007
dernier inscrit
salma_hayek