Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA, Comment utiliser correctement les feuilles avec leur CodeName

4 réponses
Avatar
Emile63
Bonjour Í  tous,
Pour éviter que mes macros ne fonctionnement plus quand je change le nom de l'onglet, ou si l'on déplace l'onglet, j'ai tendance Í  utiliser le CodeName de la feuille.
Le problème que j'ai c'est que si une macro travaille sur une autre feuille et je souhaite réaliser une opération intermédiaire sur un autre endroit ddu classeur (une autre feuille ) mon code plante...
Par exemple:
Feuil2 est sélectionnée (Nom de l'onglet: xxxx) et en cours de travail, je souhaite faire une opération sur le feuil3 sans quitter la feuil2

If Feuil3.FilterMode = True Then Feuil3.ShowAllData

Ce code ne s'éxécuter pas ...
Je voudrais vraiment éviter de mettre le nom de l'onglet, car il changera plusieurs fois..

Merci de votre aide,
Très bonne journée.
Emile

4 réponses

Avatar
Geo
Bonjour
Ce code ne s'éxécuter pas ...

J' n'en vois pas la raison. Qu'est-ce qui vous fait dire que le code ne
s'exécute pas ?
Avatar
MichD
Le 07/05/21 Í  07:49, Emile63 a écrit :
Le Friday, May 7, 2021 Í  1:20:22 PM UTC+2, Geo a écrit :
Bonjour
Ce code ne s'éxécuter pas ...

J' n'en vois pas la raison. Qu'est-ce qui vous fait dire que le code ne
s'exécute pas ?

Bonjour Geo,
Merci pour votre intérêt.
Si dans le code je vais sur la feuille en question:
Application.Goto Feuil3.[A4] 'et ensuite
If Feuil3.FilterMode = True Then Feuil3.ShowAllData
ça fonctionne, le tableau filtré affiche toutes les données. Mais si le classeur est ouvert/travaille sur une autre feuille et dans le code je luis demande cette opération:
If Feuil3.FilterMode = True Then Feuil3.ShowAllData
Ca ne fonctionne pas, la feuille en question conserve son tri.
Je précise bien qu'il ne s'agit pas du nom de l'onglet mais son CodeName.

Bonjour,
Même si une autre feuille de calcul est active par rapport Í  la feuille
contenant le filtre, cette ligne de code devrait s'effectuer
correctement, peu importe o͹ la procédure est écrite, dans un module
standard ou un module feuille quelconque.
If Feuil3.FilterMode = True Then Feuil3.ShowAllData
Si elle ne s'exécute pas selon tes désirs, il doit y avoir quelque chose
qu'il l'empêche de s'exécuter normalement. Sans rien voir, c'est
difficile de deviner!
MichD
Avatar
MichD
Le 07/05/21 Í  12:18, Geo a écrit :
Si vous avez une solution qui marche, c'est déjÍ  un bon point.
Deux remarques sur votre code :
Vous utilisez
On Error Resume Next

En phase de mise au point, cette commande masque les erreurs d'exécution.
Ce qui fait que si une erreur se produit vous ne le savez pas.
C'est quand même gênant.
A votre place je mettrais cette ligne en commentaire.
Si votre code se plante, vous saurez o͹ et surtout pourquoi.
deuxième toute petite remarque : le
    Select Case CheckBox1.Value

Est peu lourd pour tester la valeur du CheckBox
une simple If then else serait suffisant.
C'est juste un commentaire sur la forme.

Bonjour,
J'ajouterais Í  l'excellent commentaire de Geo, exécute la procédure en
mode pas Í  pas, c'est-Í -dire en utilisant la touche F8. La procédure
exécute une ligne de code Í  la fois. Il se peut que le problème soit
dans l'appel de la seconde procédure "Call FindLine" ou "Call
Subjects_Cbo_Change"!
On utilise l'expression "On error resume next" seulement lorsque l'on
sait quelle est l'erreur que l'on veut ignorer. Ce n'est pas une panacée!
MichD
Avatar
Emile63
Le Friday, May 7, 2021 Í  7:30:57 PM UTC+2, MichD a écrit :
Le 07/05/21 Í  12:18, Geo a écrit :
Si vous avez une solution qui marche, c'est déjÍ  un bon point.
Deux remarques sur votre code :
Vous utilisez
On Error Resume Next

En phase de mise au point, cette commande masque les erreurs d'exécution.
Ce qui fait que si une erreur se produit vous ne le savez pas.
C'est quand même gênant.
A votre place je mettrais cette ligne en commentaire.
Si votre code se plante, vous saurez o͹ et surtout pourquoi.
deuxième toute petite remarque : le
Select Case CheckBox1.Value

Est peu lourd pour tester la valeur du CheckBox
une simple If then else serait suffisant.
C'est juste un commentaire sur la forme.
Bonjour,
J'ajouterais Í  l'excellent commentaire de Geo, exécute la procédure en
mode pas Í  pas, c'est-Í -dire en utilisant la touche F8. La procédure
exécute une ligne de code Í  la fois. Il se peut que le problème soit
dans l'appel de la seconde procédure "Call FindLine" ou "Call
Subjects_Cbo_Change"!
On utilise l'expression "On error resume next" seulement lorsque l'on
sait quelle est l'erreur que l'on veut ignorer. Ce n'est pas une panacée!
MichD

Bonjour Geo et MichD,
Merci pour vos pertinentes remarques et conseils.
J'ai supprimé le "On error..." et verrai o͹ ça me mène. :)
Je vais également essayer de simplifier le contrÍ´le de la checkBox.
Je reviendrai a la charge en cas de problèmes.
Bonne journée Í  vous.
Emile