Reprendre une valeur de façon automatique

Bonjour,

Je suis d'abord désolé si le titre n'est pas très explicite car je n'ai pas trouver mieux.

explication

J'ai une base de donnée avec un tas de dénominations (Alfred,Bernard etc.. Colonne A) qui partent d'une donnée d'entrée (Colonne B) et en réalisant une action parviennent à une donnée de sortie (Colonne D).

Puis quand la dénomination revient à nouveau, le -dernier- output devient l'input (ce que j'ai marqué en jaune, orange et rouge pour exemple).

Je cherche à automatiser la colonne B via une formule général qui va permettre de récuperer le précedent output de la bonne désignation.

Les apparitions des dénominations et aléatoire, ce qui fait que je ne peux pas dire d'aller chercher la valeur X lignes plus haut.

Le traitement des informations est toujours différent, on ne peut pas jouer avec un calcul de type suite géométrique par exemple.

J'espère trouver une solution car pour le moment, je fais tout en manuel en filtrant chaque dénomination mais c'est vrai un travail monstre car j'ai bien plus de lignes et de dénomination que dans cet exemple.

Je reste à votre disposition si vous avez des questions supplémentaire.

Merci beaucoup et bonne journée!

Bonjour

Il n'est pas difficile par formule de récupérer la valeur en D

Le problème est qu'une cellule contient soit une saisie soit une formule

Donc à part un code VBA qui se déclenche à chaque saisie d'une dénomination pour remplir la valeur en B si trouvée et ne rien faire sinon...

Ton exemple, sans titre de colonnes et sans contexte reste abstrait et ne permet pas de chercher la meilleure approche... d'autant que Bernard en ligne 6 aurait déjà du être concerné... et que la formule de traitement évolue au fil des lignes...

En ligne 12 la formule ne se base pas sur la dernière valeur de Daniel...

Salut Sylvain,
Salut Chris,

mêmes remarques que Chris...
Premier jet, en VBA, lors de l'encodage du nom en colonne [A:A], sur base de ce que j'observe...

Private Sub Worksheet_Change(ByVal Target As Range)
'
If Not Intersect(Target, Columns(1)) Is Nothing Then
    iRow = Target.Row
    Range("B" & iRow).Resize(1, 3).Value = ""
    If Target <> "" Then
        Range("C" & iRow).Value = "Traitement =>"
        Select Case WorksheetFunction.CountIf(Columns(1), Target)
            Case 1
                Range("D" & iRow).Formula = "=B" & iRow & "*1.0124"
            Case Is > 1
                Range("B" & iRow).Value = Range("A1:A" & iRow - 1).Find(what:=Target, lookat:=xlWhole, searchdirection:=xlPrevious).Offset(0, 3)
                Range("D" & iRow).Formula = "=B" & iRow & "-0.345"
        End Select
    End If
End If
'
End Sub
5sylvain.xlsm (16.11 Ko)


A+

Merci pour ta réponse.

Voici un screenshot avec les titres

explication2

Chaque Dénominations possède un input de base et suite à divers actions obtiennent un output.
Lorsque la dénomination revient, le nouvel input correspond à l'ancien output (mise en évidence par les couleurs)

L'ordre d'arrivée des dénominations est aléatoire.
L'output est effectivement une formule.

Je cherche donc une formule à insérer dans la colonne B (input) qui pourrait par exemple dans son architecture:

- "lire" la dénomination correspondante

- Remonter jusqu'à la dernière dénomination correspondante

- Enfin, affecter la valeur en colonne D (output)

Je crois comprendre que par formule, cela risque d'être compliqué même si je préférerais ne pas m'encombrer de macro je ferai avec.

J'espère que c'est bien plus claire, je ne vois honnêtement pas comment faire mieux pour vous exposer mon soucis.

Cordialement,

Sylvain

Bonjour

Dans la même veine que curulis57, en utilisant un tableau structuré.

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim i!, dl!
  If Not Application.Intersect(Target, Range("Tableau1[Denomination]")) Is Nothing And Target.Count = 1 Then
    For i = Target.Row - 1 To 2 Step -1
      If Cells(i, 1) = Target.Value2 Then
        Target.Offset(0, 1) = Cells(i, 4).Value2
        Exit For
      End If
    Next i
  End If
End Sub

Super!

Merci beaucoup Curulis et Yal.

J'ai repris le code de Curulis en supprimant ce que générais le code en colonne C et D.
Seul le transfert de l'output de la colonne D dans l'input m'interesse.
Pour le traitement, d'autre calculs prennent le relais. C'est génial!

Pour info, voici le code nettoyé:

Private Sub Worksheet_Change(ByVal Target As Range)
'
If Not Intersect(Target, Columns(1)) Is Nothing Then
    iRow = Target.Row
    Range("B" & iRow).Resize(1, 3).Value = ""
    If Target <> "" Then

        Select Case WorksheetFunction.CountIf(Columns(1), Target)
            Case 1
                Range("D" & iRow).Formula = "=B" & iRow & "*1.0124"
            Case Is > 1
                Range("B" & iRow).Value = Range("A1:A" & iRow - 1).Find(what:=Target, lookat:=xlWhole, searchdirection:=xlPrevious).Offset(0, 3)

        End Select
    End If
End If
'
End Sub

Merci beaucoup et bonne journée!

Cordialement,

Sylvain

RE

Par formule ce pas compliqué mais il faut prévoir une colonne formulée pour récupérer le cas échant la valeur et une autre pour la saisie quand ce n'est pas le cas, la formule de traitement s'adaptant pour prendre celle qui est remplie...

Avec un tableau structuré avec propagation auto des formule c'est simple à condition d'avoir une formule uniforme ce qui n'est pas le cas en colonne D....

Rechercher des sujets similaires à "reprendre valeur facon automatique"