En testant notre fichier de travail, je viens de m'apercevoir d'une chose importante !
Généralement, on ne sélectionne q'une 1 seule cellule à la fois.
Pourtant, pris dans nos actions pour lesquelles nous avons besoin de rapidité pour être performants, il peut nous arriver par erreur de sélectionner plusieurs cellules, en même temps, vers la gauche, la droite ou vers le bas.
Le message d'erreur suivant s'affiche :
Nous cliquons alors sur "Fin" pour en sortir mais les macros se trouvent désactivées.
J'ai prévu ce cas avec un bouton qui réactive les macros :
VB:
Sub activeMacros()
Application.EnableEvents = True
Application.Calculation = xlAutomatic
End Sub
Mais souvent mes collègues oublient de cliquer sur le bouton est travaillent macros désactivées jusqu'à cliquer sur un autre bouton dont elles ont besoin.
Dans ce cas, certaines saisies ne sont pas enregistrées et cela pose problème.
J'ai cherché des solutions mais je n'en ai pas trouvé et je me tourne vers vous pour savoir s'il y aurait une possibilité de code qui ferait en sorte que si sélection de plusieurs cellules vers la droite (même vers la gauche) ou vers le bas, rien ne se passe ?
Et affiche un msg du genre 'vous avez cliqué sur plusieurs cellules !
Ce serait super car je cherche depuis longtemps ce qui pouvait provoquer la désactivation des macros et je pense que cela vient de ça.
Avec mes remerciements,
je vous souhaite une belle fin de journée
lionel,
L'idéal, serait que le code de Gérard ne s'exécute que "If Application.EnableEvents = False Then"
Mais je ne réussi pas à le faire fonctionner avec la condition
Parce que tu as mal placé cette condition, il faut bien sûr que le processus continue donc utilise :
VB:
Sub ReactiveMacros()
On Error Resume Next
Application.OnTime t, "ReactiveMacros", , False
t = Now + 1 / 86400 'délai de 1 seconde
Application.OnTime t, "ReactiveMacros"
If Application.EnableEvents Then Exit Sub
ActiveSheet.Protect Password:="", UserInterfaceOnly:=True
[g13] = "Macros Réactivées"
[g14] = "code Gérard"
ActiveSheet.EnableSelection = xlNoRestrictions
[a2].Select
protege
Application.EnableEvents = True 'réactive les évènements
End...
serait-ce plutôt "sélectionner plusieurs cellules" ?
Si tel est le cas : tu peux toujours, dans l'évènement concerné (selection_change), réduire à la seule première cellule de la sélection faite --->>
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target(1).Select
End Sub
Bonjour à toutes et à tous, Me re-voici pour un souci que nous avons depuis longtemps. J'avais déjà posé la question mais je m'étais mal exprimé (ça m'arrive souvent LOL) et je n'avais pas obtenu de solution. C'est un vrai problème de fonctionnement et je me tourne à nouveau vers vous. Le...
Bonjour JM,
Je n'avais pas oublié ce fil mais merci de me le rappeler.
La question n'était pas la même
"Ma question (sans trop d'espoir) :
Est-il possible, qu'à l'instant ou une fausse manœuvre ou des clics trop rapides désactivent les macros, qu'un message d'alerte apparaisse ?"
C'est vrai, ça se ressemble mais pas pareil pour moi y aurait une possibilité de code qui ferait en sorte que si clic sur plusieurs cellules vers la droite (même vers la gauche) ou vers le bas, rien ne se passe ?
Et affiche un msg du genre 'vous avez cliqué sur plusieurs cellules ! lionel,
Re-jmfmarques,
Si je comprends : Target(1).Select ou R(1).Select
Le 1 demande de ne prendre en compte que la 1ère cellule sélectionnée.
Mais dans ce cas, je dois alors modifier tous mes Target et tous mes R ?
lionel,
J'ai longtemps utilisé ce code (qui fonctionne super bien) dans notre fichier de travail mais mes collègues était "gênées" par un curseur qui mouline en quasi-permanence.
Je cherche à voir s'il n'y a pas une autre solution.
L'idéal, serait que le code de Gérard ne s'exécute que "If Application.EnableEvents = False Then"
J'ai donc tenté de mettre cette condition :
VB:
Sub ReactiveMacros()
If Application.EnableEvents = False Then
protege
On Error Resume Next
Application.OnTime t, "ReactiveMacros", , False
t = Now + 1 / 86400 'délai de 1 secondes'(0.5 pour demie seconde)
Application.OnTime t, "ReactiveMacros"
Application.EnableEvents = True 'réactive les évènements
ActiveSheet.Unprotect Password:=""
[g13] = "Macros Réactivées"
[g14] = "code Gérard"
ActiveSheet.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveSheet.EnableSelection = xlNoRestrictions
[a2].Select
End If
End Sub
Mais je ne réussi pas à le faire fonctionner avec la condition
En cas ... je joins le fichier test
Bonne journée à toutes et à tous,
lionel,
Re-Bonsoir à toutes et à tous,
Je fais des essais sans résultat et je ne comprends pas pourquoi ça ne fonctionne pas
Je n'ai rien changer aux codes du Private Sub Workbook_Open() et de la macro à laquelle je n'ai qu'ajouter la condition.
Logiquement (pour moi lol) ça devrait continuer à fonctionner .. bon sang
lionel,
les événements sont réactivées, mais a priori Application.EnableEvents reste à False par cette méthode.
Tu pourrais le forcer à True que ce soit d'équerre.
Mais...
L'idéal, serait que le code de Gérard ne s'exécute que "If Application.EnableEvents = False Then"
manque de logique.
Si une macro n'est plus lancée toutes les x s tu perds la réactivation.
Il te reste toujours la possibilité que je t'avais indiquée au post #8 du lien signalé par Staple (plus de Application.EnableEvents = False), mais si tu n'en veux pas...
eric
Bonjour eriiiic, le Forum,
Je te remercie pour m'avoir répondu
"Si une macro n'est plus lancée toutes les x s tu perds la réactivation."
Je ne savais pas cela ... J'ai effectivement gardé la possibilité du #Post 8 ... je vais voir ...
Bonne journée
lionel,
L'idéal, serait que le code de Gérard ne s'exécute que "If Application.EnableEvents = False Then"
Mais je ne réussi pas à le faire fonctionner avec la condition
Parce que tu as mal placé cette condition, il faut bien sûr que le processus continue donc utilise :
VB:
Sub ReactiveMacros()
On Error Resume Next
Application.OnTime t, "ReactiveMacros", , False
t = Now + 1 / 86400 'délai de 1 seconde
Application.OnTime t, "ReactiveMacros"
If Application.EnableEvents Then Exit Sub
ActiveSheet.Protect Password:="", UserInterfaceOnly:=True
[g13] = "Macros Réactivées"
[g14] = "code Gérard"
ActiveSheet.EnableSelection = xlNoRestrictions
[a2].Select
protege
Application.EnableEvents = True 'réactive les évènements
End Sub
Nota : un délai de 5 secondes serait à mon avis suffisant.