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 de plages de cellules de différentes feuilles vers une plage de cellules [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 4
    Par défaut Somme de plages de cellules de différentes feuilles vers une plage de cellules
    Bonjour Bonjour !

    Je suis nouveau sur le forum et débutant en VBA, et je suis en train de developper un outil excel. J'ai un petit souci que je n'arrive pas à resoudre en cherchant sur le net et que je vais essayer d'expliquer clairement (contrairement à l'intitulé de la discussion qui lui ne l'est pas...) :

    L'utilisateur de l'outil que je code va pouvoir créer des feuilles excel type "Business Case" pour différents items, tous de même structure et qui auront donc des noms "incrémentés" suivant le n° de l'item.
    Le classeur contient aussi une feuille "Business Case Global" qui a la même structure que les feuilles "Business Case".
    Je voudrais que chaque cellule de la plage "D16:N58" de "Business Case Global" soit la somme des mêmes cellule de chaque feuille "Business Case".
    Voici le code que j'ai pour l'instant, qui ne marche pas puisqu'il me renvoie une plage de cellule identique à celle d'une feuille "Business Case" :
    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
     
     
    Sub addition_plages()
        Dim Tableau() As Integer
        Dim x As Integer, y As Integer
        Dim i As Integer, j As Integer
        Dim Sh As Variant
     
    For Each Sh In ActiveWorkbook.Sheets
        If Left(Sh.Name, 16) = "Proxi - BC (Item" Then
     
        x = 47
        y = 13
     
     
        ReDim Tableau(16 To x, 4 To y)
     
     
        For i = 16 To x
            For j = 4 To y
            Dim c As CellFormat
            For Each c In Sh.Range("D16:N58")
     
     
            Tableau(i, j) = Sh.Cells(i, j).Value + Tableau(i, j)
            Next j
        Next i
     
      With Sheets("Proxi-BC Général")
    .Range("D16:N58") = Tableau
     
        End If
    Next
     
    End With
    End Sub
    J'espère que j'ai été clair & Merci d'avance pour votre aide !

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    pas besoin de VBA pour cela ... en supposant que les noms de feuilles concernés sont de "Proxi - BC (Item1)" à "Proxi - BC (Item16)"
    place en D16 sur ta feuille récap la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME('Proxi - BC (Item1):Proxi - BC (Item16)'!D16)
    et copie cela dans toute ta Zone D16:N58...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 4
    Par défaut
    Merci de ta réponse mais cela ne semble pas fonctionner... Un "#REF!" s'affiche sur D16 quand je rentre ta formule en D16 sur le BC Général alors que j'ai rentré 2 Item et qu'il existe donc dans le classeur seulement Proxi - BC (Item1) et Proxi - BC (Item2).
    Peut-être est-ce dû au fait que le Proxi - BC (Item16) de ta formule n'existe pas dans le cas où l'utilisateur n'est pas allé jusqu'à ajouter un 16eme item (et donc crée une feuille Proxi - BC (Item16) ) ?

    En fait le souci est que mon nombre de feuilles type "Business Case" et donc mon nombre de cellules à sommer dans la cellule correspondante de "Business Case Global" est variable..

    Par exemple pour la case D16 de "Business Case Global":
    N'y aurait-il pas un moyen de parcourir le nom de chaque feuille de mon classeur et sommer les cases D16 de chaque feuille dont le nom commence par x mêmes caractères ( dans mon cas les 15 premiers caractères: "Proxi - BC Item" ).

    Et in finé pour généraliser cette manip à toute les cellules des range D16:N58

    Merci d'avance pour votre aide !

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,


    oui je sais pas pourquoi j'avais compris qu'il y avais 16 feuilles ... et que ce nombre de feuille était fixe..


    Solution 1/ si l'on reste dans l'idée précédente on peu imaginer que tu est une feuille "vide" nommée last par exemple et placé tout à droite de ta liste de feuilles (onglet)... et utiliser une formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME('Proxi - BC (Item1):last'!D16)
    ainsi si tu rajoute des feuilles entre "Proxi - BC (Item1)" et "last" elles seront prise en compte dans ton calcul...



    Solution 2/ on conserve l'idée de la formule "multi-feuille" mais l'on crée une procédure VBA pour modifier ces formules en fonctions du nombre de feuilles crées ...


    Solution 3/ on reviens sur ta solution sans formules Excel et l'on effectue le calcul en VBA sur l'activation par exemple de ta feuille récap...


    qu'en pense-tu

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 4
    Par défaut
    Merci bbil de ta réponse rapide !

    Citation Envoyé par bbil Voir le message
    Solution 1/ si l'on reste dans l'idée précédente on peu imaginer que tu est une feuille "vide" nommée last par exemple et placé tout à droite de ta liste de feuilles (onglet)... et utiliser une formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME('Proxi - BC (Item1):last'!D16)
    Ca marcherait mais je veux que l'outil fasse apparaître le moins d'onglets (simplicité de compréhension et d'utilisation obligent...) donc j'opterais plus pour les 2 & 3


    Citation Envoyé par bbil Voir le message
    Solution 2/ on conserve l'idée de la formule "multi-feuille" mais l'on crée une procédure VBA pour modifier ces formules en fonctions du nombre de feuilles crées ...
    Citation Envoyé par bbil Voir le message
    Solution 3/ on reviens sur ta solution sans formules Excel et l'on effectue le calcul en VBA sur l'activation par exemple de ta feuille récap...

    Je pense que les 2 solutions iraient mais dans les deux cas je ne sais pas comment l'implémenter... A vrai dire j'étais plus parti pour une solution "tout vba" donc aurais-tu une idée de comment implémenter ta solution 3 ?

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonsoir,


    tiens essai :

    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
    Sub AdditionPlage()
        Dim sh As Worksheet
        Dim tb()
        Dim tbTOTAL()
        Dim rDest As Range 'Plage total général
        Set rDest = ThisWorkbook.Sheets("Proxi-BC Général").Range("D16:N58")
        ReDim tbTOTAL(1 To rDest.Rows.Count, 1 To rDest.Columns.Count)
     For Each sh In ThisWorkbook.Worksheets
      If sh.Name Like "Proxi - BC (Item*" Then
        tb = sh.Range("D16:N58").Value
        AddTableau2Dim tbTOTAL, tb
      End If
     Next
     rDest.Value = tbTOTAL
    End Sub
     
    '
    ' Rajoute le tableau tb() au tableau total ..
    '
    Function AddTableau2Dim(ByRef tbTOTAL() As Variant, ByRef tb() As Variant) As Boolean
     
      Dim i As Integer
      Dim j As Integer
      On Error GoTo ErreurDimensions ' à voir comment tu veux faire la gestion d'erreur au cas ou les 2 tableaux ne soit pas de même taille ..
      For i = 1 To UBound(tbTOTAL, 1)
        For j = 1 To UBound(tbTOTAL, 2)
          tbTOTAL(i, j) = tbTOTAL(i, j) + tb(i, j)
        Next
      Next
      AddTableau2Dim = True
      Exit Function
    ErreurDimensions:
      Debug.Print "Erreur les tableaux doivent être de même dimension"
      Stop
    End Function

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

Discussions similaires

  1. [XL-2013] Somme mensuelle de nombres à retrouver dans différentes feuilles
    Par bolide7 dans le forum Excel
    Réponses: 21
    Dernier message: 03/02/2016, 20h49
  2. Réponses: 15
    Dernier message: 25/07/2014, 17h29
  3. [XL-2007] copier cellules de différentes feuilles sur une feuille recap
    Par izardjacky dans le forum Excel
    Réponses: 1
    Dernier message: 25/08/2013, 14h08
  4. Réponses: 1
    Dernier message: 29/05/2012, 14h31
  5. Valider une plage de cellules sur plusieurs feuilles via une listbox
    Par lio59 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/08/2009, 13h52

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