XL 2013 Macros se désactivent pendant utilisation du classeur

arthour973

XLDnaute Barbatruc
Supporter XLD
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 cadre de ma question :
Je travaille avec des commerciales qui travaillent chez elles.
Chaque Commerciale à son classeur de prospection.
Chaque matin, j'envoie le classeur du jour à chaque Commerciale (via skype).
Quand elles l'ouvre la première fois, elle activent les macros.
Jusque là tout va bien :)

C'est l'utilisation qui pose souvent problème :
Le classeur est truffé de codes indispensables au bon fonctionnement (mon usine à gaz comme dirait job75 LOL)
Tout ou presque est automatisé par codes.

Mais voilà :
On a souvent tendance à utiliser un classeur excel truffé de codes comme un logiciel et ce n'est pas un logiciel.
Souvent, mes commerciales cliquant soit :
- trop vite,
- ou actionnant un bouton avant que l'action précédente soit terminée,
- ou il ne faut pas, .............. font beuguer et les macros se trouvent désactivées.
Elles ne s'en aperçoivent pas ce qui pose un gros souci de fonctionnement et créé des erreurs etc....

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 ?

Voilà qui nous rendrait un très grand service sachant que dans la feuille concernée, j'ai mis un bouton pour ré-activer les macros.
Voilà une bouteille à la mer .... mais avec des magiciens, l'espoir est permis :)

Je ne peux pas mettre de fichier test mais si cela vous semble nécessaire, j'essaierai d'en faire un.
Avec mes remerciements,
Je vous souhaite à toutes et à tous une belle journée,
Amicalement,
lionel,
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Lionel,
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 ?
Bien sûr que non puisqu'il faut une macro pour un message d'alerte.

Ce qu'il faut arriver à savoir c'est pourquoi les macros se désactivent, ce n'est pas normal, sauf quand on passe en mode Création.

A+
 

arthour973

XLDnaute Barbatruc
Supporter XLD
Bonjour Gérard,
Merci d'être encore là.
Bien sûr, je me doutais de la réponse.

Mais je me disais qu'à l'instant T (au millionième de seconde) peut-être qu'un code ....
J'ai essayé de reproduire leurs erreurs etc...
Pour l'instant, je n'ai pas pu reproduire.

Je vais continuer ce WE.
lionel :)
 

Roland_M

XLDnaute Barbatruc
Bien le bonjour à tous,

Salut à toi Job75

Lionel, ceci par exemple:
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
et surtout ça, c'est ton problème,
Application.EnableEvents = False

si tu as un bug pour x raison
et qu'il y a au début de la macro ceci à false
ça ne se remettra pas tout seul, même en faisant "réinitialiser"

c'est ça l'automatisme, avec codes d'origines divers, que tu ne maîtrises pas
et qui finissent par ne plus être cohérents entre eux !

et si tu les mets en rem ou à true
les macros événementielles(codes feuilles)
vont se déclencher en boucle, plantage assuré !

il faut savoir gérer ce genre de fonctions avec des traitements d'erreurs solides, pas toujours évident d'ailleurs !

Job à raison "c'est une usine à gaz" c'est devenu ingérable !
ce genre de réalisation ne peut pas être destinée à plusieurs utilisateurs.

excuses moi, mais on en avait déjà parlé il y a bien longtemps.

amitiés et bonne journée tout de même.
 

arthour973

XLDnaute Barbatruc
Supporter XLD
Bonjour Roland,
Il y a bien longtemps ...
J'espère que tu vas bien :)
Merci pour ta réponse et, comme Gérard, ce que tu dis est vrai et j'en suis conscient.
C'est pour cela que je vais faire reprendre tous les codes avec un Membre du forum qui a bien voulu accepter de s'en occuper.
A bientôt Roland,
Amicalement,
lionel,
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, arthour973, job75, Roland_M

arthour973
A mon sens, la réponse est dans l'enoncé
"On a souvent tendance à utiliser un classeur excel truffé de codes comme un logiciel et ce n'est pas un logiciel."
Excel n'est pas toujours l'outil adapté.
Donc change d'outil
Et si tu tiens à utiliser ton usine à gaz, il faudrait que les utilisateurs finaux maitrisent un tant soi peu le VBA.
Ne serait-ce que pour s'apercevoir que les macros se désactivent.

Que ton usine à gaz soit reprise par un membre du forum n'améliora pas forcément les choses (voire pourra les compliquer si l'ergonomie est modifié en long et en large)
En effet, tes utilisatrices ont pris leur habitubes (bonnes ou mauvaises) et sont toujours au même niveau de maitrise de VBA.
Donc dans ces conditions, ce qui est déjà advenu, adviendra.

Aparté
Au boulot j'utilise un logiciel qui fonctionne par profil (avec des droits plus ou moins élévés selon le profil)
Le profil perment d'activer ou inactiver certaines fonctionnalités
Le profil est liéé au login Windows
Donc quand tu lances le logiciel, tu ne peux faire que le profil te permets de faire.
Tu ne peux rien désactiver ou faire des erreurs par inadvertance.
(Les seules erreurs sont faites par ignorance ou jemenfoutisme:ex même date de naissance et de décès saisie)
Tu ne peux faire que les tâches liées à ton profil
(et comme tout se passe sur Citrix, tu ne peux même pas faire des "conneries" en local sur ton PC)
Mais bon, ceci est un autre histoire.
 

eriiiic

XLDnaute Barbatruc
Bonjour à tous,

sans revenir sur tout ce qui a été dit, tu peux déjà commencer par supprimer tous tes Application.EnableEvents = False
à la place de :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    ' blablabla
    Application.EnableEvents = True
End Sub
tu mets :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If noEvents Then Exit Sub
    noEvents = True
    'blablabla
    noEvents = False
End Sub
noEvents étant déclaré dans un module standard :
Code:
Dim noEvents As Boolean
Ca ne corrigera pas tes bugs mais au moins les macros resteront toujours actives.
Tu peux déclarer plusieurs noEvents (noEvents1, noEvents2, etc) si tu veux contrôler indépendamment différents types d'événement.
eric
 

eriiiic

XLDnaute Barbatruc
Re,

pas sûr que ce soit LA solution ;-)
Ce que tu gagnes d'un coté (réactivation des macros), tu le perds de l'autre.
Avec un enregistrement toutes les 5s tu perds toute possibilité d'annuler une erreur et de revenir en arrière.
Adieu les Ctrl+Z
Je trouve ça 'limite', voire même dangereux si tu ne peux retrouver la saisie écrasée. Tu ne peux même plus te dire 'Pas grave, je n'enregistre pas ma bétise'
Avis personnel :)
Pour moi la meilleure façon de ne pas se retrouver avec les macros désactivées reste... de ne pas les désactiver.
Ou bien que ta macro lancée toute les 5s ne fasse rien, juste relancer le fichier
eric

Edit : je viens de voir que c'est ce qui est proposé en dernier, je n'avais pas encore tout lu
 
Dernière édition:

eriiiic

XLDnaute Barbatruc
Oui, j'ai lu la fin ensuite.
C'est lire 'je l'ai installé dans les fichiers pour sauvegarde chaque 5 secondes ' qui m'a fait réagir.
 

job75

XLDnaute Barbatruc
Bonjour Lionel,

Tu mélanges tout :rolleyes:

Application.EnableEvents = False ne désactive pas les macros mais les évènements.

Si pour une raison ou une autre cette instruction est exécutée on peut bien sûr corriger par :
VB:
Sub ReactiveMacros()
On Error Resume Next
Application.OnTime t, "ReactiveMacros", , False
t = Now + 5 / 86400 'délai de 5 secondes
Application.OnTime t, "ReactiveMacros"
Application.EnableEvents = True 'réactive les évènements
End Sub
Cela dit si Application.EnableEvents a été mis (définitivement) à False c'est que le code est mal fichu, il suffit de le corriger !!!

A+
 

Discussions similaires


Haut Bas