Détecter si une cellule est en édition

Bonjour,

j'aurai voulu savoir s'il était possible de détecter si l'utilisateur est encore dans l'édition d'une cellule lorsqu'il appuie sur un bouton sur la feuille.

Je vous explique la situation:

L'utilisateur va pouvoir mettre à jour des données d'une BDD Access via Excel. Pour cela je fait une recopie des ligne qu'il veut grâce à un formulaire.

Avec l’événement Workbook_SelectionChange je détecte les cellule qui ont subi des changements et les garde en mémoire dans une variable globale.

J'ai ensuite une macro qui me permet de mettre à jour la BDD avec les valeurs qui ont été mémorisées.

Le problème étant que si l'utilisateur est encore en mode "édition" d'une cellule, celle-ci n'est pas détectée comme étant mise à jour, ne sera pas mise à jour à l’exécution de la macro mais sera mis en file d'attente pour la prochaine exécution.

Savez-vous comment détecté qu'une cellule est en édition, afin de pour l'ajouter directement à ma liste ?

Sachant que j'ai déjà essayé de sélectionner une autre ligne (par macro) afin de "valider" les changements en cours, sans succès.

Cordialement,

Arthur.

bonjour,

pourquoi tu n'utilises pas l'événement change plutôt que selectionchange ?

Bonjour à tous,

La description du fonctionnement faite par Arthur me semble mieux correspondre à l’évènement Change que SelectionChange .

De plus, Workbook_SelectionChange ... connais pas !

Cordialement.

bonjour h2so4, gyrus

Voici le code que j'utilise pour détecter le changement d'une valeur dans une cellule :

Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Application.EnableEvents = False
    On Error GoTo fin
    der_ligne = ThisWorkbook.Sheets("cde en cours").Range("B" & Rows.Count).End(xlUp).Row + 1
    If CInt(Split(Target.Address, "$")(2)) <= 13 Or CInt(Split(Target.Address, "$")(2)) >= der_ligne Then
        Application.EnableEvents = True
        Exit Sub
    End If
    prochaine_cellule = ActiveCell.Address
    rep = Target.Value
    Application.Undo
    rep1 = Target.Value
    Application.Undo
    If rep <> rep1 Then
    changement_dans_cellule = changement_dans_cellule & CStr(ThisWorkbook.Sheets("cde en cours").Cells(13, Target.Column).Value) & ";" 'On enregistre le titre de la colonne de la cellule changée
    changement_dans_cellule = changement_dans_cellule & CStr(ThisWorkbook.Sheets("cde en cours").Range("D" & Target.Row).Value) & ";" 'On enregistre le numéro de commande de la cellule changée
    changement_dans_cellule = changement_dans_cellule & CStr(ThisWorkbook.Sheets("cde en cours").Range(Target.Address).Value) & ";" 'On enregistre la nouvelle valeur de la cellule
    'La lecture des données se fait PAR COLONNE
    End If
    ThisWorkbook.Sheets("cde en cours").Range(prochaine_cellule).Select
fin:
    Application.EnableEvents = True
End Sub

h2so4, je n'utilise pas l’événement Change car la macro s'exécuterai à chaque modification dans la cellule or j'aimerai exécuter la mise en mémoire qu'a la fin de la saisie afin de n'obtenir que la valeur final et pas l'avancement de la saisie.

Gyrus, je me suis trompé de nom en énonçant le Sub utilisé, c'est Workbook_SheetChange qui est utilisé, désolé de l'erreur.

bonjour,

à ma connaissance, sheetchange et change s'exécute à chaque changement, la différence entre les deux, c'est que dans le premier tu reçois l'info t'indiquant sur quel onglet s'est fait le changement. (mais soit, le problème n'est pas là).

quel événement déclenche la mise-à-jour de ta db ?

quel événement déclenche la mise-à-jour de ta db ?

J'ai plusieurs événements qui peuvent déclencher la mise à jour de la db.

Soit l'utilisateur veut effectuer une autre recherche, un msgbox s'ouvre (si des changements ont été faits) et il peut choisir s'il veut mettre a jour la base avec les changement ou non (les changements sont perdu s'il refuse).

Soit l'utilisateur veut insérer une nouvelle ligne, sans garder les ligne précédemment affichées à l'écran. Rebelote, un msgbox s'ouvre.

Et enfin, l'utilisateur veut fermer le fichier, s'il y a des changements qui ont été faits, un msgbox ...

Voila, mais du coup s'il a fait un changement dans une cellule sans la valider (entrer ou tab ou sélection d'une autre cellule) ce dernier changement sera ignoré et pas mis à jour, ce qui est embêtant .

Aurais-tu une idée pour validé ce changement à sa place avant que la macro s’exécute (pour que l'événement Workbook_SheetChange puisse s’effectuer avant la suite du code de MAJ) ?

Bonjour,

à ma connaissance, il n'est pas possible de faire ces opérations (lancer une macro, ajouter une ligne, ou fermer le fichier) si une cellule est en mode édition. Que fais-tu pour y parvenir ?

Si cela est impossible, je ne sais pas comment j'y arrive.

Si je double clique dans une cellule et que je change le contenue sans valider, lors de l'appuie sur le bouton de lancement de macro la cellule sort du mode édition. Si cela sortait du mode édition de façon "normal" l'événements Workbook_SheetChange se lancerai et cela ajouterai ce changement à la liste avant de mettre à jour la db et il n'y aurai aucun problème.... sauf que sa le fait pas ..

Des idées ? je ne vois pas ce que je pourrais expliquer de plus :/

NB: Je répondrai demain à ta réponse, j'ai un rendez-vous qui m'attend

Bonjour,

ok j'ai zappé le clic sur un bouton pour lancer une macro.

quand tu cliques sur un bouton pour lancer une macro, la macro s'exécute PUIS l'événement change est activé (trop tard donc pour ce que tu veux faire).

pour pallier ce problème tu pourrais désactiver tes boutons (événement selectionchange) quand tu rentres en mode edit et de les réactiver quand tu en sors (événement change).

pour pallier ce problème tu pourrais désactiver tes boutons (événement selectionchange) quand tu rentres en mode edit et de les réactiver quand tu en sors (événement change).

Oui mais ce n'est plus transparent pour l'utilisateur. Finalement je pense que je vais ajouter manuellement les information de la cellule active à la liste des MAJ à faire.

Je préféré faire une MAJ inutile que d'en oublier une

Rechercher des sujets similaires à "detecter edition"