Bug Excel 2013 - onglet activé différent de l'onglet actif

Bonjour,

Mon souci concerne un bug spécifique à la version 2013 d'Excel. Je synthétise mon problème ci-dessous :

Dans un fichier possédant 2 feuilles de calcul Feuil1 et Feuil2, j'ai une macro qui effectue des opérations dans la Feuil1 puis qui active la Feuil2 (Worksheets("Feuil2").activate) dans laquelle des données doivent être entrées manuellement.

Ca fonctionne bien sur Excel 2007 et 2010. Mais sur Excel 2013, les données entrées dans la Feuil2 s'affichent dans la Feuil1. De plus, quand ma Feuil1 est protégée, il ne m'autorise pas à entrer de valeurs dans la Feuil2.

Excel agit comme si l'onglet actif (Feuil1) était différent de l'onglet activé et affiché (Feuil2) alors que j'ai bien activé la Feuil2 et sélectionné une cellule de la Feuil2 dans la macro. Comment contourner le problème ?

Edit : le problème peut être réglé en cliquant manuellement sur l'onglet ("Feuil1") et en recliquant sur l'onglet ("Feuil2") mais ce n'est pas acceptable pour mon outil. Il faut que ça fonctionne sans avoir à faire cette manipulation.

Bonjour, un petit fichier d'exemple serait le bienvenu.

C'est bien la première fois que j'entends parler d'un "bug" pareil...

Il y a de fortes chances que cela ne soit pas un bug mais plutôt un problème dans le code.

Et si tu essaies Sheets("Feuil2").Select, cela donne quoi?

J'ai voulu créer un fichier avec une macro toute simple pour exposer mon problème et forcément il n'y a pas de bug dans ce cas -_-

J'ai testé le .Select mais ça ne fonctionne pas. Je suis allé sur des sites anglophones et le problème est déjà apparu.

La solution est la suivante :

- il faut utiliser un Userform à la place de la Msgbox et activer l'option vbModeless lors de l'affichage du Userform.

heylic a écrit :

J'ai voulu créer un fichier avec une macro toute simple pour exposer mon problème et forcément il n'y a pas de bug dans ce cas -_-

J'ai testé le .Select mais ça ne fonctionne pas. Je suis allé sur des sites anglophones et le problème est déjà apparu.

La solution est la suivante :

- il faut utiliser un Userform à la place de la Msgbox et activer l'option vbModeless lors de l'affichage du Userform.

Je suis actuellement en auto-formation Excel 2013 et je n'ai jusqu'à ce jour jamais rencontré ce problème.

Je suis surpris de l'utilisation d'un formulaire à la place de la msgbox.

Pourriez vous mettre votre macro qui pose problème pour qu'on y jette un oeil ?

Bonjour le fil,

heylic a écrit :

Ca fonctionne bien sur Excel 2007 et 2010. Mais sur Excel 2013, les données entrées dans la Feuil2 s'affichent dans la Feuil1. De plus, quand ma Feuil1 est protégée, il ne m'autorise pas à entrer de valeurs dans la Feuil2.

Heuuuu, a ma connaissance, ce n'est pas possible

heylic a écrit :

La solution est la suivante :

- il faut utiliser un Userform à la place de la Msgbox et activer l'option vbModeless lors de l'affichage du Userform.

Rien à voir entre un USF et un MSGBOX, le problème vient bien de ton code, mais sans ....

A+

BrunoM45 a écrit :

Heuuuu, a ma connaissance, ce n'est pas possible

Et pourtant si. Incompréhensible effectivement

BrunoM45 a écrit :

Rien à voir entre un USF et un MSGBOX, le problème vient bien de ton code, mais sans ....

Pourtant ça fonctionne très sur les versions antérieures d'Office jusque 2010.

Voilà le code en question (élagué des éléments non indispensables) :

Donc à l'issue de ce code, quand je tente de modifier le contenu d'une cellule de la feuille "classement", ça me modifie la feuille "diag" bien que la feuille "classement" ait été activée et soit visible. Je vois bien le contenu de la cellule se modifier quand je tape sur le clavier mais quand je tape sur entrée ou tab, rien ne s'affiche dans la feuille "classement".

[...]
choix_4 = MsgBox("blabla", vbYesNoCancel, "Etape 4")
If choix_4 = vbYes Then
Worksheets("diag").Protect Password:="", DrawingObjects:=False

Worksheets("diag").Range("F33").Value = "Oui"
Worksheets("diag").Range("F33").Select
ActiveSheet.Shapes("Connecteur droit avec flèche 15").Select
Selection.ShapeRange.Line.Transparency = 1
Range("E38:G40").ClearContents
Range("J29").Value = "XX"
Range("K33").Borders(xlEdgeLeft).LineStyle = xlContinuous
Range("C1").Select
ActiveWindow.SmallScroll Down:=15
Call etape2

Sub etape2()
Worksheets("diag").Protect Password:="", DrawingObjects:=True, contents:=True

choix_sev = MsgBox("XX", vbOKCancel, "Redirection")
If choix_sev = vbOK Then
Worksheets("classement").Activate
ActiveWindow.Zoom = 95
Worksheets("classement").Range("D60").Value = 0
Worksheets("classement").Range("Q2:Q92").ClearContents
Worksheets("classement").Range("C36").Value = Worksheets("diag").Range("E23").Value
Worksheets("classement").Range("C2").Select
MsgBox "blablabla", vbOKOnly, "Classement"
End If
End Sub

Re,

Dans ta première procédure on ne sait pas sur quelle feuille sont appliqués

Range("E38:G40").ClearContents
Range("J29").Value = "XX"
Range("K33").Borders(xlEdgeLeft).LineStyle = xlContinuous
Range("C1").Select

Perso, voilà comment je ferais, n'ayant pas tout le code je te mets un peu au pif la sub machin

Sub machin()
  choix_4 = MsgBox("blabla", vbYesNoCancel, "Etape 4")
  If choix_4 = vbYes Then
    With Worksheets("diag")
      .Protect Password:="", DrawingObjects:=False
      .Range("F33").Value = "Oui"
      .Shapes("Connecteur droit avec flèche 15").Select
      Selection.ShapeRange.Line.Transparency = 1
      .Range("E38:G40").ClearContents
      .Range("J29").Value = "XX"
      .Range("K33").Borders(xlEdgeLeft).LineStyle = xlContinuous
      .Range("C1").Select
      ActiveWindow.SmallScroll Down:=15
    End With
  End If
  Call etape2
End Sub

Sub etape2()
  Worksheets("diag").Protect Password:="", DrawingObjects:=True, contents:=True

  choix_sev = MsgBox("XX", vbOKCancel, "Redirection")
  If choix_sev = vbOK Then
    With Worksheets("classement")
      .Activate
      ActiveWindow.Zoom = 95
      .Range("D60").Value = 0
      .Range("Q2:Q92").ClearContents
      .Range("C36").Value = Worksheets("diag").Range("E23").Value
      .Range("C2").Select
    End With
    MsgBox "blablabla", vbOKOnly, "Classement"
  End If
End Sub

A+

Petite question

Toutes les feuilles appelées sont des feuilles de calcul ?

Je serai assez d'accord avec BrunoM45.

Oui toutes les feuilles sont des feuilles de calcul.

J'ai testé ton code BrunoM45, le bug est toujours là. Mais c'est vrai que la présentation est plus légère et moins gourmande.

Sinon il y a bien un lien entre un Msgbox et un Userform : le Msgbox peut être considéré comme un Userform particulier.

Voici le lien du forum en anglais dans lequel j'ai trouvé la réponse : http://www.mrexcel.com/forum/excel-questions/726376-excel-2013-worksheet-activate.html

Le problème existe donc bien.

C'est frustrant, j'ai essayé plein de trucs et je n'arrive pas à reproduire ce problème.

Le Msgbox n'est pas vraiment un userform, ceci dit il est tout à fait possible de remplacer un msgbox par un userform si l'on souhaite lui donner d'avantage d'identité visuel. Ca demande aussi un poil plus de travail, mais c'est possible.

Re,

Je remarque, comme sur le forum anglais, qu'aucun fichier n'est donné

De plus le fil date un peu, des correctifs ont peut-être été apporté depuis

Il me semble donc inadéquate de dire qu'un soucis existe

Idem, dans le doute et sans fichier, j'abandonne les tests qui n'ont pas été concluant pour ma part.

BrunoM45 a écrit :

Re,

Je remarque, comme sur le forum anglais, qu'aucun fichier n'est donné

De plus le fil date un peu, des correctifs ont peut-être été apporté depuis

Il me semble donc inadéquate de dire qu'un soucis existe

Disons que j'ai le problème. C'est peut être lié au fait que la macro a été créée sous Excel 2007. Vu que mon fichier est confidentiel, je vais tenter d'en faire une version allégée pour vous le montrer.

Rechercher des sujets similaires à "bug 2013 onglet active different actif"