IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Somme sur plusieurs feuilles [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Femme Profil pro
    Gestionnaire administrative
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Gestionnaire administrative
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Points : 73
    Points
    73
    Par défaut Somme sur plusieurs feuilles
    Bonjour tout le monde !

    Voilà, j'ai un classeur Excel avec x feuilles (une feuille s'ajoute chaque semaine, il y en a donc aujourd'hui 36).

    Sur chaque feuille j'ai une colonne avec le nom du commercial et à côté un certain nombre de chiffres le concernant. Ce commercial n'est pas situé à la même ligne sur chaque feuille.

    En plus de ces feuilles par semaine, j'ai une feuille "Récap" qui fait la somme de chaque colonne pour chaque commercial. Je souhaiterai faire cela via un code VBA mais je ne vois pas trop comment m'y prendre. Je voulais faire une boucle For suivie d'une Recherche Verticale mais je n'arrive pas à construire mon code.

    Pouvez-vous m'aidez ?

    Merci par avance.

    Auriane

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 161
    Points : 155
    Points
    155
    Par défaut
    Bonjour,
    un petit fichier d"exemple de ce que tu cherche a faire serait le bienvenu

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour,

    le plus simple serait d'utiliser un filtre …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2009
    Messages : 15
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Voici un début de réponse.
    -> Boucle sur les feuilles
    -> Recherche d'une valeur dans celles-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    Sub CalculeSommeFeuilles()
    '***********************************************
    'Plusieurs façons pour boucler sur les feuilles
    '***********************************************
    'Boucle For Next
    Dim NbF As Integer
    NbF = ThisWorkbook.Sheets.Count
    For f = 1 To NbF
        'Affichage Nom de la feuille
        Debug.Print Sheets(f).Name
    Next
     
    'Boucle Foreach/next
    For Each f In ThisWorkbook.Sheets
        'Affichage Nom de la feuille
        Debug.Print f.Name
     
        'Recherche de "TOTO" dans la feuille
       Recherche = cherchC(f.Name, "TOTO")
       If Recherche <> "" Then
        Debug.Print "Valeur trouvée en : " & Recherche
       End If
     
    Next
    End Sub
     
     
    Function cherchC(nomF As String, valCherch As String)
    'fonction de recherche...
    '**********************************************************
    ' recherche la valeur 'valCherch' et nous indique le
    ' L'adresse de la cellule trouvée
    '**********************************************************
    Dim vc As Variant
    Sheets(nomF).Activate
    Sheets(nomF).Cells(1, 1).Activate
    Set vc = Cells.Find(what:=valCherch, lookAt:=xlWhole, After:=ActiveCell, SearchOrder:=xlByColumns, SearchDirection:=xlNext, LookIn:=xlValues, MatchCase:=False, SearchFormat:=False)
    If Not vc Is Nothing Then
      cherchC = vc.Address
    End If
    End Function

    Pour le reste ... Sans exemple de fichier concret cela risque d'être difficile de proposer quelque chose.

    Cordialement,
    Jordane

  5. #5
    Membre régulier
    Femme Profil pro
    Gestionnaire administrative
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Gestionnaire administrative
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Points : 73
    Points
    73
    Par défaut
    Voilà un fichier exemple. Dans la feuille "Récapitulatif" je veux calculer la somme des lignes des autres feuilles correspondantes aux même nom de commercial. Il n'apparaît qu'une fois sur chaque feuille mais pas forcément sur la même ligne.

    Merci.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre régulier
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Septembre 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 51
    Points : 93
    Points
    93
    Par défaut
    Regards plutôt la fonction sommeproduit plutôt que de faire du code VBA.

  7. #7
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut somme pour plusieurs feuilles
    Bonsoir Jordane45?

    Pour ma gouverne ne faudrait-il pas boucler sur f-1. c'est à dire toutes les feuilles - la feuille récap qui me semble t-il sera comptabilisée dans le comptage.

    Contrairement à mon habitude, je n'ai pas testé.

    Cordialement.

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2009
    Messages : 15
    Points : 44
    Points
    44
    Par défaut
    @nibledispo : Oui ..et non..
    en fait, ce n'est qu'un exemple que j'ai donné.. on peut y mettre un test conditionnel du genre IF NomFeuille = "TOTO" Then je ne fais rien...

    Il faut bien entendu adapter le code à ses besoins.

    ----------------------------------------------------------------
    Je vais regarder le fichier fourni et voir si je peux vous proposer quelque chose de plus concret.

    Bonjour,

    Je pense qu'avec une petite fonction personnalisée,
    -> basée sur du sommeprod
    On peut réaliser ce que vous souhaitez.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Function Calc(Nom As String, Col_Nom As String, Col_val As String)
    Dim Som As Double
    Dim Nbf As Integer
    Nbf = ThisWorkbook.Sheets.Count
    critere = "" & Nom & ""
    For f = 1 To Nbf
    'Pour chaque feuille, récupération du montant se trouvant à l'intersection Ligne/colonne
    ' correspondant a la ligne NOM et la Colonne des valeurs à calculer
        If ActiveSheet.Name <> Sheets(f).Name Then
        NomFeuil = Sheets(f).Name
            formule = "('" & NomFeuil & "'!" & Col_Nom & "=""" & critere & """)*('" & NomFeuil & "'!" & Col_val & ")"
            Sommeprod = "SumProduct(" & formule & ")"
            Debug.Print Sommeprod
            Sp = Application.Evaluate(Sommeprod)
            Som = Som + Sp
        End If
    Next
    Calc = Som
    End Function
    =>> Code à placer dans un Module de votre classeur.

    Ensuite, pour l'utiliser, c'est comme une formule "normale"

    Exemple.. Dans la cellule F4 de votre feuille récapitulatif, écrivez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =Calc(C4;"C4:C20";"F4:F20")
    Ce qui, pour l'exemple que vous nous avez donné dans votre fichier est égal à 7.

    Pour finir, copier la formule sur les autres cellules de votre feuille (en ajustant si nécéssaire les paramètres de la fonction )
    => pour la colonne G ( TOTAL), vous aurez :
    =Calc(C4;"C4:C20";"G4:G20")

    Etc..


    Voilou.
    Fichiers attachés Fichiers attachés

  9. #9
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonjour,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD(SOMME.SI(INDIRECT("'"&nomsfeuilles&"'!c4:c100");$C4;DECALER(INDIRECT("'"&nomsfeuilles&"'!f4:f100");;COLONNE()-6)))
    nomsfeuilles est un champ qui contient les noms des feuilles à additionner.

    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD(SOMME.SI(INDIRECT("'"&"s"&LIGNE($35:$36)&"'!c4:c100");$C4;DECALER(INDIRECT("'"&"s"&LIGNE($35:$36)&"'!f4:f100");;COLONNE()-6)))
    Jacques Boisgontier

  10. #10
    Membre régulier
    Femme Profil pro
    Gestionnaire administrative
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Gestionnaire administrative
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Points : 73
    Points
    73
    Par défaut
    Merci à tous ça a bien fonctionné

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Somme sur plusieurs feuilles conditionnée
    Par pascalcom dans le forum Excel
    Réponses: 7
    Dernier message: 05/05/2013, 22h28
  2. Somme.si sur plusieurs feuilles
    Par Crepuscules dans le forum Excel
    Réponses: 2
    Dernier message: 21/04/2013, 19h37
  3. Formules somme d'un critère sur plusieurs feuilles
    Par f4steph dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 28/06/2012, 13h55
  4. [XL-2010] somme.si sur plusieurs feuilles dans un classeur
    Par biquet52 dans le forum Excel
    Réponses: 3
    Dernier message: 21/10/2011, 14h14
  5. [Excel 2003] Somme.si sur plusieurs feuilles
    Par leo2v2o dans le forum Excel
    Réponses: 6
    Dernier message: 24/01/2007, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo