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


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2015
    Messages : 11
    Par défaut Somme avec variable
    Bonjour à tous,

    Je suis encore novice en VBA mais je sais bidouiller quelques codes pas très complexe

    Voici ce qui m'amène:

    Je souhaite écrire un code vba qui permet de faire une somme à partir de la colonne C (colonne A= numéro de compte, Colonne B= intitulé, Colonne C= Solde au 31/12/2020).

    Le code devrait scruter la colonne A pour chercher les conditions suivantes. Dire au code :

    1- si le numéro de compte 1 commence par 44 et si son solde est négatif (<à 0) inclure ce compte dans la somme,
    2- Si le numéro de compte 2 commence par 44 et si son solde est négatif, l'inclure dans la somme
    ...
    N- Si le numéro de compte N commence par 44 et si son solde est négatif, l'inclure dans la somme.

    Merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Janvier 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 228
    Par défaut
    Bonjour,

    pourquoi du VBA ? un simple SOMME.SI.ENS (ou une SOMMPROD) doit faire l'affaire ?

  3. #3
    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
    essayez avec :
    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
    Sub RegroupBalance()
    Application.ScreenUpdating = False
    Dim F1 As Worksheet
    Set F1 = Sheets("Feuil1")
    Dim i As Long
    Dim Balance
        Balance = F1.Range("A2:C" & F1.Range("A" & Rows.Count).End(xlUp).Row)
        For i = 1 To UBound(Balance)
        If Left(Balance(i, 1), 2) = 44 And Balance(i, 3) < 0 Then X = X + CDbl(Balance(i, 3))
        Next i
    MsgBox X
    Application.ScreenUpdating = True
    Set F1 = Nothing
    X=0
    End Sub

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2015
    Messages : 11
    Par défaut
    Bonjour,

    Merci BENNASR c'est top, c'est exactement ce à quoi je m'attendais!

    J'aurai svp aussi une autre question, auriez-vous svp un bout de code pour un fichier de 5 colonnes A=numéro de compte, B= Libellé, C= Montant de l'année, D montant de la situation intermédiaire et E= montant de l'année dernière:
    1- Si le montant en colonne C Balance est négatif, copier la ligne de A à C (A=numéro de compte, B= Libellé, C montant de l'année)
    2- Si le montant en colonne E est négatif, copier la ligne de A à B et E. (A=numéro de compte, B= Libellé, E montant de l'année dernière)

    Merci pour votre retour.

    Merci
    Cordialement

  5. #5
    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 bien compris tu veux ventiler tes données sur deux autres onglets non ??
    si oui tester :
    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 RegroupBalance()
    Application.ScreenUpdating = False
    '*****************************************annuler les filtres
    Dim sh As Worksheet
     On Error Resume Next
    For Each sh In Sheets
        sh.ShowAllData
    Next sh
     
    Dim F1 As Worksheet
    Dim F2 As Worksheet
    Dim F3 As Worksheet
    Dim derlig As Long
    Set F1 = Sheets("Feuil1")
    Set F2 = Sheets("Feuil2")
    Set F3 = Sheets("Feuil3")
    derlig = F1.Cells(Rows.Count, 1).End(xlUp).Row
    ' 1- Si le montant en colonne C Balance est négatif, copier la ligne de A à C (A=numéro de compte, B= Libellé, C montant de l'année)
     F1.Range("A1:E" & derlig).AutoFilter Field:=3, Criteria1:="<0", _
            Operator:=xlAnd
    F2.Cells.ClearContents
    F2.Range("A1") = F1.Range("A1")
    F2.Range("B1") = F1.Range("B1")
    F2.Range("C1") = F1.Range("C1")
    F1.Range("A2:C" & derlig).SpecialCells(xlCellTypeVisible).Copy Destination:=F2.Range("A2")
    F1.ShowAllData
    '2- Si le montant en colonne E est négatif, copier la ligne de A à B et E. (A=numéro de compte, B= Libellé, E montant de l'année dernière)
     F1.Range("A1:E" & derlig).AutoFilter Field:=5, Criteria1:="<0", _
            Operator:=xlAnd
    F3.Range("A1") = F1.Range("A1")
    F3.Range("B1") = F1.Range("B1")
    F3.Range("C1") = F1.Range("E1")
     
    F1.Range("A2:B" & derlig).SpecialCells(xlCellTypeVisible).Copy Destination:=F3.Range("A2")
    F1.Range("E2:E" & derlig).SpecialCells(xlCellTypeVisible).Copy Destination:=F3.Range("C2")
    F1.ShowAllData
    Application.ScreenUpdating = True
     
    End Sub

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2015
    Messages : 11
    Par défaut
    Bonjour BENNASR,

    Merci pour cette démo!

    La vérité j'ai pas été très clair.
    Toujours même configuration : un fichier de 5 colonnes A=numéro de compte, B= Libellé, C= Montant de l'année, D montant de la situation intermédiaire et E= montant de l'année dernière:

    Je veux que si les deux premiers caractères partant de la gauche de la colonne A sont "44" (ou un autre chiffre) et que si le montant compris dans la colonne C est négatif (<0) et/ou si le montant dans la colonne E est négatif (range("E"&l).value<0 copier A, B, C et E. A noter, si gauche de A="44" et si montant de colonne C est >à 0, vérifier si montant en colonne E est négatif et ainsi copier A, B, E, trois cas pour résumer.

    Si colonne left(range("A"&l),2)="44":
    - copier la range A, B, C, E ( dans ce cas C et E sont négatifs)
    - ou il va copier A, B,E (dans ce cas C est positif mais E est négatif )
    - ou A, B, C dans ce cas C est négatif et E est positif.

    En soit ça sera une sélection sur la base de la balance pour copier numéro de compte dans colonne A commençant par 44, son libellé en colonne B, son montant en colonne C ( si celui là est négatif) et/ou son montant en colonne E si celui est aussi négatif.

    La macro viendra mettre en lignes range A, B C (le montant négatif) et E (le montant négatif) remplissant la condition gauche de A ="44"

    Merci

    Cordialement

  7. #7
    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
    Un problème bien posé moitié résolu
    je propose un Imputbox pour saisir les deux premiers chiffres du compte comptable et les données qui répondent aux conditions sont envoyées à feuil2
    Tu risques de confondre entre les chiffres de l'année N et l'année N-1 ... si tu veux on peux envoyer les données dans 3 onglets différents selon les trois conditions :
    Cas 1 : C négatif et E négatif
    Cas 2 : C négatif et E positif
    Cas 3 : C positif et E négatif
    Ci tu veux que qq soit le cas tu veux rassembler les données dans un même onglet teste ç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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Sub RegroupBalance()
    Application.ScreenUpdating = False
    Dim F1 As Worksheet
    Dim F2 As Worksheet
    Dim Lig As Long
    Set F1 = Sheets("Feuil1")
    Set F2 = Sheets("Feuil2")
    Dim NunCompte As Integer
    NunCompte = InputBox("Entrez les deux premiers chiffres du compte comptable : ", "Saisie numérique")
    F2.Cells.ClearContents
    Lig = 2
    Dim i As Long
    Dim Balance
        Balance = F1.Range("A2:E" & F1.Range("A" & Rows.Count).End(xlUp).Row)
        For i = 1 To UBound(Balance)
        If Left(Balance(i, 1), 2) = NunCompte And Balance(i, 3) < 0 And Balance(i, 5) < 0 Then
        F2.Cells(Lig, "A") = Balance(i, 1)
        F2.Cells(Lig, "B") = Balance(i, 2)
        F2.Cells(Lig, "C") = Balance(i, 3)
        F2.Cells(Lig, "D") = Balance(i, 5)
        End If
        If Left(Balance(i, 1), 2) = NunCompte And Balance(i, 3) < 0 And Balance(i, 5) > 0 Then
        F2.Cells(Lig, "A") = Balance(i, 1)
        F2.Cells(Lig, "B") = Balance(i, 2)
        F2.Cells(Lig, "C") = Balance(i, 3)
        End If
        If Left(Balance(i, 1), 2) = NunCompte And Balance(i, 3) > 0 And Balance(i, 5) < 0 Then
        F2.Cells(Lig, "A") = Balance(i, 1)
        F2.Cells(Lig, "B") = Balance(i, 2)
        F2.Cells(Lig, "C") = Balance(i, 5)
        End If
        If F2.Cells(Lig, "A") <> "" Then Lig = Lig + 1
        Next i
    Application.ScreenUpdating = True
    Set F1 = Nothing
    Set F2 = Nothing
    End Sub

Discussions similaires

  1. Somme avec variables avec cellules non figés
    Par misc1110 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/03/2021, 11h28
  2. [XL-2007] Ecriture somme avec cellule variable
    Par toushusss dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/06/2011, 11h22
  3. [XL-2003] Somme avec une variable
    Par exqo77 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 08/07/2009, 14h55
  4. comment faire la somme de variable récupérer avec c:set
    Par fakhita dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 20/07/2007, 14h58
  5. somme avec variable
    Par tlombahe dans le forum Access
    Réponses: 4
    Dernier message: 22/08/2006, 16h59

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