XL 2013 Formulaire/Userform qui disparait après suppression feuille

benord

XLDnaute Nouveau
Bonjour ExcelDownloadéen.nes

J'ai un petit soucis que je n'arrive pas à régler sur Excel et j'espère trouver ici une solution au mieux et des conseils au pire pour améliorer ma macro.
Voici le problème :
J'ai un formulaire avec lequel je commande la suppression d'une feuille.
Lorsque la feuille sélectionnée est supprimée, le formulaire disparait alors
Je me doc vois obligé de partir de la feuille et d'y retourner pour le voir réapparaitre (j'ai un code pour cela, voir plus bas).

Et comme cela ne vous parlera pas plus que cela sans le code que j'ai rédigé, voici ce dernier:
VB:
Private Sub Retrait_Liste_Click()
    Dim feuil_select$
    Dim list_pt%

    'Si aucun élément sélectionné
    If IsNull(Liste_Feuilles.Value) Then
        MsgBox ("Veuillez sélectionner un élément de la liste que vous souhaitez supprimer.")
        Exit Sub '***QUITTER***
    End If

    'Initialisation des variables
    feuil_select = Liste_Feuilles.Value
    list_pt = 0

'Repérer la position de la valeur sélectionnée dans la liste
    While feuil_select <> Liste_Feuilles.Column(0, list_pt)
        list_pt = list_pt + 1
    Wend

'Cacher la mise à jour des alertes/de l'affichage le temps de la fonction
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With

 'Retirer l'élément de la liste à la position correspondante
    Liste_Feuilles.RemoveItem list_pt

'Retirer la feuille dont le nom est sélectionné
    Worksheets(feuil_select).Delete

'Retirer le nom de la feuille dans la liste d'enregistrement   
    list_pt = list_pt + 2
    Cells(list_pt, 15).Select
    Selection.Delete Shift:=xlUp

    'Réactiver la mise à jour des alertes/affichage
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
    End With
End Sub

La feuille elle-même contient le code ci-dessous. Je remplis la liste des feuille à partir d'une liste que je crée au fur et à mesure que mes feuilles sont créées. Cela me permet de conserver cette liste, même après fermeture de mon classeur Excel.

Code:
Private Sub Worksheet_Activate()

    Dim pointeur%

    Dim val_list$

   
'Réinitialiser le formulaire Gestionnaire

    Gestionnaire.Liste_Feuilles.Clear

    Gestionnaire.Show False

   

    pointeur = 2

'Remplir la Liste_Feuilles avec les éléments de la liste enregistrée
   
    While Cells(pointeur, 15).Value <> ""

        val_list = Cells(pointeur, 15)

        Gestionnaire.Liste_Feuilles.AddItem val_list

        pointeur = pointeur + 1

    Wend

End Sub


Gestionnaire : Nom de mon formulaire

Liste_Feuilles : ListBox qui contient la liste des feuilles enregistrées à la colonne 'O' de la feuille.

Gestionnaire s'affiche et Liste_Feuilles se met donc à jour à chaque fois que je rentre sur la feuille. Dans les autres feuilles, je code pour faire disparaitre Gestionnaire (Gestionnaire.Hide).

J'ajoute deux captures d'écran avant et après le déroulement du code :
AVANT:
avant_clic_Retirer_Liste.png


APRES:
apres_clic_Retirer_Liste.png


Pour information, j'ai déjà essayé de sélectionner une autre page et de revenir pour dérouler à nouveau le code de sélection de la page ou juste d'ajouter Gestionnaire.Show False à la toute fin du code. De même j'ai déjà essayé en supprimant mes commandes de suppression de mise à jour d'affichage/désactivation des messages d'alerte.
Mais rien à faire: pas moyen de faire réapparaitre Gestionnaire autrement qu'en partant manuellement de la page et d'y retourner. :(

Auriez-vous une idée de la raison de mon tourment?

Merci par avance!
 

jmfmarques

XLDnaute Accro
Bonjour,
J'appelle humblement l'attention sur un fait "insignifiant" : lorsque l'on supprime éventuellement la feuille active, le focus passe nécessairement à une autre feuille automatiquement et l'évènement activate de cette autre feuiile est alors déclenché et .... ?? et ---(lisons)..... :
Ha oui! Et pour autre information, les feuilles supprimées contiennent toute le code suivant:


VB:


Private Sub Worksheet_Activate()
Gestionnaire.Hide
End Sub

solution ? -->> utilisation à bon escient au bon endroit et au bon moment de la propriété enableevents de l'objet application.
 
Dernière édition:

benord

XLDnaute Nouveau
Bonsoir sylvanu et jmfmarques.

Merci pour vos réponses.

sylvanu
Vous pourriez fournir un petit fichier exemple ? ce serait infiniment plus simple investiguer.
En utilisant le bouton "Copier dans le presse papier" en haut à droite des codes envoyés pour récupérer les sources, vous pouvez reproduire le projet Excel. Je l'ai fait moi-même de mon côté en 5 minutes chrono dans un nouveau document que je fournis ici (test.xlsm).

jmfmarques,
solution ? -->> utilisation à bon escient au bon endroit et au bon moment de la propriété enableevents de l'objet application.
Vous pensez bien que si j'ai pris la peine de préciser en post supplémentaire le code contenu dans chaque page que je supprime, c'est je m'étais déjà fait cette réflexion... Apparemment ce n'était pas si évident...
D'ailleurs, quand on prend la peine de ne pas lire en diagonal mon premier post, j'ai bien indiqué que j'ai essayé de mettre à la fin de ma macro à nouveau "Gestionnaire.Show False" (justement par crainte que "Gestionnaire.Hide" soit activé pendant la suppression de la feuille)... Sans résultat aucun :(
De même, j'ai testé votre idée du enableevents (je ne connaissais pas cette fonction, je ne me suis jamais targué d'être un professionnel) et cela ne change absolument rien. Bien que je vous remercie de m'avoir instruit de cette fonction, je trouve dommage que vous n’ayez même pas pris la peine de tester ce que vous me conseillez (de manière un peu condescendante, j'avoue avoir été un peu piqué au vif)...

A côté de cela, j'avoue ne pas avoir tout dit concernant la feuille que je supprimais car je pensais que cela n'avait rien à voir et peut-être cela aurait pu éveiller votre attention (my bad).
En effet, il y a un "bouton de commande" en contrôle ActiveX présent sur cette feuille et, après investigations supplémentaires, j'ai pu découvrir quelque chose d'intéressant.

Ainsi, en faisant plusieurs tests, j'ai pu cibler le problème et m'apercevoir que c'est la présence de ce bouton qui conditionnait la disparition du formulaire lors de la suppression de la feuille.

En effet, lorsqu'un bouton ActiveX est présent dans la feuille supprimée, le formulaire qui la supprime disparait. J'ai fait le test avec un ou deux autres objet activeX avec pour résultat la disparition du formulaire à chaque fois.

J'avoue que, ne connaissant pas vraiment les détails techniques exacts concernant les objets en ActiveX, j'ignore encore quel peut être la raison de ce phénomène.
Je vais regarder dans mon coin, mais si une personne ayant suffisamment de connaissances dans le domaine pouvait éclairer ma lanterne, cela ne serait pas de refus :)

En tous les cas, vous trouverez, dans le fichier fourni, que l'une des feuilles contient un bouton de commande en controle activeX (ainsi que le code proposé par jmfmarques ajouté) , pour vous en faire une idée par vous même.

En attendant, je vais tenter de résoudre le problème dans mon petit coin (je ne parle pas des toilettes ;))

Merci en tout cas aux personnes m'ayant répondu :)
 

Pièces jointes

  • test.xlsm
    28 KB · Affichages: 17

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour le fil,
Benord, pour ce qui est de Ctrl C et Ctrl V je maîtrise, ça fait partie de mon maigre bagage.
Ceci dit il existe de nombreuses configurations où le VBA n'est pas directement responsable du problème. Je citerais les options du fichier, les autres macros, les variables publiques, version XL ...
C'est pour cela que je vous ai demandé un fichier.
Fichier bien utile d’ailleurs car il me semble que je ne reproduit pas le défaut. Pouvez vous confirmer au vu du gif ci dessous que c'est bien cette configuration qui vous pose problème :
20200309_095909(1).gif
 

benord

XLDnaute Nouveau
sylvanu,

Fichtre! Je confirme votre évaluation... Effectivement de mon côté, la suppression de la feuille "plap" fait disparaitre mon formulaire :(

Je m'étais figuré que ça ne venait peut-être que de ma configuration mais comme je n'ai personne de mon entourage avec qui faire le test, je me sentais fort dépourvu...

Je vais regarder dans mes configurations les options concernant les objets ActiveX, en espérant trouver une solutions.

Si jamais de votre côté vous avez une idée salvatrice, je vous gratifierai de ma reconnaissance éternelle (oui un peu de lyrisme ne fait jamais de mal ;))
Autrement, si jamais de mon côté je trouve une solution par moi-même, je ne manquerai pas de venir la partager sur ce forum!

Je vous remercie d'ores et déjà, car j'avoue que je ne trouvais pas grand chose. C'est donc un très bon coup de pouce :)
 

Discussions similaires

Statistiques des forums

Discussions
312 167
Messages
2 085 901
Membres
103 026
dernier inscrit
NAT dan