VBA, Comment utiliser correctement les feuilles avec leur CodeName
4 réponses
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..
J' n'en vois pas la raison. Qu'est-ce qui vous fait dire que le code ne s'exécute pas ?
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
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!
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
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
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!
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
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
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
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