Erreur 9 : L'indice n'appartient pas à la sélection

Bonjour MFerrand,

Désolé de ne répondre que maintenant.

Effectivement je ne comprends pas vraiment non plus d'où vient le problème. J'ai toujours la MsgBox qui s'affiche avec ton code

Bonjour,

Moi (vu que nous en exécution normale on n'a aucun problème) je pense que c'est plutôt lié à l'hyperlink et/ou à un problème d'exécution asynchrone :

Essaie de glisser un DoEvents

juste avant le Application.ScreenUpdating = True

...
Next Ws
DoEvents
Application.ScreenUpdating = True
...

Par ailleurs je ne suis pas trop d'accord avec mon ami Ferrand : Le traitement en dernier de

Sheets("Accueil")
    .Visible = xlSheetVeryHidden

se justifie par le fait que on ne peut masquer toutes les feuilles en même temps :

Vu que toutes autres feuilles sont déjà masquées, si par un malheureux hasard dans le :

For Each Ws In ThisWorkbook.Worksheets

on passe d'abord dans le Select Case "Accueil", ça revient à masquer toutes les feuilles et là VBA va couiner... Ça ne veux pas dire que le Select Case est à jeter... Mais il faut en exclure Accueil et ne traiter "Accueil" quand on est sur qu'au moins une feuille est visible...

Bon en apparence, c'est pas bien grave, (car tu aurais un autre message d'erreur) mais selon la loi de Murphy, il vaut mieux éviter !

Enfin je suis un peu dubitatif avec le :

Ws.Protect Password:="mdp"

car je n'ai pas vu de .Unprotect dans le Before_Close...

Bref, tout ceci illustre un peu toutes les difficultés qu'on a tester une situation avec des indices fragmentaires, au compte-goutte, hétéroclites...

A+

Sur Accueil d'accord avec Galopin... j'étais focalisé sur autre chose et n'ai pas pris en compte que c'était la seule feuille visible à l'ouverture... Il est donc logique de la masquer en dernier.

La protection n'interfère pas avec le masquage démasquage, et ne devrait donc pas créer de problème. Mais s'il n'y a pas d'Unprotect, inutile de protéger à répétition !

Sur ce fichier, on ne voit toujours pas de source d'erreur 9... Il faut donc voir comme dit Galopin du côté du fichier appelant.

Tente d'abord la manoeuvre indiquée...

Bonsoir Galopin01, MFerrand,

Merci pour vos réponses.

Concernant le masquage de la feuille "Accueil", j'avais déjà rectifié de moi-même, rien de méchant.

galopin01 a écrit :

Essaie de glisser un DoEvents

Rien n'y fait, toujours l'affichage de cette MsgBox

MFerrand a écrit :

Il faut donc voir comme dit Galopin du côté du fichier appelant

Mais que dois-je contrôler sur ce fichier...?

Sinon, je contourne le problème soit en supprimant cette MsgBox, soit comme ceci :

Sheets(Format(Date, "mmmm")).Activate
        MsgBox "L'onglet " & StrConv(Format(Date, "mmmm"), vbProperCase) & " est bien sélectionné !"

Au lieu d'ouvrir par le lien hypertexte, ouvre le fichier directement, pour voir si l'ouverture à partir d'un autre classeur a une incidence...

Ah oui évidemment...

Mais toujours le même message...

Est-ce que cela pourrait venir de la configuration système Windows... ?

Donc c'est bien dans le classeur !

Tu es sûr qu'il n'y a pas d'autre code...

Bonjour

dit moi que vous donne :

Sub Workbook_Open()
MsgBox (Format(Date, "mmmm"))
Sheets(Format(Date, "mmmm")).Activate
If Err <> 0 Then MsgBox "L'onglet " & Format(Date, "Mmmm") & " n'existe pas !"
End Sub
MFerrand a écrit :

Tu es sûr qu'il n'y a pas d'autre code...

Non, rien d'autre...

AMIR a écrit :

dit moi que vous donne :

Bonjour Amir, la 1ère MsgBox me renvoie "mars"

Essaie peut-être en utilisant une variable:

mois = Format(Date, "mmmm")
Sheets(mois).Activate
MFerrand a écrit :

Essaie peut-être en utilisant une variable:

Ca ne fonctionne toujours pas...

J'ai testé en supprimant le code "BeforeClose" :

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Ws As Worksheet

    Application.ScreenUpdating = False

Sheets("Accueil").Visible = xlSheetVisible

For Each Ws In ThisWorkbook.Worksheets
    If Ws.Name <> "Accueil" Then Ws.Visible = xlSheetVeryHidden
Next Ws

    Application.ScreenUpdating = True

ThisWorkbook.Save
End Sub

et la MsgBox ne s'affiche enfin plus... Mais alors là, je ne comprends vraiment pourquoi

Pas d'idée sur la façon dont ça intervient ! (Et pas le temps de bâtir toute une config. pour tester...)

J'avoue que ça m'intrigue pas mal cette histoire... !

Mais bref, j'ai contourné le problème donc tout va bien...

Et ça ne vaut pas le coup que tu t'embêtes à tester une config...

Pour info, c'est ce code de la sub BeforeClose qui génère l'affichage de la MsgBox :

For Each Ws In ThisWorkbook.Worksheets
    If Ws.Name <> "Accueil" Then Ws.Visible = xlSheetVeryHidden
Next Ws

Idem si je remplace par :

For Each Ws In ThisWorkbook.Worksheets
        Select Case Ws.Name
            Case "Accueil"
                Ws.Visible = xlSheetVisible
            Case Else
                Ws.Visible = xlSheetVeryHidden
        End Select
    Next Ws

Merci encore pour ton aide et merci également aux autres

Bon WE !

Rechercher des sujets similaires à "erreur indice appartient pas selection"