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.si en VBA [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut Somme.si en VBA
    Bonjour,

    j'ai un peu cherché et taper ceci :

    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
    'Private Sub worksheet_activate()
     
    'Dim sel1, sel2, cel As Variant
    'dim i as integer
     
    'For i = 1 To 159
    'Next
     
    'sel1 = sh_GlobalKrc.Range("G2:G" & sh_GlobalKrc.UsedRange.Rows.Count)
    'sel2 = sh_GlobalKrc.Range("D2:D" & sh_GlobalKrc.UsedRange.Rows.Count)
    'cel = range("A" & i)
     
    'WorksheetFunction.SumIf(sel1, cel, sel2)
     
    'End Sub
    Donc j'ai en colonne A, la valeur cherchée et dans la colonne C je voudrais faire la somme.
    Je ne voudrais pas répéter la formule, donc j'ai pensé à une boucle MAIS ????

    Merci pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Exemple à adapter à votre fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub worksheet_activate()
        Dim Sel1 As Range, Sel2 As Range
        Dim Cel As String
        Dim DerLig As Long
     
        DerLig = [A1000].End(xlUp).Row 'Dernière ligne de la plage à tester
        Set Sel1 = Range("$A$2:$A$" & DerLig) 'Plage à tester
        Set Sel2 = Range("$B$2:$B$" & DerLig) 'Plage à additionner
        Cel = [D2] 'Critère
        [E2] = WorksheetFunction.SumIf(Sel1, Cel, Sel2)
    End Sub

    avec le fichier:
    Pièce jointe 431655

    Question: Pourquoi dans: Private Sub worksheet_activate() ?

    Cdlt

  3. #3
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    Merci
    J'ai cherché et j'ai un peu changé le code.

    Cependant, il me donne une erreur d’exécution 424 - objet requis en ligne n° 13. Pourquoi ??

    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 analysetest()
     
    Dim sel1, sel2, cel As Variant
    Dim i As Byte
    Dim h As Variant
     
        h = Application.CountA(sh_Analyse.Range("A1:A" & sh_Analyse.UsedRange.Rows.Count - 1))
        sel1 = sh_GlobalKrc.Range("G2:G" & sh_GlobalKrc.UsedRange.Rows.Count)
        sel2 = sh_GlobalKrc.Range("D2:D" & sh_GlobalKrc.UsedRange.Rows.Count)
     
    For i = 1 To h
     
        Range("C" & i) = WorksheetFunction.SumIf(sel1, cel, sel2)
     
    Next
     
     
     
    End Sub

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Déjà, ce serait bien d'ajouter les 2 dernières lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Dim sel1, sel2, cel As Variant
        Dim i As Byte
        Dim h As Variant
        Set sh_Analyse = Sheets("Analyse")
        Set sh_GlobalKrc = Sheets("GlobalKrc")
    Ensuite, que vaut la variable "Cel" dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C" & i) = WorksheetFunction.SumIf(sel1, cel, sel2)
    Enfin pour faire propre, ajouter ces 2 lignes avant l'instruction End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Set sh_Analyse = Nothing
        Set sh_GlobalKrc  = nothing
    Cdlt

  5. #5
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    Code modifié comme demandé.
    Mais pour les 2 lignes set ajoutée, il me dit erreur de compilation, utilisation incorrecte de la propriété

    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
    Sub analysetest()
     
    Dim sel1, sel2, cel As Variant
    Dim i As Byte
    Dim h As Variant
    Set sh_Analyse = Sheets("Analyse")
    Set sh_GlobalKrc = Sheets("GlobalKrc")
     
        h = Application.CountA(sh_Analyse.Range("A1:A" & sh_Analyse.UsedRange.Rows.Count - 1))
        sel1 = sh_GlobalKrc.Range("G2:G" & sh_GlobalKrc.UsedRange.Rows.Count)
        sel2 = sh_GlobalKrc.Range("D2:D" & sh_GlobalKrc.UsedRange.Rows.Count)
     
     
    For i = 1 To h
     
        cel = Range("A" & i)
        Range("C" & i) = Application.WorksheetFunction.SumIf(sel1, cel, sel2)
     
    Next
     
        Set sh_Analyse = Nothing
        Set sh_GlobalKrc = Nothing
     
     
     
    End Sub

  6. #6
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Vos 2 feuilles s'appellent bien "Analyse" et "GlobalKrc" ?

  7. #7
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    oui

  8. #8
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Et si vous mettez ces 2 lignes en remarque, ça fonctionne? si oui, c'est que c'est déjà déclaré ailleurs.

  9. #9
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    idem toujours erreur 424

  10. #10
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    qu'est ce que tu cherche à faire?? regroupement des comptes comptables depuis une balance comptable ou quoi??
    si c'est possible un capture écran des données de départ et un capture écran du résultat souhaité

  11. #11
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    Je cherche a faire un somme si automatique dans la feuille analyse

    je te joins le fichier

    Global_KRC_test.xlsm

  12. #12
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    explique stp
    en colonne A des code ou numéro de compte et en B des valeur
    qu'est ce que tu cherches à faire ???

  13. #13
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    je voudrais en colonne C additionne les valeurs se trouvant dans la feuille globalkrc sur base de la colonne A en feuille analyse

  14. #14
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    je voie pas de clé commun entre les deux feuilles

  15. #15
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    si j'ai compris

    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
    Sub test()
    Dim j As Long
    Application.ScreenUpdating = False
     
    tablo = Sheets("GlobalKrc").Range("B2", "M" & Sheets("GlobalKrc").Range("G" & Sheets("GlobalKrc").Rows.Count).End(xlUp).Row)
     
    With Sheets("Analyse")
    j = .Range("A" & Rows.Count).End(xlUp).Row
    For i = LBound(tablo, 1) To UBound(tablo, 1)
            For j = 1 To j
                 If .Cells(j, 1) = tablo(i, 6) Then
                    .Cells(j, 3) = tablo(i, 3)
                 End If
            Next j
      Next i
    End With
    Application.ScreenUpdating = True
    End Sub

  16. #16
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    erreur
    merci de faire avec ça :

    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
    Sub test()
    Dim j As Long
    Application.ScreenUpdating = False
     
    tablo = Sheets("GlobalKrc").Range("B2", "M" & Sheets("GlobalKrc").Range("G" & Sheets("GlobalKrc").Rows.Count).End(xlUp).Row)
     
    With Sheets("Analyse")
    j = .Range("A" & Rows.Count).End(xlUp).Row
     For j = 1 To j
        For i = LBound(tablo, 1) To UBound(tablo, 1)
                 If .Cells(j, 1) = tablo(i, 6) Then
                    .Cells(j, 3) = tablo(i, 3)
                 End If
      Next i
      Next j
    End With
    Application.ScreenUpdating = True
    End Sub

  17. #17
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    Merci beaucoup

  18. #18
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut Bonjour
    Perso je serais passé par un Tableau croise dynamique

    @ BENNASR : Je constate un souci dans ta macro , il n'y a pas de cumul de valeur si plusieurs fois le même code item + si mauvais code item en Krc pas de report en Analyse du montant

    Si je devais passer par macro pour ce souci

    Je bouclerais sur les items en feuille Krc (moins nombreux) + find sur feuille analyse + cumule des valeurs Krc vers analyse en col C

    du genre :

    certainement possible de mettre en place via ta méthode tableau bcp plus rapide

    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
     
     
    Sub SumIfFinded()
    'déclaration des variables :
    Dim Trouve As Range, PlageDeRecherche As Range
    Dim Valeur_Cherchee As String, AdresseTrouvee As String
     
     Sheets("Analyse").Columns(3).Clear
     
    For Each cel In Sheets("GlobalKrc").Range("G2:G" & Sheets("GlobalKrc").Range("G" & Rows.Count).End(xlUp).Row)
     
     Valeur_Cherchee = cel.Value
     Valeur_Donnee = cel.Offset(0, -3).Value
     
     Set PlageDeRecherche = Sheets("Analyse").Columns(1) ' plage ou la recherche doit s'effectuer
     
     
    Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole) 'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
     
    'traitement de l'erreur possible : Si on ne trouve rien :
      If Trouve Is Nothing Then
        'ici, traitement pour le cas où la valeur n'est pas trouvée
         AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
      Else
        'ici, traitement pour le cas où la valeur est trouvée
        Trouve.Offset(0, 2).Value = Trouve.Offset(0, 2).Value + Valeur_Donnee
     
      End If
    Next cel
     
    Set PlageDeRecherche = Nothing
    Set Trouve = Nothing
     
    End Sub

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

Discussions similaires

  1. Somme de cellules vba
    Par Ozer45 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/02/2012, 13h22
  2. Somme avec condition vba
    Par Maxgad dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/11/2011, 21h39
  3. Somme Prod et VBA
    Par Original266 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 02/07/2008, 14h08
  4. Somme Double sur VBA Macro marche pas
    Par PtitSuisse dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/06/2008, 15h14
  5. somme conditionnelle sous VBA
    Par léclaireur dans le forum Général VBA
    Réponses: 5
    Dernier message: 26/04/2007, 10h32

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