Copie conditionnelle / somme conditionnelle (vba)
Raf_la_menaf'
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
Raf_la_menaf' Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
Raf_la_menaf' Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
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.
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:
- Copie conditionnelle / somme conditionnelle (vba)
- Mise en forme conditionnelle excel - Guide
- Excel liste déroulante conditionnelle - Guide
- Copie cachée - Guide
- Formule somme excel colonne - Guide
- Super copie - Télécharger - Gestion de fichiers
2 réponses
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 +
Si toutefois un tel topic existe, merci de me le signaler.
A +
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 !!!
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 !!!
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
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
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
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
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
Pour le CA:
Prend une variable pour faire le cumul.
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
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
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