Bug graphique du classeur suite à la modification d'une feuille

Résolu/Fermé
RaphCes - Modifié par RaphCes le 23/09/2016 à 11:07
RaphCes Messages postés 5 Date d'inscription vendredi 23 septembre 2016 Statut Membre Dernière intervention 23 septembre 2016 - 23 sept. 2016 à 16:39
Bonjour Mesdames, Messieurs,

N'ayant pas trouvé de problématiques semblables déjà abordée, je vous expose ici un problème soumis par un collègue, que je rencontre depuis mon poste également, dont je cherche la cause source...

L'opération est simple et se déroule sous Excel 2016 :
1. Une feuille "A", remplie, est dupliquée dans son propre classeur, manuellement (clic-droit, copie etc...). 2. La copie est sélectionnée, puis renommée "B".
3. Sans que les onglets soient tous les deux sélectionnés (j'insiste sur ce point car je pensais au début à une erreur de manipulation de mes collègues occasionnant la même opération sur toutes les feuilles du classeur sélectionnée par inadvertance...) , admettons que je supprime une des lignes dans la feuille "B".
4. La feuille "A" est ensuite sélectionnée. L'onglet est en surbrillance mais le contenu de la feuille est exactement le même que celle de la feuille "B" (la ligne supprimée dans la feuille "B" n'est pas visible dans la feuille "A", donc).

Là ou ça devient très drôle :
Dans la feuille "A", les cellules sont tout à fait sélectionnables, et la ligne supprimée au point 3 "répercutée" sur la feuille "A" contient en réalité la bonne information (celle qu'elle est sensée avoir puisque je n'ai rien supprimé dans la feuille "A"), mais en arrière plan. Je peux donc lire les informations dans la feuille "A" (qui n'apparaissent toutefois pas dans la table), en parcourant la ligne prétendument supprimée cellule par cellule et en lisant l'information (réellement) contenue dans l'interface de saisie...

J'ai codé en VBA un ScreenUpdating forcé à chaque changement de feuille, puis carrément en macro exécutée manuellement, mais rien n'y fait. Le fichier est en réseau, mais lorsqu'il est enregistré (bug inclus), fermé puis ré-ouvert, les feuille "A" et "B" sont revenues à la normale (la ligne supprimée en "B" l'est, mais la ligne existe toujours dans la "A", comme voulu...
Pas d'erreurs à l'ouverture, les lignes "cachées" n'en renvoient pas non-plus... Pas de macro...

Je vous remercie bien chaleureusement par avance pour vos hypothèses sur le problème, je suis à la limite de mes compétences actuelles pour tenter de résoudre ce mystère.

A voir également:

1 réponse

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
23 sept. 2016 à 12:08
Bonjour,

C'est un problème que j'ai eu du mal à résoudre. Il vient du ScreenUpdating=false avec nouvelle interface SDI apparue avec Excel 2013 : L'onglet affiché n'est pas l'onglet actif !!!

Donc tu crois agir sur un onglet et en réalité tu agis sur un autre !

la solution ici : https://forums.commentcamarche.net/forum/affich-33931181-bug-affichage-suite-a-l-execution-du-code#3
1
RaphCes Messages postés 5 Date d'inscription vendredi 23 septembre 2016 Statut Membre Dernière intervention 23 septembre 2016
23 sept. 2016 à 14:26
Bonjour Patrice et merci de t'être penché sur mon cas.
Malheureusement, la solution ne fonctionne pas chez moi...

Après réflexion, le fichier étant un *.xlsx, à l'ouverture il n'y a aucune macro susceptible de paramétrer le ScreenUpdating en "False". Le problème d'affichage ne survient que lorsqu'une opération est effectuée sur la feuille copiée, et aucune Macro ne se déclenche à un changement (rien dans les Worksheets)...

Est-il possible qu'une macro soit à ce point cachée ? Ou est-ce bel et bien un casse-tête ?
0
RaphCes Messages postés 5 Date d'inscription vendredi 23 septembre 2016 Statut Membre Dernière intervention 23 septembre 2016
Modifié par RaphCes le 23/09/2016 à 14:42
A tout hasard, pour information, j'ai essayé le "DoEvents" feuille par feuille (au lien de window par window, vu qu'un seul fichier est ouvert), j'ai même inséré la désactivation du ScreenUpdating avec réactivation générale, puis feuille par feuille, ça n'a eu aucune incidence...
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
23 sept. 2016 à 14:59
Re,

Désolé, j'avais cru qu'il s'agissait d'un fichier avec macro.

Ton problème est très similaire à celui que j'ai eu (et soumis à Microsoft).
Il y a bel et bien un bug d'affichage avec la nouvelle interface SDI :
ce n'est pas l'onglet actif (celui sur lequel les actions sont effectuées) qui est affiché !

Je l'ai constaté avec du VBA lors de la création de classeurs ou de feuilles, mais il ne se produit pas sur toutes les machines : à ce jour je n'ai eu connaissance que de quelques cas.
Par contre, il n'est pas exclu qu'il puisse se produire sur une action manuelle.

A défaut de solution fournie par Microsoft, le DoEvents permet de résoudre le pb avec du VBA. Manuellement, le fait de changer d'onglet permet de retrouver l'affichage de l'onglet activé d'où le retour à la normale.

Tu peux tester si ton PC est sujet au Pb avec ce simple code :
Sub Test()
    Application.ScreenUpdating = False
    Set w1 = Workbooks.Add(xlWBATWorksheet)
    Set w2 = Workbooks.Add(xlWBATWorksheet)
    Set w3 = Workbooks.Add(xlWBATWorksheet)
    Application.ScreenUpdating = True
    w2.Activate
End Sub
en vérifiant si w2 est affiché à l'issue de la macro.

Quand à cacher une macro : elle pourrait être dans une macro complémentaire mais ce n'est surement pas le cas.

Cdlt
Patrice
0
RaphCes Messages postés 5 Date d'inscription vendredi 23 septembre 2016 Statut Membre Dernière intervention 23 septembre 2016 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
23 sept. 2016 à 15:13
Re,

Alors, après exécution du code, Excel crée 3 nouveau classeur vides (rien d'anormal jusqu'ici), lorsque l'écran se met à jour, en revanche, le classeur qui s'active est le premier créé, w1 donc, et pas w2...

J'ai vérifié, aucune macro complémentaire dans le fichier n'est activée... Ce qui est étrange c'est que la solution fonctionne très bien pour afficher la bonne feuille (w2) mais, même modifiée, n'a aucune incidence sur les feuilles à l'intérieur d'un classeur, à moins que je m'y prenne mal (mais le code s’exécute sans accroche) :

Sub ForEachSheetsDoEvents()

Dim ws As Worksheet
For Each ws In Worksheets
DoEvents
Next ws

End Sub
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775 > RaphCes Messages postés 5 Date d'inscription vendredi 23 septembre 2016 Statut Membre Dernière intervention 23 septembre 2016
23 sept. 2016 à 15:41
S'il n'est confidentiel, peux-tu mettre ton classeur sur https://www.cjoint.com/
Et décrire précisément la manipulation qui provoque le bug.
Je vais essayer de le reproduire (et peut-être de trouver une solution).
0