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

Résolu/Fermé
Claire1987 - 4 sept. 2013 à 22:19
 nouna1987 - 9 sept. 2013 à 08:10
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

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
6 sept. 2013 à 11:53
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
Merci bcpppppppp .
0