S'il vous plait besoin d'aide, programme VBA

Résolu
Claire1987 -  
 nouna1987 -
Bonsoir,

S'il vous plait j'ai besoin d'aide, je suis en stage et je vais utiliser excel. J'ai etudier le VBA ça fait 5 ans et je me rappelle pas comment resoudre ma problématique,svp j ai besoin de traduire la problematique en bas en VBA. Voici les variables :

Email client
Durée credit
Montant credit

Le but c'est de trouver si l email du client est affiché plusqu'une fois, c'est à dire si son email est affiché 2 fois ou plus, si oui , il faut additionner les montants de credit presentent dans les lignes où l'email est identique :par exemple( si l email est affiché 2 fois, il aditionne le montant de crédit des deux lignes), puis garder la ligne où il y a la durée de crédit la plus longue. C'est à dire que l'adition doit être affichée sur la ligne ou il y a la plus longue

Email Mt credit Durée cred
Clair@*** 600 12
Clair@*** 400 6

Il dois afficher :

Email Mt credi Duree cred
Clair@*** 1000 12

Merci d'avance

Configuration: iPhone / Mozilla Indeterminable

2 réponses

  1. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour
    Voici une proposition
    En colonne A: les Emails
    En colonne B: les montants
    En colonne C: les durées
    Sub CumulCredit()
    
    Dim DerLig As Long
    Dim AdressEmailTeste As String
    Dim Email As String
    Dim EmailMontant As Long
    Dim EmailDuree As Long
    Dim AdressOrigine As String
    Dim XMontant As Long
    Dim XDuree As Long
    Application.ScreenUpdating = False
    [A2].Select
    AdressEmailTeste = ActiveCell.Address
    AdressOrigine = ActiveCell.Address
    Debut:
    RechercheSuivant:
    DerLig = Range("A1").End(xlDown).Row
    AdressEmailTeste = ActiveCell.Address
    Email = ActiveCell.Value
    If Email = "" Then Exit Sub
    EmailMontant = ActiveCell.Offset(0, 1).Value
    EmailDuree = ActiveCell.Offset(0, 2).Value
    With Range("A" & ActiveCell.Row & ":A" & DerLig)
    Set X = .Find(Email, LookIn:=xlValues)
    If Not X Is Nothing Then
    X.Select
    If X.Address = Range(AdressEmailTeste).Address Then GoTo Origine
    XMontant = X.Offset(0, 1).Value
    XDuree = X.Offset(0, 2).Value
    If XDuree > EmailDuree Then
    X.Offset(0, 1).Value = XMontant + EmailMontant
    Range(AdressEmailTeste).Select
    Selection.EntireRow.Delete
    Range(AdressOrigine).Select
    GoTo Debut
    Else
    Range(AdressEmailTeste).Select
    ActiveCell.Offset(0, 1).Value = EmailMontant + XMontant
    Range(X.Address).EntireRow.Delete
    GoTo Debut
    End If
    Else
    EmailSuivant:
    End If
    End With
    Origine:
    DerLig = Range("A1").End(xlDown).Row
    ActiveCell.Offset(1, 0).Select
    AdressOrigine = ActiveCell.Address
    GoTo Debut
    End Sub

    en espérant que cela corresponde à vos attentes
    Bonne journée
    CDLT
    0