Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

La 1ère fois, c'est important... mais comment trouver la date ?

7 réponses
Avatar
Raf
Chers amis, voici un problème sacrément difficile :

J'achète et je revends des biens, disons le bien X :
Date Bien Quantité
01/2000 X 10 <--- 1ère fois
03/2004 X -5
05/2005 X -5
06/2007 X 50 <--- "dernière" 1ère fois
07/2007 X 50

Comment trouver, au travers d'UNE unique formule (pas de tri, calculs
intermédiaires, etc..), la "dernière" 1ère fois que j'ai fait une opération
sur X ?
Et pourquoi "dernière 1ère fois" : en 05/2005, j'avais revendu tous mes
biens X. Donc la DATE que je cherche, c'est le 06/2007 !

Merci à tous !

7 réponses

Avatar
FFO
Salut Raf
N'étant pas un pro des formules je te propose une solution macro qui a
toujours le mérite d'être efficace
Considérant les dates en colonne A et les chiffres d'achat et de vente en
colonne C
Je te propose ce code :

Range("C1").Select
Do While ActiveCell.Row < Range("C65535").End(xlUp).Row
If ActiveCell Like "*-*" = False Then
Achat = ActiveCell
End If
Vendu = 0
ActiveCell.Offset(1, 0).Select
Do While Vendu < Achat
If ActiveCell Like "*-*" Then
Vendu = Vendu + Abs(ActiveCell)
End If
ActiveCell.Offset(1, 0).Select
Loop
If Achat > 0 Then
MsgBox (Mid(ActiveCell.Offset(0, -2), 4, Len(ActiveCell.Offset(0, -2) - 4)))
End If
Achat = 0
Loop

Les résultats te sont donnés dans une boîte de dîalogue

Si tu souhaites les obtenir sur la colonne suivante tu peux remplacer la ligne

MsgBox (Mid(ActiveCell.Offset(0, -2), 4, Len(ActiveCell.Offset(0, -2) - 4)))

par

Activecell.offset(0,1) = Mid(ActiveCell.Offset(0, -2), 4,
Len(ActiveCell.Offset(0, -2) - 4))

Ce n'est certes pas une formule mais peut être une solution pour toi


Chers amis, voici un problème sacrément difficile :

J'achète et je revends des biens, disons le bien X :
Date Bien Quantité
01/2000 X 10 <--- 1ère fois
03/2004 X -5
05/2005 X -5
06/2007 X 50 <--- "dernière" 1ère fois
07/2007 X 50

Comment trouver, au travers d'UNE unique formule (pas de tri, calculs
intermédiaires, etc..), la "dernière" 1ère fois que j'ai fait une opération
sur X ?
Et pourquoi "dernière 1ère fois" : en 05/2005, j'avais revendu tous mes
biens X. Donc la DATE que je cherche, c'est le 06/2007 !

Merci à tous !





Avatar
Raf
Un grand merci beaucoup pour cette solution, que je vais essayer
éventuellement d'adapter pour en faire une fonction.

Mais étant donné que j'ai une liste très importante de "biens" (environ 500,
avec en tout 20000 achats-ventes), je cherchais une formule qui me permette
d'obtenir rapidement le résultat en regard de ce volume de données.

En tout merci de t'être penché sur mes soucis !

"FFO" wrote in message
news:
Salut Raf
N'étant pas un pro des formules je te propose une solution macro qui a
toujours le mérite d'être efficace
Considérant les dates en colonne A et les chiffres d'achat et de vente en
colonne C
Je te propose ce code :

Range("C1").Select
Do While ActiveCell.Row < Range("C65535").End(xlUp).Row
If ActiveCell Like "*-*" = False Then
Achat = ActiveCell
End If
Vendu = 0
ActiveCell.Offset(1, 0).Select
Do While Vendu < Achat
If ActiveCell Like "*-*" Then
Vendu = Vendu + Abs(ActiveCell)
End If
ActiveCell.Offset(1, 0).Select
Loop
If Achat > 0 Then
MsgBox (Mid(ActiveCell.Offset(0, -2), 4, Len(ActiveCell.Offset(0, -2) -
4)))
End If
Achat = 0
Loop

Les résultats te sont donnés dans une boîte de dîalogue

Si tu souhaites les obtenir sur la colonne suivante tu peux remplacer la
ligne

MsgBox (Mid(ActiveCell.Offset(0, -2), 4, Len(ActiveCell.Offset(0, -2) -
4)))

par

Activecell.offset(0,1) = Mid(ActiveCell.Offset(0, -2), 4,
Len(ActiveCell.Offset(0, -2) - 4))

Ce n'est certes pas une formule mais peut être une solution pour toi


Chers amis, voici un problème sacrément difficile :

J'achète et je revends des biens, disons le bien X :
Date Bien Quantité
01/2000 X 10 <--- 1ère fois
03/2004 X -5
05/2005 X -5
06/2007 X 50 <--- "dernière" 1ère fois
07/2007 X 50

Comment trouver, au travers d'UNE unique formule (pas de tri, calculs
intermédiaires, etc..), la "dernière" 1ère fois que j'ai fait une
opération
sur X ?
Et pourquoi "dernière 1ère fois" : en 05/2005, j'avais revendu tous mes
biens X. Donc la DATE que je cherche, c'est le 06/2007 !

Merci à tous !







Avatar
garnote
Salut Raf,

Peut-être que :

Function dpf(plage As Range)
s = plage(1, 3)
i = 1
Do Until s = 0
i = i + 1
s = s + plage(i, 3)
Loop
dpf = plage(i + 1, 1)
End Function

La plage sélectionnée doit contenir trois
colonnes adjacentes dans l'ordre suivant :
Date Bien Quantité
et tu ne dois pas sélectionner la ligne des étiquettes.

Serge




"Raf" a écrit dans le message de news:
Un grand merci beaucoup pour cette solution, que je vais essayer éventuellement d'adapter pour en faire une fonction.

Mais étant donné que j'ai une liste très importante de "biens" (environ 500, avec en tout 20000 achats-ventes), je cherchais une
formule qui me permette d'obtenir rapidement le résultat en regard de ce volume de données.

En tout merci de t'être penché sur mes soucis !

"FFO" wrote in message news:
Salut Raf
N'étant pas un pro des formules je te propose une solution macro qui a
toujours le mérite d'être efficace
Considérant les dates en colonne A et les chiffres d'achat et de vente en
colonne C
Je te propose ce code :

Range("C1").Select
Do While ActiveCell.Row < Range("C65535").End(xlUp).Row
If ActiveCell Like "*-*" = False Then
Achat = ActiveCell
End If
Vendu = 0
ActiveCell.Offset(1, 0).Select
Do While Vendu < Achat
If ActiveCell Like "*-*" Then
Vendu = Vendu + Abs(ActiveCell)
End If
ActiveCell.Offset(1, 0).Select
Loop
If Achat > 0 Then
MsgBox (Mid(ActiveCell.Offset(0, -2), 4, Len(ActiveCell.Offset(0, -2) - 4)))
End If
Achat = 0
Loop

Les résultats te sont donnés dans une boîte de dîalogue

Si tu souhaites les obtenir sur la colonne suivante tu peux remplacer la ligne

MsgBox (Mid(ActiveCell.Offset(0, -2), 4, Len(ActiveCell.Offset(0, -2) - 4)))

par

Activecell.offset(0,1) = Mid(ActiveCell.Offset(0, -2), 4,
Len(ActiveCell.Offset(0, -2) - 4))

Ce n'est certes pas une formule mais peut être une solution pour toi


Chers amis, voici un problème sacrément difficile :

J'achète et je revends des biens, disons le bien X :
Date Bien Quantité
01/2000 X 10 <--- 1ère fois
03/2004 X -5
05/2005 X -5
06/2007 X 50 <--- "dernière" 1ère fois
07/2007 X 50

Comment trouver, au travers d'UNE unique formule (pas de tri, calculs
intermédiaires, etc..), la "dernière" 1ère fois que j'ai fait une opération
sur X ?
Et pourquoi "dernière 1ère fois" : en 05/2005, j'avais revendu tous mes
biens X. Donc la DATE que je cherche, c'est le 06/2007 !

Merci à tous !











Avatar
garnote
Mieux ainsi, ça évite de sortir de la plage
sélectionnée :

Function dpf(plage As Range)
n = plage.Rows.Count
For i = 1 To n
s = s + plage(i, 3)
If s = 0 Then
dpf = plage(i + 1, 1)
Exit Function
End If
Next i
dpf = "Pas trouvé"
End Function

Cependant si la dernière ligne de tes quantités donnent 0
que veux-tu obtenir comme date ?

Serge





"garnote" a écrit dans le message de news: %
Salut Raf,

Peut-être que :

Function dpf(plage As Range)
s = plage(1, 3)
i = 1
Do Until s = 0
i = i + 1
s = s + plage(i, 3)
Loop
dpf = plage(i + 1, 1)
End Function

La plage sélectionnée doit contenir trois
colonnes adjacentes dans l'ordre suivant :
Date Bien Quantité
et tu ne dois pas sélectionner la ligne des étiquettes.

Serge




"Raf" a écrit dans le message de news:
Un grand merci beaucoup pour cette solution, que je vais essayer éventuellement d'adapter pour en faire une fonction.

Mais étant donné que j'ai une liste très importante de "biens" (environ 500, avec en tout 20000 achats-ventes), je cherchais une
formule qui me permette d'obtenir rapidement le résultat en regard de ce volume de données.

En tout merci de t'être penché sur mes soucis !

"FFO" wrote in message news:
Salut Raf
N'étant pas un pro des formules je te propose une solution macro qui a
toujours le mérite d'être efficace
Considérant les dates en colonne A et les chiffres d'achat et de vente en
colonne C
Je te propose ce code :

Range("C1").Select
Do While ActiveCell.Row < Range("C65535").End(xlUp).Row
If ActiveCell Like "*-*" = False Then
Achat = ActiveCell
End If
Vendu = 0
ActiveCell.Offset(1, 0).Select
Do While Vendu < Achat
If ActiveCell Like "*-*" Then
Vendu = Vendu + Abs(ActiveCell)
End If
ActiveCell.Offset(1, 0).Select
Loop
If Achat > 0 Then
MsgBox (Mid(ActiveCell.Offset(0, -2), 4, Len(ActiveCell.Offset(0, -2) - 4)))
End If
Achat = 0
Loop

Les résultats te sont donnés dans une boîte de dîalogue

Si tu souhaites les obtenir sur la colonne suivante tu peux remplacer la ligne

MsgBox (Mid(ActiveCell.Offset(0, -2), 4, Len(ActiveCell.Offset(0, -2) - 4)))

par

Activecell.offset(0,1) = Mid(ActiveCell.Offset(0, -2), 4,
Len(ActiveCell.Offset(0, -2) - 4))

Ce n'est certes pas une formule mais peut être une solution pour toi


Chers amis, voici un problème sacrément difficile :

J'achète et je revends des biens, disons le bien X :
Date Bien Quantité
01/2000 X 10 <--- 1ère fois
03/2004 X -5
05/2005 X -5
06/2007 X 50 <--- "dernière" 1ère fois
07/2007 X 50

Comment trouver, au travers d'UNE unique formule (pas de tri, calculs
intermédiaires, etc..), la "dernière" 1ère fois que j'ai fait une opération
sur X ?
Et pourquoi "dernière 1ère fois" : en 05/2005, j'avais revendu tous mes
biens X. Donc la DATE que je cherche, c'est le 06/2007 !

Merci à tous !















Avatar
Raf
Merci merci,

Si la dernière quantité s=0, je vais conserver la dernière date enregistrée.
Dans ce cas, je peux initialiser dpf avec plage(i,1) et boucler sur la
condition "If s=0 and i<n Then".

Ceci dit je crois que la fonction ci-dessous ne répond pas tout à fait à ma
demande. Regarde cet exemple :
Date Qté Qté_Cumulée
1 +5 5 <---------
2 -3 2
3 -2 0
4 +10 10 <---------
5 -5 5
6 -5 0
7 +20 20 <---------
8 -3 17

Ta boucle ne s'arrête-t-elle pas au 1er 0 ?
Si j'ai bien compris, il me suffit de faire un tri (descending) sur la date
et de lancer ton programme, là il marcherait.

Mon problème, c'est que je veux le faire pour un nombre important de biens,
et que cette façon de faire m'oblige à créer une feuille où je
colle/trie/applique cette macro.

Si je dois partir dans cette option, je préfèrerai utiliser quelque chose de
plus direct : Trier par (1) les biens achetés (2) la date en descending,
puis chercher les lignes où la quantité cumulée du bien est égale à la
quantité : condition = { Quantité = SUM( (colonne_bien = bien)*(colonne_date
<= date)* (colonne_quantité) ) } (condition = true correspond aux flèches
que j'ai mise sur mon tableau) et supprimer les lignes où la condition est
fausse.
Après la date recherchée est immédiatement donnée par un VLOOKUP(bien,
tableau,3, true)

Comme cela j'ai ma réponse pour tous les biens (j'en ai plus de 500) d'un
coup. Mais je suis embêtée car mon classeur est déjà complexe, je cherche
une solution plus "pure" qui me permettrait d'avoir une date mise à jour
dynamiquement !!!!


"garnote" wrote in message
news:
Mieux ainsi, ça évite de sortir de la plage
sélectionnée :

Function dpf(plage As Range)
n = plage.Rows.Count
For i = 1 To n
s = s + plage(i, 3)
If s = 0 Then
dpf = plage(i + 1, 1)
Exit Function
End If
Next i
dpf = "Pas trouvé"
End Function

Cependant si la dernière ligne de tes quantités donnent 0
que veux-tu obtenir comme date ?

Serge





"garnote" a écrit dans le message de news:
%
Salut Raf,

Peut-être que :

Function dpf(plage As Range)
s = plage(1, 3)
i = 1
Do Until s = 0
i = i + 1
s = s + plage(i, 3)
Loop
dpf = plage(i + 1, 1)
End Function

La plage sélectionnée doit contenir trois
colonnes adjacentes dans l'ordre suivant :
Date Bien Quantité
et tu ne dois pas sélectionner la ligne des étiquettes.

Serge




"Raf" a écrit dans le message de news:

Un grand merci beaucoup pour cette solution, que je vais essayer
éventuellement d'adapter pour en faire une fonction.

Mais étant donné que j'ai une liste très importante de "biens" (environ
500, avec en tout 20000 achats-ventes), je cherchais une formule qui me
permette d'obtenir rapidement le résultat en regard de ce volume de
données.

En tout merci de t'être penché sur mes soucis !

"FFO" wrote in message
news:
Salut Raf
N'étant pas un pro des formules je te propose une solution macro qui a
toujours le mérite d'être efficace
Considérant les dates en colonne A et les chiffres d'achat et de vente
en
colonne C
Je te propose ce code :

Range("C1").Select
Do While ActiveCell.Row < Range("C65535").End(xlUp).Row
If ActiveCell Like "*-*" = False Then
Achat = ActiveCell
End If
Vendu = 0
ActiveCell.Offset(1, 0).Select
Do While Vendu < Achat
If ActiveCell Like "*-*" Then
Vendu = Vendu + Abs(ActiveCell)
End If
ActiveCell.Offset(1, 0).Select
Loop
If Achat > 0 Then
MsgBox (Mid(ActiveCell.Offset(0, -2), 4, Len(ActiveCell.Offset(0, -2) -
4)))
End If
Achat = 0
Loop

Les résultats te sont donnés dans une boîte de dîalogue

Si tu souhaites les obtenir sur la colonne suivante tu peux remplacer
la ligne

MsgBox (Mid(ActiveCell.Offset(0, -2), 4, Len(ActiveCell.Offset(0, -2) -
4)))

par

Activecell.offset(0,1) = Mid(ActiveCell.Offset(0, -2), 4,
Len(ActiveCell.Offset(0, -2) - 4))

Ce n'est certes pas une formule mais peut être une solution pour toi


Chers amis, voici un problème sacrément difficile :

J'achète et je revends des biens, disons le bien X :
Date Bien Quantité
01/2000 X 10 <--- 1ère fois
03/2004 X -5
05/2005 X -5
06/2007 X 50 <--- "dernière" 1ère fois
07/2007 X 50

Comment trouver, au travers d'UNE unique formule (pas de tri, calculs
intermédiaires, etc..), la "dernière" 1ère fois que j'ai fait une
opération
sur X ?
Et pourquoi "dernière 1ère fois" : en 05/2005, j'avais revendu tous
mes
biens X. Donc la DATE que je cherche, c'est le 06/2007 !

Merci à tous !



















Avatar
Raf
Alors voilà la solution la plus "élégante" que j'ai trouvée... Je suis à
motié satisfait.

Dans mon onglet où figure les transactions, je crée une colonne "indicateur"
Colonne1Úte Colonne2=Bien Colonne3=Quantité Colonne4=Indicateur

Indicateur vaut, pour chaque ligne : { ( RC3 = SUM( (Colonne1 <= RC1) *
(Colonne2 = RC2) * (Colonne3) ) ) + 0 }
Pour mon bien "Toto", la date que je cherche est s'exprime simplement : {Max
( (Indicateur=1) * (Colonne2="Toto") * (Colonne1) ) }

Ca marche, c'est pas tout à fait ce que je voulais mais ça n'alourdit pas
trop mon fichier.

En tout cas merci à tous pour votre aide !
Raf

"Raf" wrote in message
news:
Merci merci,

Si la dernière quantité s=0, je vais conserver la dernière date
enregistrée.
Dans ce cas, je peux initialiser dpf avec plage(i,1) et boucler sur la
condition "If s=0 and i<n Then".

Ceci dit je crois que la fonction ci-dessous ne répond pas tout à fait à
ma demande. Regarde cet exemple :
Date Qté Qté_Cumulée
1 +5 5 <---------
2 -3 2
3 -2 0
4 +10 10 <---------
5 -5 5
6 -5 0
7 +20 20 <---------
8 -3 17

Ta boucle ne s'arrête-t-elle pas au 1er 0 ?
Si j'ai bien compris, il me suffit de faire un tri (descending) sur la
date et de lancer ton programme, là il marcherait.

Mon problème, c'est que je veux le faire pour un nombre important de
biens, et que cette façon de faire m'oblige à créer une feuille où je
colle/trie/applique cette macro.

Si je dois partir dans cette option, je préfèrerai utiliser quelque chose
de plus direct : Trier par (1) les biens achetés (2) la date en
descending, puis chercher les lignes où la quantité cumulée du bien est
égale à la quantité : condition = { Quantité = SUM( (colonne_bien =
bien)*(colonne_date <= date)* (colonne_quantité) ) } (condition = true
correspond aux flèches que j'ai mise sur mon tableau) et supprimer les
lignes où la condition est fausse.
Après la date recherchée est immédiatement donnée par un VLOOKUP(bien,
tableau,3, true)

Comme cela j'ai ma réponse pour tous les biens (j'en ai plus de 500) d'un
coup. Mais je suis embêtée car mon classeur est déjà complexe, je cherche
une solution plus "pure" qui me permettrait d'avoir une date mise à jour
dynamiquement !!!!


"garnote" wrote in message
news:
Mieux ainsi, ça évite de sortir de la plage
sélectionnée :

Function dpf(plage As Range)
n = plage.Rows.Count
For i = 1 To n
s = s + plage(i, 3)
If s = 0 Then
dpf = plage(i + 1, 1)
Exit Function
End If
Next i
dpf = "Pas trouvé"
End Function

Cependant si la dernière ligne de tes quantités donnent 0
que veux-tu obtenir comme date ?

Serge





"garnote" a écrit dans le message de
news: %
Salut Raf,

Peut-être que :

Function dpf(plage As Range)
s = plage(1, 3)
i = 1
Do Until s = 0
i = i + 1
s = s + plage(i, 3)
Loop
dpf = plage(i + 1, 1)
End Function

La plage sélectionnée doit contenir trois
colonnes adjacentes dans l'ordre suivant :
Date Bien Quantité
et tu ne dois pas sélectionner la ligne des étiquettes.

Serge




"Raf" a écrit dans le message de news:

Un grand merci beaucoup pour cette solution, que je vais essayer
éventuellement d'adapter pour en faire une fonction.

Mais étant donné que j'ai une liste très importante de "biens" (environ
500, avec en tout 20000 achats-ventes), je cherchais une formule qui me
permette d'obtenir rapidement le résultat en regard de ce volume de
données.

En tout merci de t'être penché sur mes soucis !

"FFO" wrote in message
news:
Salut Raf
N'étant pas un pro des formules je te propose une solution macro qui a
toujours le mérite d'être efficace
Considérant les dates en colonne A et les chiffres d'achat et de vente
en
colonne C
Je te propose ce code :

Range("C1").Select
Do While ActiveCell.Row < Range("C65535").End(xlUp).Row
If ActiveCell Like "*-*" = False Then
Achat = ActiveCell
End If
Vendu = 0
ActiveCell.Offset(1, 0).Select
Do While Vendu < Achat
If ActiveCell Like "*-*" Then
Vendu = Vendu + Abs(ActiveCell)
End If
ActiveCell.Offset(1, 0).Select
Loop
If Achat > 0 Then
MsgBox (Mid(ActiveCell.Offset(0, -2), 4,
Len(ActiveCell.Offset(0, -2) - 4)))
End If
Achat = 0
Loop

Les résultats te sont donnés dans une boîte de dîalogue

Si tu souhaites les obtenir sur la colonne suivante tu peux remplacer
la ligne

MsgBox (Mid(ActiveCell.Offset(0, -2), 4,
Len(ActiveCell.Offset(0, -2) - 4)))

par

Activecell.offset(0,1) = Mid(ActiveCell.Offset(0, -2), 4,
Len(ActiveCell.Offset(0, -2) - 4))

Ce n'est certes pas une formule mais peut être une solution pour toi


Chers amis, voici un problème sacrément difficile :

J'achète et je revends des biens, disons le bien X :
Date Bien Quantité
01/2000 X 10 <--- 1ère fois
03/2004 X -5
05/2005 X -5
06/2007 X 50 <--- "dernière" 1ère fois
07/2007 X 50

Comment trouver, au travers d'UNE unique formule (pas de tri, calculs
intermédiaires, etc..), la "dernière" 1ère fois que j'ai fait une
opération
sur X ?
Et pourquoi "dernière 1ère fois" : en 05/2005, j'avais revendu tous
mes
biens X. Donc la DATE que je cherche, c'est le 06/2007 !

Merci à tous !























Avatar
garnote
Salut Raf,

Il faudrait voir la structure de ton classeur avec
des indications sur ce que tu veux obtenir.
Je ne comprends pas vraiment ton besoin, désolé.
Si ton classeur n'est pas trop lourd ou confidentiel,
tu pourrais l'envoyer sur Cjoint.com et coller le raccourci
ici-même.

Serge


"Raf" a écrit dans le message de news:
Merci merci,

Si la dernière quantité s=0, je vais conserver la dernière date enregistrée.
Dans ce cas, je peux initialiser dpf avec plage(i,1) et boucler sur la condition "If s=0 and i<n Then".

Ceci dit je crois que la fonction ci-dessous ne répond pas tout à fait à ma demande. Regarde cet exemple :
Date Qté Qté_Cumulée
1 +5 5 <---------
2 -3 2
3 -2 0
4 +10 10 <---------
5 -5 5
6 -5 0
7 +20 20 <---------
8 -3 17

Ta boucle ne s'arrête-t-elle pas au 1er 0 ?
Si j'ai bien compris, il me suffit de faire un tri (descending) sur la date et de lancer ton programme, là il marcherait.

Mon problème, c'est que je veux le faire pour un nombre important de biens, et que cette façon de faire m'oblige à créer une
feuille où je colle/trie/applique cette macro.

Si je dois partir dans cette option, je préfèrerai utiliser quelque chose de plus direct : Trier par (1) les biens achetés (2) la
date en descending, puis chercher les lignes où la quantité cumulée du bien est égale à la quantité : condition = { Quantité =
SUM( (colonne_bien = bien)*(colonne_date <= date)* (colonne_quantité) ) } (condition = true correspond aux flèches que j'ai mise
sur mon tableau) et supprimer les lignes où la condition est fausse.
Après la date recherchée est immédiatement donnée par un VLOOKUP(bien, tableau,3, true)

Comme cela j'ai ma réponse pour tous les biens (j'en ai plus de 500) d'un coup. Mais je suis embêtée car mon classeur est déjà
complexe, je cherche une solution plus "pure" qui me permettrait d'avoir une date mise à jour dynamiquement !!!!


"garnote" wrote in message news:
Mieux ainsi, ça évite de sortir de la plage
sélectionnée :

Function dpf(plage As Range)
n = plage.Rows.Count
For i = 1 To n
s = s + plage(i, 3)
If s = 0 Then
dpf = plage(i + 1, 1)
Exit Function
End If
Next i
dpf = "Pas trouvé"
End Function

Cependant si la dernière ligne de tes quantités donnent 0
que veux-tu obtenir comme date ?

Serge





"garnote" a écrit dans le message de news: %
Salut Raf,

Peut-être que :

Function dpf(plage As Range)
s = plage(1, 3)
i = 1
Do Until s = 0
i = i + 1
s = s + plage(i, 3)
Loop
dpf = plage(i + 1, 1)
End Function

La plage sélectionnée doit contenir trois
colonnes adjacentes dans l'ordre suivant :
Date Bien Quantité
et tu ne dois pas sélectionner la ligne des étiquettes.

Serge




"Raf" a écrit dans le message de news:
Un grand merci beaucoup pour cette solution, que je vais essayer éventuellement d'adapter pour en faire une fonction.

Mais étant donné que j'ai une liste très importante de "biens" (environ 500, avec en tout 20000 achats-ventes), je cherchais
une formule qui me permette d'obtenir rapidement le résultat en regard de ce volume de données.

En tout merci de t'être penché sur mes soucis !

"FFO" wrote in message news:
Salut Raf
N'étant pas un pro des formules je te propose une solution macro qui a
toujours le mérite d'être efficace
Considérant les dates en colonne A et les chiffres d'achat et de vente en
colonne C
Je te propose ce code :

Range("C1").Select
Do While ActiveCell.Row < Range("C65535").End(xlUp).Row
If ActiveCell Like "*-*" = False Then
Achat = ActiveCell
End If
Vendu = 0
ActiveCell.Offset(1, 0).Select
Do While Vendu < Achat
If ActiveCell Like "*-*" Then
Vendu = Vendu + Abs(ActiveCell)
End If
ActiveCell.Offset(1, 0).Select
Loop
If Achat > 0 Then
MsgBox (Mid(ActiveCell.Offset(0, -2), 4, Len(ActiveCell.Offset(0, -2) - 4)))
End If
Achat = 0
Loop

Les résultats te sont donnés dans une boîte de dîalogue

Si tu souhaites les obtenir sur la colonne suivante tu peux remplacer la ligne

MsgBox (Mid(ActiveCell.Offset(0, -2), 4, Len(ActiveCell.Offset(0, -2) - 4)))

par

Activecell.offset(0,1) = Mid(ActiveCell.Offset(0, -2), 4,
Len(ActiveCell.Offset(0, -2) - 4))

Ce n'est certes pas une formule mais peut être une solution pour toi


Chers amis, voici un problème sacrément difficile :

J'achète et je revends des biens, disons le bien X :
Date Bien Quantité
01/2000 X 10 <--- 1ère fois
03/2004 X -5
05/2005 X -5
06/2007 X 50 <--- "dernière" 1ère fois
07/2007 X 50

Comment trouver, au travers d'UNE unique formule (pas de tri, calculs
intermédiaires, etc..), la "dernière" 1ère fois que j'ai fait une opération
sur X ?
Et pourquoi "dernière 1ère fois" : en 05/2005, j'avais revendu tous mes
biens X. Donc la DATE que je cherche, c'est le 06/2007 !

Merci à tous !