XL 2021 Comment détecter la modification MANUELLE d'une cellule dans une feuille ?

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 !

PRy

XLDnaute Nouveau
Bonjour à toutes et tous
Il y a bien longtemps que je n'ai pas trouvé de solution à un problème...
Donc mon problème :

J'ai une feuille de plus de 9000 lignes. Je peux faire de la saisie de nouvelles lignes et aussi modifier des valeurs dans 2 colonnes seulement de la feuille.
Je surveille cette feuille à partir de la macro suivante (placée dans la feuille) des plus classiques :

Private Sub Worksheet_Change(ByVal Target As Range)
'
' détecter une modification d'une cellule dans une feuille
Dim xrng As Range
Set xrng = Range("C1😀20000")
If Not Application.Intersect(xrng, Range(Target.Address)) _
Is Nothing Then
MsgBox " un changement est intervenu sur la feuille opération"
End If

Seulement voilà :
J'utilise une macro déclenchée par un bouton qui permet de faire un tri sur les lignes de cette feuilles ..... Et forcément, des cellules de ces 2 colonnes de chiffres sont amenées à être modifiées .... et déclenchent chacune leur tour la condition IF de cette macro de surveillance.
Imaginez les dégâts !! il peut y avoir des milliers de cellules modifiées !!
Cela se termine par la fermeture forcée d'Excel (je n'ai pas de touche break sur mon pc HP !!).

Donc, je souhaiterai que cette macro de surveillance ne déclenche la condition IF que si une cellule de la condition RANGE a été modifiée MANUELLEMENT (avec mes petites mains sur mon clavier !!).

Est-ce possible ... et si oui ... comment ?

Merci d'avance pour votre aide précieuse ..
Bien cordialexcelment
 
Solution
Bonjour @PRy🙂,

Pour votre macro de tri, essayez la structure suivante :
VB:
Sub Trier()
Dim x
   On Error GoTo FIN                   ' en cas d'éventuelle erreur , on rétablit le traitement des évènements
   Application.EnableEvents = False    ' on inhibe le traitement des évènements
 
   Instructions de tri                 ' on fait ce qu'on a à faire (ici le tri)

FIN:
   Application.EnableEvents = True     ' on rétablit le traitement des évènements
   On Error GoTo 0                     ' annule le branchement quand il y a erreur (facultatif si avant le End Sub)
End Sub
Bonjour @PRy🙂,

Pour votre macro de tri, essayez la structure suivante :
VB:
Sub Trier()
Dim x
   On Error GoTo FIN                   ' en cas d'éventuelle erreur , on rétablit le traitement des évènements
   Application.EnableEvents = False    ' on inhibe le traitement des évènements
 
   Instructions de tri                 ' on fait ce qu'on a à faire (ici le tri)

FIN:
   Application.EnableEvents = True     ' on rétablit le traitement des évènements
   On Error GoTo 0                     ' annule le branchement quand il y a erreur (facultatif si avant le End Sub)
End Sub
 
Dernière édition:
Bonjour @PRy🙂,

Pour votre macro de tri, essayez la structure suivante :
VB:
Sub Trier()
Dim x
   On Error GoTo FIN                   ' en cas d'éventuelle erreur , on rétablit le traitement des évènements
   Application.EnableEvents = False    ' on inhibe le traitement des évènements
 
   Instructions de tri                 ' on fait ce qu'on a à faire (ici le tri)

FIN:
   Application.EnableEvents = True     ' on rétablit le traitement des évènements
   On Error GoTo 0                     ' annule le branchement quand il y a erreur (facultatif si avant le End Sub)
End Sub
Super !!
Merci pour votre réponse rapide.
Je vais mettre en oeuvre et je reviendrai donner le résultat !!
Merci encore
 
- 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

Discussions similaires

Retour