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 :

Fonction somme si à l'aide d'une macro [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Agent administratif
    Inscrit en
    Octobre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent administratif
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2016
    Messages : 18
    Par défaut Fonction somme si à l'aide d'une macro
    Bonjour,

    Je vais tenter d'expliquer mon problème et il me semble obligatoire de joindre un fichier excel test afin que l'on puisse comprendre mon besoin.

    Je précise que je débute dans les macros.

    J'extrais des données brutes sous forme de tableaux, je vais avoir plusieurs onglets avec des données différentes mais sous le même format. Les données sont brutes c'est à dire sans formule.
    J'ai besoin de générer automatiquement la fonction somme dans ma colonne C là où B="Somme :".
    En effet je dois modifier certains montants et j'ai besoin que la somme change automatiquement.
    Sur mes vrais tableaux je travaille sur une cinquantaine d'onglet, d'où mon besoin de générer cette macro sur tous mes onglets.
    Je sais générer une boucle avec une fonction somme, mais je patauge dès que je dois mettre des conditions....
    Je pars sur ce type de macro de base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub macro1()
    Dim Ws As Worksheet
    For Each Ws In ThisWorkbook.Worksheets
    Ws.Activate
    Range("c4").Formula = "sum(c2:c3"
    Next Ws
    End Sub
    Je ne sais même pas si ce que je veux faire et réalisable vu que j'ai encore du mal à bien raisonner avec les macros.

    Je vous remercie par avance
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    Il est inutile et mal vu de placer un fichier des le premier poste, pour d'evidentes raisons de securite d'une part, mais egalement pour forcer les membres souhaitant faire appel au forum a clairement expliquer leur objet de blocage.

    la fonction SOMME.SI s'ecrit SUMIF() en VBA.

    En utilisant l'enregisteur de macro, tu pourras egalement faire avancer ton idee.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,
    Voilà un exemple sur une feuille,
    pour la suite il faut rechercher comment boucler sur l'ensemble de tes feuilles et adapter le code donné :
    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
    Sub Somm()
    Dim Som@, SomTotal@
     
        Debut = 2 'on démarre à ligne 2 => en-tête non pris en compte
        DerL = Cells(Rows.Count, 2).End(xlUp).Row 'on définit la dernière ligne en colonne B
        VA = Range("B1:B" & DerL).Value 'on créer une variable tableau permettant la recherche des cellules contenant somme
     
        For i = 2 To UBound(VA) ' on boucle sur l'ensemble du tableau à la recherche de Somme
            If i = UBound(VA) Then ' Si i = au plus grand indice du tableau qui ici représente aussi la dernière ligne
                Range("C" & i).Value = SomTotal 'la dernière cellule en C est = à la somme total des sommes
            ElseIf VA(i, 1) Like "*Somme*" Then 'on vérifie la position de Somme dans le tableau
                Range("C" & i).Formula = "=SUM(C" & Debut & ":C" & i - 1 & ")" 'quand somme est trouvé on applique la formule
                Som = Range("C" & i).Value
                Debut = i + 1 'on attribue la nouvelle valeur à début
                SomTotal = SomTotal + Som 'on additionne chaque sommes trouvées
            End If
        Next
     
    End Sub
    Edit : Ajout des commentaires
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  4. #4
    Membre averti
    Homme Profil pro
    Agent administratif
    Inscrit en
    Octobre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent administratif
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2016
    Messages : 18
    Par défaut
    Merci beaucoup pour la réponse, effectivement cela fonctionne pour mes Sous totaux.
    Y a-t-il une solution afin de reprendre en dernière ligne la somme de mes sous-totaux ?
    J'ai rajouté ce qu'il fallait afin de boucler sur l'ensemble de mes feuilles :

    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
    Sub Som()
    Dim Ws As Worksheet
    For Each Ws In ThisWorkbook.Worksheets
    Dim Som@, SomTotal@
        Debut = 2
        DerL = Cells(Rows.Count, 2).End(xlUp).Row
        VA = Range("B1:B" & DerL).Value
     
        For i = 2 To UBound(VA)
            If i = UBound(VA) Then
                Range("C" & i).Value = SomTotal
            ElseIf VA(i, 1) Like "*Somme*" Then
                Range("C" & i).Formula = "=SUM(C" & Debut & ":C" & i - 1 & ")"
                Som = Range("C" & i).Value
                Debut = i + 1
                SomTotal = SomTotal + Som
            End If
        Next
     Next Ws
    End Sub
    Est-il possible d'avoir une explication sur l'ensemble du code afin que je puisse l'adapter au besoin ?

    Merci d'avance!

  5. #5
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Re,
    - Pour les commentaires je les ai rajouté dans mon précédent post

    Ci-dessous modification du code pour mettre la dernière ligne en somme + boucle sur feuille
    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
    Sub Somm2()
    Dim ws As Worksheet, i&, Som$, SomTotal$
     
    For Each ws In ThisWorkbook.Worksheets
        Debut = 2
        With ws
            DerL = .Cells(Rows.Count, 2).End(xlUp).Row
            VA = .Range("B1:B" & DerL).Value
     
            For i = 2 To UBound(VA)
                If i = UBound(VA) Then
                    .Range("C" & i).Formula = "=" & SomTotal
                ElseIf VA(i, 1) Like "*Somme*" Then
                    .Range("C" & i).Formula = "=SUM(C" & Debut & ":C" & i - 1 & ")"
                    Som = .Range("C" & i).Address
                    Debut = i + 1
                    SomTotal = SomTotal & "+" & Som
                End If
            Next
                SomTotal = ""
        End With
    Next
     
    End Sub
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  6. #6
    Membre averti
    Homme Profil pro
    Agent administratif
    Inscrit en
    Octobre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent administratif
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2016
    Messages : 18
    Par défaut
    Re,

    Il y a un soucis lorsque j'exécute la macro sur la ligne "For i = 2 To UBound(VA)"
    qui se surligne en jaune et me dit qu'il y a une incompatibilité de type... Ligne 10 sur ton code.

    Merci pour les explications sur ton premier post, je saisie un peu plus le principe

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/12/2014, 13h59
  2. Aide pour une macro fonction XL 2010
    Par jphostier dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/07/2013, 12h36
  3. [VBA-E] Copier une macro dans un fichier à l'aide d'une macro
    Par Capsule dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/01/2007, 20h05
  4. [VBA-E]Ouvrir une image jpg àl'aide d'une macro
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/03/2006, 09h47
  5. [VBA] Excell : demande d'aide pour une macro
    Par Fealendril dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/01/2006, 16h28

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