Afficher l'historique des valeurs d'une cellule

Bonjour,

je me permets d'écrire ici, je suis nouvelle sur le forum et après quelques recherches je n'ai pas réussi à trouver une solution à mon "problème".

Je souhaiterais avoir la possibilité dans une cellule d'afficher les valeurs antérieures rentrées dans cette même cellule (un historique), en forme de liste déroulante par exemple, au fur et à mesure des modifications, afin de pouvoir voir les évolutions.

Auriez-vous une solution ?

Merci beaucoup de votre aide

Bonjour,

une proposition de solution,

dans l'exemple l'historique est activé sur toutes les cellules de la feuille sheet1, Les valeurs historisées sont sauvegardés dans la feuille historique.

on accède à l'historique d'une cellule via un double-clic gauche.

2'422historique.xlsm (19.47 Ko)

Bonjour,

j'ai ouvert votre fichier et cette fonction me plait beaucoup, c'est exactement ce que je cherche pour contrôler les évolution de prix de mes fournisseurs. Par contre, je suis assez novice en VBA et après avoir coller le code dans mon fichiers cela ne marche pas, je pense qu'il n'y a pas que le code à coller. pouvez vous m'aider?

Bonjour,

pour pouvoir déterminer comment l'adapter à ton fichier, j'ai besoin de ton fichier ...

Bonjour,

Voici mon fichier : c'est la liste de mes produits d'achat et pour chaque produit je peux comparer 4 fournisseurs et leurs prix (colonnes O à V), le moins chère des 4 se place automatiquement en colonnes I et J mais celui que je choisi est en colonne G et H. J'aimerais donc conserver l'historique des variation de prix d'achat et fournisseur et de mes choix de fournisseur (c'est à dire appliquer ton code sur ces colonnes: G, H et O à V).

Comme tu verras, il y a déjà quelques macros(enregistrées) dans la feuille. Mais j'aimerais comprendre ton fichier : j'ai bien vu ton code et le userform mais j'ai essayer de créer moi même un nouveau fichier en insérant le code et l userform mais cela ne marche pas. Je vois que tu utilise un onglet "historique" qui est un nom réservé à Excel. j'aimerais comprendre comment tu as créer cela car j'aimerais utiliser ta solution dans d'autres fichiers.

Merci beaucoup pour ton aide.

291fournisseurs.xlsm (257.05 Ko)

Bonjour,

Historique semble en effet poser problème pour les versions excel FR (comme j'ai une version UK, je n'ai pas ce problème). Ce nom peut être remplacé par n'importe quel autre nom de feuille (à condition de faire les adaptations dans la macro)

Bonjour,

j'ai fait les adaptations dans la macro de la feuille et du userform : j 'ai changé le nom "historique" par" historiques", mais j ai une erreur à l'exécution sur l userform sur la ligne : "r = .Cells(i, colonne)"

Private Sub UserForm_Initialize()

UserForm1.Caption = "Historique des valeurs de la cellule " & celaddress

With Worksheets("historiques")

For i = 2 To .Cells(Rows.Count, colonne).End(xlUp).Row

r = .Cells(i, colonne)

s = InStr(r, ")")

If s <> 0 Then If Left(r, s - 1) = celaddress Then ListBox1.AddItem Mid(r, s + 1)

Next i

End With

End Sub

Je n'ai pas assez de connaissance en VB ( ) pouvez vous m'aider

Bonjour,

la variable colonne ne contient pas de valeur. je pense que tu as oublié de copier les instructions se trouvant de module1.

Public celaddress As String, colonne As Integer

Non, j'ai bien mis le module1 avec les instructions.

Cependant, j'ai trouvé le problème sur internet :

J'ai remplacer le "l" par un "1" dans cette ligne code de l'userform (x1Up) :

For i = 2 To .Cells(Rows.Count, colonne).End(xlUp).Row

Je pense que cela provient de la version excel (français/anglais).

Je voudrais également ajouter la valeur de la cellule de droite dans l'historique de la cellule. C'est à dire :

d11= titi

je saisis par exemple 22 en c11

lorsque je doubleclick sur c11, il appairait dans l'userform : "22 titi"

J'ai rajouter : "& Target.Offset(1, 0).Value" dans le "r=" mais cela ne marche pas comme ci après :

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count <> 1 Then Exit Sub

If Target = "" Then Exit Sub

r = Target.Address & ")" & Target.Value & Target.Offset(1, 0).Value

c = Target.Column

With Worksheets("historiques")

dl = .Cells(Rows.Count, c).End(xlUp).Row

If .Cells(dl, c) <> r Then .Cells(dl + 1, c) = r & " le : " & Format(Now, "dd/mmm/YY HH:MM")

End With

End Sub

Mes connaissances en VB sont limitées

je joint mon fichier

Merci de ton aide

Bonjour,

pour avoir la valeur de la cellule à droite de la cellule active c'est .offset(0,1) et non .offset(1,0)

correction dans ton fichier

Merci beaucoup de ton aide, c'est exactement le résultat que je cherchais.

Je vais prendre des cours de VBA car cela deviens indispensable...

Merci encore h2so4 de m'avoir aider si rapidement.

J'ai encore un petit soucis dans mon fichier :

Si je modifie la valeur d'une cellule et termine par la touche entrée : le contenu de userform correspond bien au autre valeur de la ligne

Si je modifie la valeur d'une cellule et termine par la touche de déplacement vers le bas : le contenu de userform correspond au valeur de la ligne d'en dessous.(sauf la valeur "r") voici le code :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

celaddress = Target.Address

colonne = Target.Column

UserForm1.Show

Target.Offset(1, 0).Select

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count <> 1 Then Exit Sub

If Target = "" Then Exit Sub

r = Target.Address & ")" & Format(Target.Value, "#.### €")

c = Target.Column

fournisseur = Target.Offset(0, 1).Value

Produit = ActiveCell.EntireRow.Cells(6)

Prix1 = Format(ActiveCell.EntireRow.Cells(15), "#.### €")

Frn1 = ActiveCell.EntireRow.Cells(16)

Prix2 = Format(ActiveCell.EntireRow.Cells(17), "#.### €")

Frn2 = ActiveCell.EntireRow.Cells(18)

Prix3 = Format(ActiveCell.EntireRow.Cells(19), "#.### €")

Frn3 = ActiveCell.EntireRow.Cells(20)

Prix4 = Format(ActiveCell.EntireRow.Cells(21), "#.### €")

Frn4 = ActiveCell.EntireRow.Cells(22)

With Worksheets("historiques")

dl = .Cells(Rows.Count, c).End(xlUp).Row

If .Cells(dl, c) <> r Then .Cells(dl + 1, c) = r & " " & Produit & " " & fournisseur & " le : " & Format(Now, "dd/mmm/YY") & " (" & Format(Now, "HH:MM") & ")" _

& " ==== " & Prix1 & " : " & Frn1 & " / " & Prix2 & " : " & Frn2 & " / " & Prix3 & " : " & Frn3 & " / " & Prix4 & " : " & Frn4 & "."

End With

If Intersect(Target, Range("f5")) Is Nothing Then: Exit Sub

Select Case Target.Value

Case "Autres"

MacroAutres

Case "Cuisine"

MacroCuisine

Case "Bar"

MacroBar

Case "Tous"

MacroTotale

Case "Inventaire"

MacroInventaire

End Select

End Sub

Il faut que "Produit, Prix1, Frn1, Prix2, Frn2, etc... renvoie la valeur de la cellule correspondante (colonne 6, 15, 17 etc..) de la même ligne que la cellule sélectionnée que je valide par la touche entrée ou une touche de déplacement.

merci encore de ta précieuse aide


[quote="ColletP28"]J'ai encore un petit soucis dans mon fichier :

Si je modifie la valeur d'une cellule et termine par la touche entrée : le contenu de userform correspond bien au autre valeur de la ligne

Si je modifie la valeur d'une cellule et termine par la touche de déplacement vers le bas : le contenu de userform correspond au valeur de la ligne d'en dessous.(sauf la valeur "r") voici le code :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

celaddress = Target.Address

colonne = Target.Column

UserForm1.Show

Target.Offset(1, 0).Select

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count <> 1 Then Exit Sub

If Target = "" Then Exit Sub

r = Target.Address & ")" & Format(Target.Value, "#.### €")

c = Target.Column

fournisseur = Target.Offset(0, 1).Value

Produit = ActiveCell.EntireRow.Cells(6)

Prix1 = Format(ActiveCell.EntireRow.Cells(15), "#.### €")

Frn1 = ActiveCell.EntireRow.Cells(16)

Prix2 = Format(ActiveCell.EntireRow.Cells(17), "#.### €")

Frn2 = ActiveCell.EntireRow.Cells(18)

Prix3 = Format(ActiveCell.EntireRow.Cells(19), "#.### €")

Frn3 = ActiveCell.EntireRow.Cells(20)

Prix4 = Format(ActiveCell.EntireRow.Cells(21), "#.### €")

Frn4 = ActiveCell.EntireRow.Cells(22)

With Worksheets("historiques")

dl = .Cells(Rows.Count, c).End(xlUp).Row

If .Cells(dl, c) <> r Then .Cells(dl + 1, c) = r & " " & Produit & " " & fournisseur & " le : " & Format(Now, "dd/mmm/YY") & " (" & Format(Now, "HH:MM") & ")" _

& " ==== " & Prix1 & " : " & Frn1 & " / " & Prix2 & " : " & Frn2 & " / " & Prix3 & " : " & Frn3 & " / " & Prix4 & " : " & Frn4 & "."

End With

If Intersect(Target, Range("f5")) Is Nothing Then: Exit Sub

Select Case Target.Value

Case "Autres"

MacroAutres

Case "Cuisine"

MacroCuisine

Case "Bar"

MacroBar

Case "Tous"

MacroTotale

Case "Inventaire"

MacroInventaire

End Select

End Sub

Il faut que "Produit, Prix1, Frn1, Prix2, Frn2, etc... renvoie la valeur de la cellule correspondante (colonne 6, 15, 17 etc..) de la même ligne que la cellule sélectionnée que je valide par la touche entrée ou une touche de déplacement.

merci encore de ta précieuse aide

Bonjour,

avec le code que j'ai fourni il n'y a pas de différence entre une validation par entrée ou par flèche vers le bas.

je ne parviens pas à reproduire le problème avec ton code sur ton fichier. Donc merci de donner des instructions précises pour reproduire le problème.

Bonjour,

Voici mon fichier pour mieux comprendre car j'ai rajouter des lignes de codes et je pense que cela se passe dans ce que j'ai rajouté :

"Produit, Prix1, Frn1, Prix2, Frn2,etc..."

Pour comprendre :

j'ai modifié le prix de la cellule O306 (2,50€)

puis validation par la touche entrée

puis j'ai remodifié le prix (4,50€)

puis validation avec flèche du bas

puis double click sur la cellule modifiée (O306)

Apparait les 2 lignes modifiés mais dans la seconde elle indique les valeur de la ligne 307 (sauf le contenu de la cellule 306)

De ce que je comprends : la fonction offset marche mais pas la fonction ActiveCell.

J'ai bien penser n'utilisé que la fonction offset mais cela décalera la sélection de ce que je veux comme résultat en double cliquant sur d'autre cellule de la ligne (par exemple Q306,S306, U306) qui doivent me renvoyer les mêmes résultat.

Voici mon fichier.

Merci à toi et bon dimanche

bonjour,

essaie ceci

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
celaddress = Target.Address
colonne = Target.Column
UserForm1.Show
Target.Offset(1, 0).Select
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count <> 1 Then Exit Sub
If Target = "" Then Exit Sub
r = Target.Address & ")" & Format(Target.Value, "#.### €")
c = Target.Column
fournisseur = Target.Offset(0, 1).Value
Produit = Target.EntireRow.Cells(6)
Prix1 = Format(Target.EntireRow.Cells(15), "#.### €")
Frn1 = Format(Target.EntireRow.Cells(16), "#.### €")
Prix2 = Format(Target.EntireRow.Cells(17), "#.### €")
Frn2 = Format(Target.EntireRow.Cells(18), "#.### €")
Prix3 = Format(Target.EntireRow.Cells(19), "#.### €")
Frn3 = Format(Target.EntireRow.Cells(20), "#.### €")
Prix4 = Format(Target.EntireRow.Cells(21), "#.### €")
Frn4 = Format(Target.EntireRow.Cells(22), "#.### €")
With Worksheets("historiques")
dl = .Cells(Rows.Count, c).End(xlUp).Row
If .Cells(dl, c) <> r Then .Cells(dl + 1, c) = r & "    " & Produit & "   " & fournisseur & "   le :  " & Format(Now, "dd/mmm/YY") & " (" & Format(Now, "HH:MM") & ")" _
& "  ====     " & Prix1 & " : " & Frn1 & "   /   " & Prix2 & " : " & Frn2 & "   /   " & Prix3 & " : " & Frn3 & "   /   " & Prix4 & " : " & Frn4 & "."
End With
If Intersect(Target, Range("f5")) Is Nothing Then: Exit Sub

 Select Case Target.Value

 Case "Autres"
 MacroAutres
 Case "Cuisine"
 MacroCuisine
 Case "Bar"
 MacroBar
 Case "Tous"
 MacroTotale
 Case "Inventaire"
 MacroInventaire
 End Select
 End Sub

Bonsoir

Nickel !!

J'avais essayé de mon coté mais en vain

Un Grand merci

Ps : c'est la première fois que je poste sur le forum et je n'ai pas compris ou il fallait "valider" pour "résolu" ?

Bonne fin de soirée

ColletP28 a écrit :

Ps : c'est la première fois que je poste sur le forum et je n'ai pas compris ou il fallait "valider" pour "résolu" ?

tu ne peux pas valider un message déjà validé.

Bonjour,

je n'ai pas pensé à une chose :

Ma feuille étant protégée, si je doubleclick sur une cellule qui ne contient pas de liste ça marche; par contre si la cellule comporte une liste de choix cela ne répond plus (ça "mouline")

Je pense qu'il faudrait que la feuille se déverrouille en lançant le double click puis exécute le userform et se verrouille après la feuille ?

Je ne sais pas si cela est possible ou une autre idée...

Merci de ton aide.

Bonne journée

Rechercher des sujets similaires à "afficher historique valeurs"