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

  • Initiateur de la discussion Initiateur de la discussion fpinet
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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

Dernière édition:
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour