création d'un historique automatique dans excel

kamgang

XLDnaute Nouveau
salut,
j'ai un problème qu me tracas: je veux créer un historique dans excel tel que étant dans la feuille 1, quand je valide l'information dans une cellule de la colonne X, la ligne contenant la cellule est automatiquement enregistrée dans une ligne vide de la feuille 2.
merci de m'aider à résoudre ce problème.

kamgang
 

Yoyo01000

XLDnaute Junior
Bonjour,
formule à mettre en A1 de la feuille 2 :

=SI(Feuil1!$X1<>"";Feuil1!A$1)

Formule à tirer à droite sur la même ligne.
 

job75

XLDnaute Barbatruc
Bonjour kamgang, bienvenue sur XLD, salut Yoyo01000,

A placer dans le code de la feuille source (clic droit sur l'onglet et Visualiser le code) :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, lig
Set r = Intersect(Target, [X:X])
If r Is Nothing Then Exit Sub
With Feuil2 'CodeName de la feuille de destination
    If .[A1] = "" Then .[A1] = " "
    lig = .Cells.Find("*", , xlFormulas, , xlByRows, xlPrevious).Row + 1
    For Each r In r 'en cas d'entrées multiples
        If r <> "" Then r.EntireRow.Copy .Rows(lig): lig = lig + 1
    Next
End With
End Sub
La macro se déclenche quand on entre une valeur en colonne X.

Enregistrer le fichier en .xlsm.

A+
 

kamgang

XLDnaute Nouveau
Bonjour,
formule à mettre en A1 de la feuille 2 :

=SI(Feuil1!$X1<>"";Feuil1!A$1)

Formule à tirer à droite sur la même ligne.

Bonjour Yoyo01000,
merci pour la réponse mais ça ne resoud pas mon problème.
chaque fois que une cellule de la colonne X de la feuille 1 est modifiée, toute la ligne contenant cette cellule est enregistrée sur une nouvelle ligne vide et à la suite des autres lignes non vides de la feuille 2.
 

kamgang

XLDnaute Nouveau
Bonjour kamgang, bienvenue sur XLD, salut Yoyo01000,

A placer dans le code de la feuille source (clic droit sur l'onglet et Visualiser le code) :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, lig
Set r = Intersect(Target, [X:X])
If r Is Nothing Then Exit Sub
With Feuil2 'CodeName de la feuille de destination
    If .[A1] = "" Then .[A1] = " "
    lig = .Cells.Find("*", , xlFormulas, , xlByRows, xlPrevious).Row + 1
    For Each r In r 'en cas d'entrées multiples
        If r <> "" Then r.EntireRow.Copy .Rows(lig): lig = lig + 1
    Next
End With
End Sub
La macro se déclenche quand on entre une valeur en colonne X.

Enregistrer le fichier en .xlsm.

A+
Bonjour job75,
merci pour la réponse.
J'ai oublié de préciser que je suis un bleue sur vba excel et et je suis à mon premier pas. j'ai donc les difficultés à appliquer ta proposition de solution.
merci de me détailler la procédure d’exécution je t’en prie
 

kamgang

XLDnaute Nouveau
Bonjour job75,
merci pour la réponse.
J'ai oublié de préciser que je suis un bleue sur vba excel et et je suis à mon premier pas. j'ai donc les difficultés à appliquer ta proposition de solution.
merci de me détailler la procédure d’exécution je t’en prie.

Et aussi dans ta syntaxe je ne vois pas ou définir la source de la copie.
excuses moi si je suis un peu bête: c'est juste que je suis un bleue
 

kamgang

XLDnaute Nouveau
J'ai bien expliqué ici :
salut job75,
voici ou ça bloque (voir image) .
je veux que chaque fois que j'entre les données dans une cellule de la colonne C de la feuille1, la ligne portant la cellule soit enregistrée dans la feuille2 sur une ligne vide à la suite des lignes non vides.
prière de m'aider je vous en prie.

upload_2019-2-7_15-14-5.png
 

job75

XLDnaute Barbatruc
Bah vous avez placé le code en Feuil2 !!!

Feuil2 est la feuille de destination, j'ai bien dit que le code doit être placé dans la feuille source (normalement Feuil1).
 

Discussions similaires


Haut Bas