Desadctiver temporairement une macro Private Sub

Bonjour et merci à vous pour prendre le temps de me lire,

Voici ma problématique :

J'ai un fichier avec 3 onglets. Le 1er est une feuille d'analyse, Le 2ème est une liste de client et le 3ème est l'ensemble des résultats des différents clients sur le mois (Janvier dans l'exemple).

Dans l'onglet "Liste", il y a un bouton qui permet d'actualiser les tableau du 1er onglet "analyse" à partir de la liste client présent dans le 2ème onglet.

Malheureusement, j'ai également dans l'onglet "Analyse" 2 Private Sub qui range par ordre décroissant les clients à partir de leurs résultats. Or, cela me fais perdre énormément de temps dans l'actualisation des tableaux. Je souhaiterai désactiver ces 2 macros pendant l'actualisation et qu'elles se reactivent seulement l'actualisation effectuée. J'ai essayé

Activate Event = True

et

Activate Event = False

mais je ne sais apparemment pas où les mettre puisque cela ne fonctionne pas.

J'ai mis un exemple simple. Dans mon fichier réel, il y a des centaines de lignes et c'est beaucoup plus long (20 minutes)

Merci à vous pour votre aide.

15exemple.xlsm (32.93 Ko)

Bonjour,

L'utilisation de l'instruction EnableEvents comporte des risques en cas de "bug"...

On peut avantageusement le remplacer par une valeur boléenne.

Pour ce faire, dans le module2, tu ajoutes une variable booléenne en Public comme ceci :

Public Flag As Boolean
Sub ActualiseTableaux()
Dim Cel As Range, Depart As String, Ligne As Long
Dim J As Long

Flag = True
  With Sheets("Analyse")
.....'reste du code

Et à la fin de ce code :

.....
.....
  End With
Call tri
Call trib
Flag = False
End Sub

Et surtout, dans l'évènement de l'onglet "Analyse", tu modifies ainsi :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Flag Then
    Call tri
    Call trib
End If
End Sub

Bonne fin de journée

tetter88 a écrit :

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Flag Then

Call tri

Call trib

End If

End Sub

Erreur de compilation:

Nom Ambigu detecté : Flag

ca veut dire quoi?

Re-,

Tu n'aurais pas déjà une autre variable du même nom?

regarde le fichier joint...

10tetter-v1.xlsm (34.20 Ko)

Merci !

En effet, j'ai 2 variables dans mon fichier final qui effectue la même chose. Mais elles n'ont pas le même nom et ne prennent pas en compte les mêmes cellules. Par contre elles s'activent avec 2 boutons différents. J'aurai besoin que les 2 puissent désactiver les macros de tri.

Comment puis-je faire ceci?

Merci pour ton aide

Re-,

Avoir 2 variables qui effectuent la même chose, pas de soucis, d'autant plus qu'elles n'ont pas le même nom....

D'après ce que je comprends, tu n'as pas mis en exemple la structure exacte de ton fichier réel....

Ni les codes utilisés...

Ni les tableaux utilisés....

Ni les onglets impactés....

Et là, ma boule de cristal ne me donne rien...

Bon courage

Bonjour,

Voici ci-joint un fichier comportant les 2 macros présentes. Comme tu le verras, elles sont similaires à part qu'un va chercher la liste client, l'autre la liste FP. Je souhaite garder les 2 boutons distinctifs si possible.

Navré, mais je ne pensais pas que ça ferai doublon.

En espérant que tu puisses m'aider.

7tetter-v2.xlsm (36.97 Ko)

Bonsoir,

Je n'ai pas fait du ligne à ligne pour comparer les 2 codes dans les modules 1 et 2, mais à part les deux procédures appelées à la fin par l'instruction "Call", je ne vois pas trop de différences...

Donc, pourquoi, 2 codes "quasi-identiques"?

Et effectivement, dans ces 2 modules, tu déclares à chaque fois la variable booléenne "Flag"....

D'où ton message d'erreur.

La question n'est pas de savoir comment faire, c'est surtout de se poser la question de l'utilité des 2 codes....

Bonne soirée

L'un met a jour les tableaux clients, l'autres les tableaux FP. Voila la seule différnce et cela doit rester comme cela car l'utilisateur final peut choisir de mettre a jour l'un sans l'autre ou vice et versa.

L'interet est sur la finalité du document. La mise a jour n'est a faire qu'une fois tous les mois pour la liste client et une fois par an pour les FP (et encore...). Dans le fichier final, il y a des centaines de lignes et beaucoup plus de tableaux. L'intérêt est donc de pouvoir mettre la jour les tableaux comportant la liste client sans mettre a jour les autres.

Comment peut-on dans ce cas desactiver les macros de tri durant l'execution de ces 2 macro de mise a jour svp?

Re-,

Dans ce cas, utilise deux variables booléennes différentes

Style Flag1 et Flag2 (chacune à déclarer en Public dans leurs modules respectifs)

Et dans le Worsheet_Change de l'onglet "Analyse", tu mets ceci :

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Flag1 Or Flag2 Then Exit Sub
        Call tri
        Call trib
    End Sub
     

Et dans chaque module, tu mets la variable à True en début de code, et à False en toute fin de code

Bonne soirée

Ca marche nickel !

Merci beaucoup

Rechercher des sujets similaires à "desadctiver temporairement macro private sub"