Private Sub Workbook_Open ne se lance pas

Bonjour à tous,

Petit souci du jour, dans le Private Sub Workbook_Open() j'appel un module et rien ne se passe.

Quand j'exécute le module directement, il fonctionne nickel ....

Le fichier est fini (hormis ce problème) et est donc bourrer d'infos personnelles, raisons pour laquelle je ne le joins pas à ce post. Si c'est absolument nécessaire, je l'anonymiserai et le transmettrai.

Ci-joint le Private Sub Workbook_Open() et le module en question.

Private Sub Workbook_Open()

Call Module1.Affichage_feuille

'Interdit le tirage des formules dans les 4 directions et le glisser déplacer
    If Environ("USERNAME") = "t.lopez" Or Environ("USERNAME") = "sotin" Then
        Else
            Application.CellDragAndDrop = False
    End If

    If Environ("USERNAME") = "t.lopez" Or Environ("USERNAME") = "b.goisnard" Or Environ("USERNAME") = "l.marchelek" Then
        Call Module8.afficher_feuille
    End If
End Sub
Sub Affichage_feuille()
Dim Sh As Worksheet

Application.ScreenUpdating = False

For Each Sh In ThisWorkbook.Sheets
    Sh.Visible = True
Next

Sheets("Prénoms").Select
    For Each Sh In ThisWorkbook.Worksheets
        With Sh
            If Not .Name = "Prénoms" Then .Visible = False
        End With
    Next

Call Module8.Verouillage_Final
UserForm4.Show

Application.ScreenUpdating = True

End Sub

Merci pour votre aide ;)

Pour infos, il me semble que l'erreur vient dès le début. Peut être à l'affichage de toutes les feuilles du classeur.

Car si je ferme le fichier sur la bonne feuille "Prénoms", à la réouverture l'Userform4 s'ouvre ...

Bon, .....

Je viens de mettre

Application.ScreenUpdating = False
Application.ScreenUpdating = True

En commentaire et ça fonctionne ... Comme quoi parfois ça tiens à rien 😒😒😒

Du coup je transforme ma question, pourquoi ces deux lignes font tout planter ?

Bonjour,

Par curiosité, au lieu d'une macro Workbook_Open, essaie de mettre ton code dans une sub Auto_Open dans un module standard.

Daniel

Bonjour,

Entre temps ça ne fonctionnait plus, ... Un truc à s'arracher les cheveux ! 🥴🥴🥴

J'ai appliqué votre solution et ça fonctionne ! La question est pourquoi ?

Merci ;)

Ca, je ne peux pas le dire. J'ai déjà eu un problème avec Workbook_Open. Il me semble que c'était avec OnTime.

Daniel

... Si Application.EnableEvents est positionné à False, la macro Workbook_open ne se déclenche pas. Mets un Debug_Print ou un msgBox en première instruction pour voir si c'est le cas.

Daniel

Effectivement, un de mes premiers reflexe a été de mettre un MsgBox pour voir s'il s'affichait. Et il ne s'affichait pas...

D'accord, c'est un mystère 😂. Merci pour ton aide en tout cas ;)

Bonjour,

Quelques précisions me semblent nécessaires...

DanielC :

Si Application.EnableEvents est positionné à False, la macro Workbook_open ne se déclenche pas

- L'évènement Workbook_Open ne se déclenche qu'à l'ouverture, donc l'état d'EnableEvents est forcément à True
- Et dans le code de Sotin, il ne parle que de "ScreenUpdating"...

Dans les codes fournis dans le 1er post...

Call Module8.afficher_feuille

Et la sub s'appelle : (si c'est bien cette sub que tu mets dans le fil)

Sub Affichage_feuille()
....

Et dans le code, tu démasques, puis masques à nouveau :

For Each Sh In ThisWorkbook.Sheets
    Sh.Visible = True
Next

Sheets("Prénoms").Select
    For Each Sh In ThisWorkbook.Worksheets
        With Sh
            If Not .Name = "Prénoms" Then .Visible = False
        End With
    Next

C'est quoi l'intérêt?

Et ensuite, tu appelles "Verrouillage_final"???

On ne sait pas du tout ce qu'il contient..

Par hasard, tu n'utiliserais pas des On Error Resume Next par "fainéantise" ? (instruction à bannir, sauf cas très très spéciaux)

Bref, le code est tout simplement mal fait.

L'idéal serait que tu donnes littéralement le but recherché...

Au contraire. Essaie d'exécuter l'instruction :

Application.EnableEvents = True

avant d'ouvrir le classeur depuis la fenêtre Excel.

Re cousinhub,

Alors, le

Module8.afficher_feuille

et le

Sub Affichage_feuille

Sont deux choses totalement distincte l'une de l'autre. la première faisant appel au Sub afficher_feuille() dans le module8. Le seconde faisant appel au Sub Affichage_feuille présent dans le module1.

L'intérêt de masquer/démasquer est que ce code fait apparaitre à l'écran 20 feuilles puis les masques pour en afficher qu'une seule à l'écran et que ce soit toujours la même. De part mes précédents échanges sur ce forum, ont m'a appris que cette technique permettait de gagner un peu de temps lors de l'exécution du code. De plus il n'est pas très esthétique d'avoir un cafouillage de feuille à chaque ouverture du classeur ...

Sub Verouillage_Final()

Fait appel à un module qui verrouille certaines feuilles d'une sorte et d'autres d'une autres (suivant leur noms).

Par hasard, tu n'utiliserais pas des On Error Resume Next par "fainéantise" ? (instruction à bannir, sauf cas très très spéciaux)

Absolument pas ...

Bref, le code est tout simplement mal fait.

Que voulez-vous, comme déjà expliqué j'apprends le VBA au fur et à mesure des besoins ... Et puis on ne peux pas être bon partout, sinon je n'aurais pas posé de question sur ce forum .....

Re DanielC,

Au contraire. Essaie d'exécuter l'instruction :

Application.EnableEvents = True

avant d'ouvrir le classeur depuis la fenêtre Excel.

Heuuu j'ai pas tout compris 😂, ou et à quel moment je saisi Application.EnableEvents = True ?

Pardon,

Exécute la macro :

Sub Enable()
  Application.EnableEvents = True
End Sub

Daniel

Dac c'est fait merci ;)

Bonjour,

Sont deux choses totalement distincte l'une de l'autre. la première faisant appel au Sub afficher_feuille() dans le module8. Le seconde faisant appel au Sub Affichage_feuille présent dans le module1.

A lire votre demande, quel est l'intérêt de faire mention du nom du module si les 2 codes portent un nom différent ?

Aussi une chose, la macro Private Sub Workbook_Open() se trouve bien dans THISWORKBOOK de votre fichier ?

à quel moment je saisi Application.EnableEvents = True

Oubliez cette instruction. Au vu des codes elle ne sert pas, si ce n'est à suspendre l'exécution des macros événementielles.

Cordialement

Bonsoir Dan,

A lire votre demande, quel est l'intérêt de faire mention du nom du module si les 2 codes portent un nom différent ?

Si je comprend bien, vous dite que lorsque l'on appel un Sub dans un code, il n'est pas obligatoire de commencer par le nom du module dans lequel il se trouve ? Si tel est le cas, je ne le savais pas :)

Aussi une chose, la macro Private Sub Workbook_Open() se trouve bien dans THISWORKBOOK de votre fichier ?

Oui exactement.

A + ;)

Si je comprend bien, vous dite que lorsque l'on appel un Sub dans un code, il n'est pas obligatoire de commencer par le nom du module dans lequel il se trouve ? Si tel est le cas, je ne le savais pas :)

Rien ne vous empêche de le faire mais vous n'êtes pas obligé d'autant que toutes les macros sont dans le même fichier.

Pour ce qui concerne le code Open, fermez votre fichier puis réouvrez-le, le code doit se lancer.
pour le vérifier, mettez ceci juste en dessous de Private sub workbook_open --> Msgbox "test"

Si le message s'affiche c'est que cela fonctionne bien

Bonjour Dan,

Je suis étonné de lire ceci :

à quel moment je saisi Application.EnableEvents = True

Oubliez cette instruction. Au vu des codes elle ne sert pas, si ce n'est à suspendre l'exécution des macros événementielles.

C'est justement le contraire ! Ce code permet l'exécution des macros événementielles. Et si cette option est désactivée, la macro Workbook_Open ne s'exécutera pas. Il est donc essentiel que cette option soit activée.

Daniel

Bonjour DanielC,

C'est justement le contraire ! Ce code permet l'exécution des macros événementielles. Et si cette option est désactivée, la macro Workbook_Open ne s'exécutera pas. Il est donc essentiel que cette option soit activée.

Absolument pas. vous êtes dans l'erreur.
Lorsque vous ouvrez excel, cette instruction est par défaut à True (heureusement d'ailleurs)

Si vous la désactivez dans un code lorsque le fichier est ouvert, les macros événementielles seront stopées tant que vous ne remettez pas la valeur à True. Mais si vous fermez excel et que vous réouvrez votre fichier cette valeur est à true.

Cousinhub vous fait également remarquer cela.--> https://forum.excel-pratique.com/s/goto/1119159

Ce que vous dites était vrai avec les versions excel précédente à excel 2007. Là cela mettait le souc partout d'ailleurs. Raison pour laquelle je déconseille toujours d'utiliser cette instruction (à valeur True ou False). Il suffit que votre code plante entre les deux instructions et c'est patatra...

Re-,

Je corrige un peu mon affirmation :

- L'évènement Workbook_Open ne se déclenche qu'à l'ouverture, donc l'état d'EnableEvents est forcément à True

Par, "normalement"

Sauf si ce classeur a été ouvert APRÈS un autre classeur ayant désactivé cet état.

Si le fichier est ouvert tout seul, c'est forcément à TRUE au démarrage...

Rechercher des sujets similaires à "private sub workbook open lance pas"