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 :

calcul complexe a chaque changement valeur


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Par défaut calcul complexe a chaque changement valeur
    Bonjour à tous.

    Je cherche à automatiser un calcul mais je sèche.


    L'idée est la suivante: une liste de valeurs en colonne C trié.

    A chaque changement de valeur je veux faire la somme des données dans G et dans H.
    Je tire la différence entre chaque somme de g et h.

    Cette différence selon que g ou h est supérieur je veux l'imputer dans I ou J.
    (si g >h, différence a éclater en i sinon J)
    Et enfin je veux éclater cette différence sur les montants les plus faibles en lignes

    Parce qu’un exemple sera plus parlant je joins un fichier.

    au plaisir de vous lire

    ralk
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Homme Profil pro
    réseaux électriques
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : réseaux électriques

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Par défaut Réponse
    Bonjour

    voici ma réponse, même si j'ai eu du mal à comprendre le problème.
    d'ailleurs je n'ai aps compris le point 3 et donc pas traiter!!!
    ensuite tu ne parles du cas où la différence est nulle, comment tu la traites?

    sinon voici un code à mettre dans ta feuille sous vba

    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
    40
    41
    42
    43
    44
    45
    46
     
    Option Explicit
     
    Sub test()
    Dim Cell As Range
    Dim SommeColG As Integer, SommeColH As Integer, Difference As Integer
    Dim Code As String
     
    Range("C2").Select
     
    'on mémorise la première valeur
    Code = Selection.Value 'ici "TR028"
    'on fait la somme de chacune des colonnes
    SommeColG = Selection.Offset(0, 4).Value
    SommeColH = Selection.Offset(0, 5).Value
     
     
    For Each Cell In ActiveSheet.Range("C3:C" & Range("C2").End(xlDown).Row + 1)
        'on vérifie si le code change
        If Cell.Value = Code Then
            'si oui alors on fait la somme
            SommeColG = SommeColG + Cell.Offset(0, 4).Value
            SommeColH = SommeColH + Cell.Offset(0, 5).Value
            ' et on continu
        Else
            'si changement de code
            'on cherche qui est supérieur à l'autre
            'on fait la différence des 2
            Difference = SommeColG - SommeColH
            'si c'est positif alors colG>colH
            If Difference > 0 Then
                'on écrit la différence en I de la dernière ligne
                Cell.Offset(-1, 6).Value = Difference
            Else
                'on écrit la différence en J de la dernière ligne
                Cell.Offset(-1, 7).Value = Difference
            End If
     
            'on remet la nouvelle valeur du code
            Code = Cell.Value
            'on fait les sommes on remet les variables à zéro en quelque sorte!!
            SommeColG = Cell.Offset(0, 4).Value
            SommeColH = Cell.Offset(0, 5).Value
        End If
    Next Cell
    End Sub

  3. #3
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2012
    Messages : 75
    Par défaut
    Bonjour,

    Désolé mais je n'ai également compris que partiellemment votre problème
    Voici un code testé sur votre exemple qui fonctionne

    Résultat :
    
    TR094		  0	791
    TR094		  7	  0
    TR094		955	  0
    Total		962	791
    Différence	171	
    ce code pourrait vous servir de piste et doit être adapté quant a la zone d'affichage souhaité du résultat

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
     
    Option Explicit
     
    Sub Main()
     
        Dim Code As String, Lgn As Long
     
        '* Récupérer code a traiter
        Code = [C30]
     
        '* Ligne affichage
        Lgn = 20
     
        Call RécupererLesDonnées(Code, Lgn)
     
     
    End Sub
     
     
    Sub RécupererLesDonnées(Code As String, Lgn As Long)
     
        Dim Cel As Range, MaPlage As Range, PlageMvts As Range
        Dim FirstAddress As String
     
        Dim TotalG As Integer, TotalH As Integer, Diff As Integer
        Dim LastLig As Long, LastCol As Long
     
        '*** Initialiser les variables
        Set MaPlage = Range("C2:C" & [B2].End(xlDown).Row)
     
        '*** Rechercher le code
        Set Cel = MaPlage.Find(Code, LookIn:=xlValues)
     
        If Not Cel Is Nothing Then
            FirstAddress = Cel.Address
     
            Do
     
             Cells(Lgn, 12) = Cel.Value
             Cells(Lgn, 13) = Cel.Offset(0, 4)
             Cells(Lgn, 14) = Cel.Offset(0, 5)
             Lgn = Lgn + 1
     
             Set Cel = MaPlage.FindNext(Cel)
     
            Loop While Not Cel Is Nothing And Cel.Address <> FirstAddress
     
        End If
     
        '* Calcul des Valeurs
        LastLig = Cells(Rows.Count, 12).End(xlUp).Row
        LastCol = Cells(20, Columns.Count).End(xlToLeft).Column
     
        '* Plage des résultats
        Set PlageMvts = Range(Cells(20, 12), Cells(LastLig, LastCol))
     
        '* Total des colonnes
        TotalG = Application.Sum(PlageMvts.Columns(2))
        TotalH = Application.Sum(PlageMvts.Columns(3))
     
        '* Affichage du résultat
        Lgn = LastLig + 1
        Cells(Lgn, 12) = "Total"
        Cells(Lgn, 13) = TotalG
        Cells(Lgn, 14) = TotalH
     
        Diff = TotalG - TotalH
        Lgn = Lgn + 1
     
        Cells(Lgn, 12) = "Différence"
        Cells(Lgn, 13) = Diff
     
        '*** Libère la mémoire ------------------------------------------
        Set MaPlage = Nothing: Set Cel = Nothing: Set PlageMvts = Nothing
     
     
    End Sub
    _______________
    Codialement

    Albert

  4. #4
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Par défaut
    bonjour et merci infiniment à vous 2!

    michoutri, votre code est parfait pour la difference et le placement colonne.
    J'y ai apporté une modif car il me mettait la difference en négatif colonne J.

    Concernant le point 3 c'est a dire le placement de la difference en ligne je vais tacher d'etre plus clair:

    Il s'agit du positionnement en ligne; la macro en l'etat la place en derniere ligne de variable TRXXX

    Je joins ce fichier car un exemple sera plus clair.

    Bien cordialement,
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [AC-2007] Lancer en automatique des macros à chaque changement de valeur
    Par MAO2000 dans le forum Access
    Réponses: 2
    Dernier message: 15/02/2015, 12h08
  2. Exécuter une somme auto à chaque changement de valeur
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/04/2011, 11h16
  3. Réponses: 13
    Dernier message: 21/02/2011, 20h33
  4. Réponses: 2
    Dernier message: 15/03/2007, 15h11
  5. Mauvais résultat aprés une formule de calcul complexe
    Par poufouille dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/12/2004, 00h12

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