Copie conditionnelle / somme conditionnelle (vba)

Fermé
Raf_la_menaf' Messages postés 11 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 4 avril 2014 - 28 févr. 2014 à 16:41
Raf_la_menaf' Messages postés 11 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 4 avril 2014 - 28 févr. 2014 à 18:29
Bonjour le forum,

Je dispose, en feuille1, d'un tableau qui recense la location d'appareil ; par exemple :

Nom_client / N°série_appareil / Date_de_retour / Tarif

Dupont......./........K0001........../.....20-fev.-14..../..150,00€
Durand......./........K0002........../.....25-fev.-14..../..200,00€
Martin........./........K0003........../.....27-fev.-14..../..150,00€
Cartier......../........K0001........../....04-mars-14.../..250,00€
Untel........../........K0002........../.....15-mars-14.../..150,00€
Machin......../........K0001........../....06-avr.-14...../..100,00€
etc.
etc.
etc.

Particularité : un appareil (N° série) peut être loué plusieurs fois et le tarif n'est pas lié à l'appareil.


Je dispose, en feuille2, d'un autre tableau qui recense l'utilisation de chacun de mes appareils ; chaque ligne correspond donc à un numéro de série. Je souhaite obtenir, pour chaque appareil, la date du dernier retour (pour savoir s'il est libre) ainsi que le total du chiffre générer (par appareil). Si je garde l'exemple ci-dessus :

N°série_appareil / Dernière_date_retour / Libre_? / CA_€
K0001................./...........06-avr.-14........./...Non..../ 500,00€
K0002................./..........15-mars-14......../...Non..../ 350,00€
K0003................./...........27-fev.-14........./...Oui..../ 150,00€
etc.
etc. (J'ai 50 appareils de recensés)


Pour cela, j'ai fait une macro Worksheet_activate() pour qu'a l'ouverture de ma feuille2, le tableau se mette à jour.

Mon problème c'est que je n'arrive pas à générer les cellules "Dernière_date_retour" et "CA_€".

Tout ce que j'ai tenté (condition if, boucle for, boucle for each...) me donne uniquement une réponse pour la dernière ligne de feuille1 où apparaît le n° de série...

Je m'adresse donc à vous pour me trouver une solution =)


Merci d'avance,

Raf.
A voir également:

2 réponses

Raf_la_menaf' Messages postés 11 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 4 avril 2014
28 févr. 2014 à 16:44
Je précise que j'ai recherché un petit peu sur différents forum mais je n'ai pas trouvé de réponse.

Si toutefois un tel topic existe, merci de me le signaler.

A +
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
28 févr. 2014 à 16:55
Bonjour,

Pas sûr qu'Excel soit ce qu'il faut pour faire ça.

Si on admet qu'une seule référence est louée par jour, sur 50 semaines, ça va faire 250 lignes, pour faire le total généré par article uniquement, ça fait quelques 12500 tests !!!
0
Raf_la_menaf' Messages postés 11 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 4 avril 2014
28 févr. 2014 à 17:00
Polux,

Oui je comprends bien...

Dans mon cas, un appareil est loué au minimum pour un mois, il ne peut donc être loué au maximum que 12 fois par an.

C'est possible du coup avec excel ? :-p
0
Raf_la_menaf' Messages postés 11 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 4 avril 2014
Modifié par Raf_la_menaf' le 28/02/2014 à 17:14
Pour info, voila le bout de code que j'avais tapé (pour Dernière_date_retour) :

Sub Derniere_date()

For i = 2 To 51
For k = 2 To 1000
If Worksheets("feuille1").Cells(k, 2).Value = Worksheets("feuille2").Cells(i, 1).Value Then
Dim today As Date
today = Date
If Application.WorksheetFunction.Max(Worksheets("feuille1").Cells(k, 3).Value) >= today Then
Worksheets("feuille2").Cells(i, 2).Value = Application.WorksheetFunction.Max(Worksheets("Fiche de suivi Client").Cells(k, 3).Value)
Else
Worksheets("feuille2").Cells(i, 2).Value = ""
End If
End If
Next
Next

End Sub


Mais ça me donne uniquement la date de la dernière ligne où a été trouvé le numéro de série
0
Raf_la_menaf' Messages postés 11 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 4 avril 2014
28 févr. 2014 à 17:14
Après, a priori, le tableau de la feuille1 s'incrémente au fur et à mesure de l'année donc la dernière ligne où a été trouvé le numéro de série doit correspondre à la dernière date ; s'il existe une formule plus simple je prends mais sinon la mienne me convient (c'était juste pour pour que ça fasse plus propre).


Le plus embêtant c'est pour la somme du CA, car si ça me donne uniquement le tarif de la dernière ligne où a été trouvé le numéro de série je n'ai pas la somme que je recherche...

Pour info, la bout de code était :

Sub CA()

For i = 2 To 51
For k = 2 To 1000
If Worksheets("feuille1").Cells(k, 2).Value = Worksheets("feuille2").Cells(i, 1).Value Then
Worksheets("feuille2").Cells(i, 4).Value = Application.WorksheetFunction.Sum(Worksheets("Fiche de suivi Client").Cells(k, 4).Value)
End If
Next
Next

End Sub
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
28 févr. 2014 à 17:33
Pour la date de retour effectivement, si c'est par ordre chrono, tu auras toujours la dernière date. Pas la peine de faire une usine à gaz pour ça.

Au lieu de parcourir 1000 lignes alors qu'il ne peut en avoir que 250, c'est pas top.

Tu peux déclarer une variable derLig et t'en servir comme limite pour le For Next

Dim Derlig As Long

Derlig = Worksheets("feuille1").Range("A1").End(xlDown).Row


Pour le CA:
Prend une variable pour faire le cumul.

Dim CA As Double

For i = 2 To 51 
CA = 0
     For k = 2 To Derlig 
          If Worksheets("feuille1").Cells(k, 2).Value = Worksheets("feuille2").Cells(i, 1).Value Then
               CA = CA + CDble(Worksheets("feuille1").Cells(k, 2).Value)
          End If
     Worksheets("feuille2").Cells(i, 4).Value = CA
     Next k
Next i
0
Raf_la_menaf' Messages postés 11 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 4 avril 2014
28 févr. 2014 à 18:05
Merci Polux =)

Pour la dernière date c'est magique, ça prend en compte la plus grande date même si ce n'est pas la dernière !



Par contre quand je compile le cumul j'ai une erreur :

"Sub ou Function non définie" et ça me surligne le CDble

J'en est déduit qu'il y avait un "e" en trop, mais quand j'execute la macro il y a une nouvelle erreur :
"erreur d'execution '13': incompatibilité de type"

J'ai essayer de remplacer : CA = CA + CDbl(Worksheets("feuille1").Cells(k, 2).Value)

par

CA = CA + CDble(Worksheets("feuille1").Cells(k, 4).Value)

(C'est le CA que je somme, pas le numéro de série, j'ai bon ?)

Mais du coup, ça me donne encore la dernière ligne et pas le cumul du CA...


Désolé de t'embêter encore un peu =)

Merci encore pour le temps que je t'accapare
0