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...

jmfmarques

XLDnaute Accro
Bonjour
Qu'entends-tu exactement par
il peut nous arriver par erreur de cliquer sur plusieurs cellules vers la gauche, la droite ou vers le bas.
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

ou même ne rien faire (exit sub) avec ou sans message.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, arthour973, jmfmarques (re)

•>arthour973
C'est dingue d'avoir la mémoire si courte...(lol)
Range tes archives! ;)
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
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,
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour JM, jmfmarques, Le Forum,
je reviens sur le fil pour ce qui suit :
@ JM : Effectivement Gérard avait trouvé un code génial, objet du fil https://www.excel-downloads.com/thr...ent-pendant-utilisation-du-classeur.20034310/

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 :mad:
En cas ... je joins le fichier test :)
Bonne journée à toutes et à tous,
lionel,
 

Pièces jointes

  • Réactive les macros_Job_test_TProt.xlsm
    28.1 KB · Affichages: 9
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Bonsoir à toutes et à tous,
Je fais des essais sans résultat et je ne comprends pas pourquoi ça ne fonctionne pas :mad:
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 :confused:
lionel,
 

eriiic

XLDnaute Barbatruc
Bonjour,

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
 

job75

XLDnaute Barbatruc
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 Sub
Nota : un délai de 5 secondes serait à mon avis suffisant.

A+
 

Discussions similaires

Statistiques des forums

Discussions
311 721
Messages
2 081 927
Membres
101 842
dernier inscrit
seb0390