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 automatique avec plage variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2018
    Messages : 4
    Par défaut Somme automatique avec plage variable
    Bonjour mesdames, Bonjour Messieurs !

    J'ai une colle surune Macro excel.
    J'ai donc un fichier excel sur lequel se trouve un TCD. Celui ci ne me permettant pas d'obtenir les résultats souhaités (je ne peux pas installer de modules complémentaires) je retravaille juste à coté de celui ci 2 colonnes qui me permette à l'aide de la macro suivante d'obtenir quasiment les valeurs voulues :

    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
     
    Sub MAJCouleurs()
     
    Application.ScreenUpdating = False
     
    Dim c As Range
    For Each WS In ActiveWorkbook.Worksheets
     
    'Formule remplissage des lignes blanches. Couleurs = 16777214
    Dim LigneBlanche
    LigneBlanche = "=IF(OR(RC8=""AGPRO"",RC8=""AGTEC"",RC8=""AGING"",RC8=""AGAPP""),0,RC[-3])"
     
    'Formules pour les sous totaux "Somme Eff. nec.". Couleurs = 1226495
    Dim SousTotalEffNec
    SousTotalEffNec = "=SUMIFS(R[-3]C:R[-1]C,R[-3]C[-13]:R[-1]C[-13],""<>""&"""")"
     
    'Forumles pour les sous totaux "Somme poids". Couleurs = 1226495
    Dim SousTotalPoids
    SousTotalPoids = "=SUM(R[-2]C:R[-1]C)"
     
    'Formule Total General. Couleur = 414452
    Dim TotalGeneral
    TotalGeneral = "=SUMPRODUCT((LEFT(R[-5]C2:R[-1]C2,5)=""Total"")*(R[-5]C:R[-1]C))"
     
    'Remplissage colonne R
    For Each c In WS.Range("R1:R140")
          If c.Interior.Color = 16777214 Then c.Formula = LigneBlanche
          If c.Interior.Color = 1226495 Then c.Formula = SousTotalEffNec
          If c.Interior.Color = 414452 Then c.Formula = TotalGeneral
    Next c
     
    For Each c In WS.Range("S1:S140")
          If c.Interior.Color = 16777214 Then c.Formula = LigneBlanche
          If c.Interior.Color = 1226495 Then c.Formula = SousTotalPoids
          If c.Interior.Color = 414452 Then c.Formula = TotalGeneral
    Next c
     
    Next WS
    End Sub
    Tout fonctionnes très bien. Cependant le problème est le suivant: Dans les formules "Somme..." les plages à prendre en compte sont de tailles différentes. Par consequent j'aimerais savoir si il existe un moyen pour faire un sorte que la macro détecte automatiquement la plage à prendre en compte ? Que ce soit en jouant sur les Couleurs (Ya surement mieux mais c'est peux être le plus simple) ou sur les résultats du TCD? Je ne sais pas

    En pièce jointe un petit fichier exemple avec 3 Services (Vs contre 150 en vrai)

    J'espère que je suis suffisamment clair... Sinon dites le moi je tenterais de faire mieux !

    Merci d'avance pour l'aide que vous m'apporterez !!
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Machiavelenfolie Voir le message
    j'aimerais savoir si il existe un moyen pour faire un sorte que la macro détecte automatiquement la plage à prendre en compte ?
    Il faudrait déjà que tu expliques comment se définie "la plage à prendre en compte".

    Peut-être que ceci peut t'aider : https://msdn.microsoft.com/fr-fr/lib.../ff839539.aspx

  3. #3
    Membre à l'essai
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2018
    Messages : 4
    Par défaut
    Bonjour Menhir,

    Déjà merci pour ton retour.

    Les plages à prendre en compte sont définis par la colonnes "Service" dans mon TCD, et la macro dont j'ai besoin, avec détection automatique de la plage, correspondrais aux sous totaux de la colonnes "Service"

    Merci pour le lien mais je t'avoue qu'étant un débutant dans le monde du VBA je comprend pas très bien l'application

  4. #4
    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,

    voir ce lien, est ce le même type de problématique ?
    https://www.developpez.net/forums/d1...rant-formules/
    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 ;)

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Approximativement en utilisant Range.Find /FindNext
    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
    Sub Totaux()
    Dim LastLig As Long, Deb As Long, Fin As Long
    Dim S As Double, R As Double
    Dim Prem As String
    Dim c As Range
     
    With Feuil2
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        Set c = .Range("B2:B" & LastLig).Find("Total", LookIn:=xlValues, lookat:=xlPart)
        Deb = 2
        If Not c Is Nothing Then
            Prem = c.Address
            Do
                Fin = c.Row - 1
                .Range("T" & Fin + 1).Formula = "=SUMIF(E" & Deb & ":E" & Fin & ",""<>"",R" & Deb & ":R" & Fin & ")"
                .Range("U" & Fin + 1).Formula = "=SUM(S" & Deb & ":S" & Fin & ")"
                Deb = Fin + 2
                R = R + .Range("T" & Fin + 1)
                S = S + .Range("U" & Fin + 1)
                Set c = .Range("B2:B" & LastLig).FindNext(c)
            Loop While Not c Is Nothing And c.Address <> Prem
        End If
        .Range("T" & LastLig).Resize(, 2) = Array(R, S)
    End With
    End Sub

  6. #6
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    j'ai regarder ton fichier et j'ai l'impression le resultat de Feuille2 par rapport à feuille1 c'est comme si tu avais utilisé la fonctionnalité Sous-total : Données - Plan - Sous-total

    est-ce cela ?

  7. #7
    Membre à l'essai
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2018
    Messages : 4
    Par défaut
    Merci pour tous vos retours.

    RyuAutodidacte :
    Oui ça y ressemble, je vais jeter un coup pour voir comment je peux adapter ça avec mon code déjà existant ! Merci beaucoup

    Mercatog :
    Merci beaucoup ! ça marche d'enfer, mais je n'arrive pas à le "fusionner" avec mon code pour que le tout s'exécute lors de l'activation d'un seul bouton... Et Etant débutante, puis je abuser de ton temps pour que tu m'explique comment cela fonctionne (histoire que je puisse le faire seul si l'occasion se représente)?

    Igloobel:
    Alors oui ça y ressemble, mais pas completement. Ya certain critère qui ne sont pas pris en compte par le TCD. Par exemple certain grade doivent compter pour 0 dans la collone "somme de poids" au lieu de compter pour 1. Mais le plus gros probleme viens du faite que certain poste (colonne E) affiche un besoin de 6 ce qui génère 6 lignes. Et chacune de ces 6 lignes va afficher un besoin de 6. Le TCD va donc calculer 6+6+6+6+6+6 = 36 alors qu'il faudrait prendre en comptabiliser seulement une seule fois 6

    Etant débutante en macro et VBA je suis un petit peu à la dérive dès qu'il faut adapter les macro

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

Discussions similaires

  1. [XL-2010] SOMME SI avec plage sur variable
    Par boldair67 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/01/2017, 17h00
  2. Somme.SI avec plage de critere
    Par LaPanic dans le forum Excel
    Réponses: 9
    Dernier message: 23/09/2013, 20h42
  3. Fonction "SOMME.SI" avec plage variable
    Par marc56 dans le forum Excel
    Réponses: 3
    Dernier message: 26/11/2008, 15h52
  4. Somme sur une plage variable
    Par mhamedbj dans le forum Excel
    Réponses: 2
    Dernier message: 29/02/2008, 15h56
  5. Réponses: 7
    Dernier message: 08/03/2007, 21h51

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