Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Usine à gaz

XLDnaute Barbatruc
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 :

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

Usine à gaz

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

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
 

Usine à gaz

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

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…