Microsoft 365 Sélection en même temps de plusieurs cellules vers la gauche, la droite ou vers le bas

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

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 :
Sans titre.jpg

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,
 
Dernière édition:
Solution
Bonjour Lionel, le fil,
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 :mad:
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...

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
OUI, Gérard, je comprends mais mes collègues travaillent plus vite que leur ombre. J'ai mis 1sec.5.
ça semble bon.
Toutefois, il me semble que quand on clique sur une action (un bouton) si le code "réactiver les macros" s'exécute en même temps, ça bloque et le code se désactive ... je continue mes tests :)
lionel,
 

eriiic

XLDnaute Barbatruc
Je reste persuadé que l'utilisation d'une variable pour sortir tout de suite et ne plus utiliser EnableEvents = False reste plus simple et plus fiable ;-)
Ca ne coûte qu'une seule ligne de test en plus au début des macros concernées, et 0 effet collatéral assuré.
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re @ eriiiic
Merci pour ton message:)
Je ne suis pas un ténor en vba ... et de loin et je ne spik pas l'anglisse (tu l'a compris lol ;))
Mon "usine à gaz" est bourrée de codes qui doivent être désactivés quand d'autres s'exécutent.
ça craint "grave" ... mais dès que j'aurai un moment, j'essaierai de tester sur un fichier :)
lionel,
 

job75

XLDnaute Barbatruc
La manière de faire proposée par eriiiic je l'utilise pour bloquer les macros des UserForms.

Car Application.EnableEvents = False ne désactive pas les évènements des UserForms.

Mais pour bloquer les macros évènementielles des feuille de calcul il vaut mieux utiliser les Application.EnableEvents, c'est fait pour ça.
 

Discussions similaires