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


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Par défaut Somme.si en VBA
    Bonjour à tous!

    J'ai une fonction Somme.si et je compte la transformer en code VBA
    La fonction est la suivante I2=SOMME.SI('Rbt CCP'!E:E;'List Al Ech'!A2;'Rbt CCP'!C:C)

    Je veux calculer la somme des remboursements CCP (à partir de la feuille Rbt CCP) pour chaque client, la liste des CIN des clients ce trouve dans la feuille List Al Ech dans la case A, et je veux copier le résultat dans la colonne I de List Al Ech

    J'ai trouvé la fonction SUMIF mais j'ai pas su comment l'utiliser donc j'ai écris ce code avec FIND :

    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 Macro3()
     
    0
     
        Dim CIN As Long
        Dim TotalRbtCcp As Double
        Dim nb_lignes As Long
        Dim numero_ligne As Long
     
        Sheets("List Al Ech").Select
     
        nb_lignes = WorksheetFunction.CountA(Range("A:A"))
     
     
        For i = 2 To nb_lignes
            numero_ligne = i
     
            If numero_ligne >= 2 And numero_ligne <= nb_lignes Then
                CIN = Cells(numero_ligne, 1)
                TotalRbtCcp = 0
     
                Dim Found As Range
                Dim Indice As Long
                MsgBox TotalRbtCcp
     
                With Worksheets("Rbt CCP")
                     Set Found = .Range("F2:F12000").Find(CIN, LookIn:=xlValues, LookAt:=xlWhole)
                        If Not Found Is Nothing Then
                            Indice = Found.Row
                            TotalRbtCcp = TotalRbtCcp + Cells(Indice, 2)
                            MsgBox TotalRbtCcp
                        End If
     
                End With
                Cells(numero_ligne, 9) = TotalRbtCcp
            End If
        Next
     
    End Sub
    Bon ça n'a pas marché bien évidemment

    HELP!!

  2. #2
    Membre confirmé
    Homme Profil pro
    Apprenti GEII
    Inscrit en
    Janvier 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Apprenti GEII
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2014
    Messages : 83
    Par défaut Bonjour
    Bonjour, attention à ne pas réinventer la roue!

    Les fonctions Excel ont leur équivalent en VBA:
    Ecris Worksheet.function. dans ton éditeur VBA, et tu as accès à ces fonctions.
    Dans ton cas c'est SUMIF.

    Bonne journée

    EDIT: En plus je viens de voir que tu utilisais déjà worksheetfunction dans ta procédure...

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Par défaut
    Bon j'ai essayé avec SUMIF :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                With Worksheets("Rbt CCP")
                    TotalRbtCcp = WorksheetFunction.SumIf(Range("E2:E"), "=CIN", Range("C2:C"))
                End With

    Je reçois l'erreur 1004 : la méthode "Range" de l'objet "_global" a échoué

  4. #4
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Dans Range("E2:E"), il manque un bout.
    C’est "E:E" pour toute la colonne E et "E2:E10" pour par exemple avoir de la ligne 2 à 10 sur la colonne E.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Par défaut
    Ah oui vous avez raison! Merci

    Maintenant j'ai modifié le code y a pas d'erreurs mais ça donne pas de resultat! TotalRbtCcp reçoit 0

    Voici le code en entier

    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 Macro3()
     
        Dim CIN As Long
        Dim TotalRbtCcp As Double
        Dim nb_lignes As Long
        Dim numero_ligne As Long
     
        Sheets("List Al Ech").Select
     
        nb_lignes = WorksheetFunction.CountA(Range("A:A"))
        'MsgBox nb_lignes
     
        For i = 2 To 20 'nb_lignes
            numero_ligne = i
            'MsgBox numero_ligne
            If numero_ligne >= 2 And numero_ligne <= nb_lignes Then
                CIN = Cells(numero_ligne, 1)
                TotalRbtCcp = 0
                'MsgBox CIN
                Dim Found As Range
                Dim Indice As Long
     
     
     
                With Worksheets("Rbt CCP")
                    'MsgBox CIN
                    TotalRbtCcp = WorksheetFunction.SumIf(Range("E2:E12000"), "= CIN", Range("C2:C12000"))
                    MsgBox TotalRbtCcp
                    Cells(numero_ligne, 9) = TotalRbtCcp
                End With
            End If
        Next
     
    End Sub

  6. #6
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour roscos,

    J'ai moi aussi parfois l'envie de mettre une formule dans une cellule en VB.
    Comme je ne connais pas les fonctions en VB et que je n'ai pas envie de les apprendre, j'utilise l'enregistreur de macro.

    Je me place sur ma cellule -> je lance l'enregistreur de macro -> touche F2 -> Entrer -> je coupe l'enregistrement de la macro.
    Dans la macro qui vient d'être créée, Magie j'ai la syntaxe !

    Je te conseil de lire ce Tuto. Il est vraiment top !!!

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