Trouver la dernière cellule modifiée !

  • Initiateur de la discussion Initiateur de la discussion Poulpe
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

P

Poulpe

Guest
Bonjour à tous, j'aurais aimé savoir quel est le code VB pour déterminer avec exactitude la dernière cellule que l'utilisateur à modifier sachant que rechercher la cellule active ne fonctionne pas puisque l'utilisateur peut modifier une cellule puis cliquer n'importe où ailleurs !! Donc si qq1 à la solution, je le remercie par avance !
 
Salut Poulpe,

Je ne pense pas qu'il existe de methode toute faite pour retrouver la derniere cellule modifiee. Voici donc une solution alternative toute chaude qui fonctionne tres bien.

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
On Error Resume Next
If Target.Count = 1 Then
If Range(Range("A1")) <> Range("B1") Then Range("A2") = Range("A1")
Range("B1") = Target.Value
Range("A1") = Target.Address
End If
End Sub

'en gros, lorsque tu change de cellule la macro regarde si l'ancienne cellule a change de valeur.
'Si c'est le cas son adresse apparait en A2

'Target.count = 1 evite la selection de plusieurs cellules (ca fout la merde au sinon)

'Le On Error est necessaire pour la toute premiere selection

Tiens moi au courant,

A++, Sylsyl.
 
Bonjour à tous et merci pour votre aide

sylsyl : ta méthode fonctionnerait mais cela signifirait que je dois avoir un double de l'ancienne valeur de TOUTES mes cellules et qu'en même temps je dois vérifier TOUTES les cellules jusqu'à trouver la bonne ! C un peu utiliser un marteau pour écraser la mouche.

andré : Ta méthode fonctionnne et Excel me montre les dernières modification sous forme de commentaire. Mais ce con d'Excel me bloque mon code VB ! Impossible de modifier mon code ! Car moi j'ai besoin d'obtenir la dernière cellule modifié pour obtenir une valeur qui servira de point de départ pour toute une série de calcul effectuée par VBA !

Merci quand même à vous deux !
 
En fait non, ca marche pas comme ca !

je ne sais pas vraiment ce que tu veux faire mais ce que je t'ai donne te donne l'adresse (en A2) de la derniere cellule modifiee (et seulement la derniere). Tu peux faire autant de selection que tu veux, l'adresse en A2 ne changera pas tant que la valeur d'aucune autre cellule n'a ete modifiee.

Pour faire court: l'adresse en A2 est actualisee a chaque modification de cellule (je pensais que c'etait ce que tu voulais)

Effectivement tu n'as plus l'ancienne valeur de la cellule modifiee, mais c'est pas tres complique de la mettre en B2 par exemple:
au 2eme if:
Range("A2") = Range("A1")
Range("B2") = Range("B1")
end if

Tu peux faire un essai dans un nouveau classeur, c'est beaucoup plus parlant.

Andre: j'aime beaucoup les methodes marteau, c'est beaucoup plus amusant que d'utiliser les fonctions toutes faites...
La vrai explication est que je travaillais un peu sous VB6 avant VBA, j'ai donc un reflexe oriente "code".

A++, sylsyl.
 
salut Pouylpe,

Il ne te reste que la macro évenementielle qui copie dans une cellule bien précise la valeur de n'importe quelle cellule à chaque fois qu'elle est validée par Enter.

Evidement si tu sélectionnes une cellule et que tu valides son contenu sans modification, ce sera cette valeur qui sera enregistrée, à moins que quelqu'un trouve l'astuce pour faire la comparaison.

C'est du boulot pour les gros bras du VBA !
Ah, pauvre de moi !

Ândré.
 
QQ’un pourrait-il m’expliquer qu’est ce qui cloche dans mon exemple (ou pourquoi vous ne voulais pas l’utiliser, sniff).

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
On Error Resume Next
If Target.Count = 1 Then
If Range(Range("A1")) <> Range("B1") Then Range("A2") = Range("A1")
Range("B1") = Target.Value
Range("A1") = Target.Address
End If
End Sub

/!\ il faut bien faire la difference entre "adresse" et "valeur" (ou "contenu")

A la premiere execution de la macro, l’adresse de la cellule selectionne apparait en A1 et son contenu en B1 (le On Error gere le Range(“ ”) qui apparaitra alors)

Lorsqu’on deselectionne (c-a-d on selectionne une autre cellule), la macro lit la valeur de la cellule dont l’adresse est en A1 (Range(Range("A1"))),
compare son contenu avec la cellule B1 (<> Range("B1")) et si c’est different alors l’adresse apparait en A2.

Enfin, la macro actualise les cellules A1 et B1 pour la prochaine “deselection” (Range("B1") = Target.Value, Range("A1") = Target.Address), et ainsi de suite…

Moi, je ne vois aucun pb (d’ailleurs ca marche).

A++, Sylsyl.
 
Quand les réponses sont subtiles, on ne s'aperçoit pas forcément du 1er coup que cela fonctionne !!!

Encore merci à toi sylsyl ! Je suis entrain de modifier mon application et grace à toi elle sera maintenant parfaite ! :O)

Bonne continuation et A+++
 
Houuu le mauvais perdant !! lol
Il a fallu que tu cherches une meilleure methode parce que j’ai ete plus vite que toi ?
Ce post est a prendre au Degree(Andre_humeur) & "ieme degree".

Private function Degree(humeur As String) As String
Select case humeur
Case "joyeux"
Degree = “3”
Case "mecontent"
Degree = “100 000 000”
Case "pas content du tout"
Degree = "oublie ce post, c’etait une blague"
End Case
End Function

(Y en a qui s’ennuient…lol)
A++, Sylsyl.

P.S.:c'est vrai que c'est plus facile.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
773
Retour