Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1041 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Excel - Problème de suppression d'onglets si objets présents

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Excel - Problème de suppression d'onglets si objets présents

n°2106702
onobyone
Posté le 17-10-2011 à 13:35:55  profilanswer
 

Bonjour tout le monde :)  
(Version d'Excel : 2003 - SP3 sous Windows XP - Utilisation de Lotus Notes V6 et V8 pour l'envoi des demandes)
Dans le cadre de mon activité professionnelle, j'ai créé un formulaire de demande de services. Lorsque la demande est envoyée via une macro, une barre de progression apparaît. Maintenant, je souhaiterais supprimer les onglets non utilisés (masqués). Je sais faire cela en vba sans problème mais je rencontre une difficulté liée à la présence d'objets (boutons) sur les onglets cachés.
En effet,  pendant le traitement de l'envoi de la demande, la barre de progression apparaît bien mais disparaît avant a fin du traitement sans message d'erreur. Perplexe, je refais une tentative mais en supprimant manuellement les boutons, le problème persiste.
Le fichier contient plusieurs modules et formulaires, pensant que j'avais fais une erreur quelque part, j'ai créé un fichier test sur lequel j'ai mis 2 boutons sur une feuille que j'ai masqué puis j'y ai intégré le code de suppression des onglets masqués. J'ai importé également ma barre de progression. Le problème est identique.
Si je retire les boutons de la feuille et que je ré-ouvre le fichier après sauvegarde, le problème n'apparaît pas.
J'ai demandé de l'aide sur quelques forums spécialisés. Le seul retour que j'ai eu était un message m'informant que la personne avait passé la matinée à trouver une solution, du moins la cause de l'erreur et a "laissé" la main à qui voudrait bien se pencher sur le problème.
 
 
J'espère avoir été clair dans mon exposition :ouch:  
Je vous remercie vivement par avance pour votre aide. ;)  

mood
Publicité
Posté le 17-10-2011 à 13:35:55  profilanswer
 

n°2106703
onobyone
Posté le 17-10-2011 à 13:39:48  profilanswer
 

Je suis désolé, je me suis trompé de bouton et je n'ai pu corrigé les 2 dernières lignes.... :pt1cable:  
 
Peut-être avez vous déjà rencontré ce problème, c'est pourquoi je ne mets pas le code du fichier test maintenant. :)  
 
Je vous remercie par avance de l'aide que vous voudrez bien m'apporter.

n°2107320
SuppotDeSa​Tante
Aka dje69r
Posté le 20-10-2011 à 14:45:19  profilanswer
 

Hum, la sans bout de code et sans message d'erreur a part te donner des pistes "bateau" je vois pas...
 
- Onglet non activé ? Si Excel se positionne sur un onglet et que tu veux le supprimer, ca va pas le faire
- Protection de l'onglet ?
- Erreur dans une sortie de boucle ?
- Etc.


---------------
Soyez malin, louez entre voisins !
n°2107336
onobyone
Posté le 20-10-2011 à 15:16:59  profilanswer
 

Merci pour ta réponse.
Je n'ai pas osé mettre du code car long  :ange: Toutefois, le voici. (j'aurais bien joint le fichier mais je ne pense pas qu'on puisse le faire)
Ce code est issu de mon fichier test(qui ne reflète mon formulaire contenant plusieurs modules, usrforms etc). il est mis dans un module et lancé à partir d'un bouton.
Tous les onglets sont bien activés, seul l'onglet Feuil2 est masqué.
Pas de protection d'onglets.
Pas de message d'erreur.
Pour information, j'ai soumis le cas ailleurs, et après recherches, il s'avère que pour l'instant, il n'y a pas d'explications sur ce problème.
Merci à toi.
 

Citation :

Public Sub Envoi_DE_HAB_SansVal()
 
Application.DisplayAlerts = False
If ActiveWorkbook.Worksheets("Feuil2" ).Visible = False Then
   Sheets("Feuil2" ).Delete
   Sheets("Feuil1" ).Select
Else: GoTo fin
End If
 
fin:
Application.DisplayAlerts = True
 
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Progress.Show
Progress.Caption = "1%"
Progress.Label1A.Visible = True
Progress.Repaint
 
Progress.Caption = "5%"
Progress.Repaint
 
Progress.Caption = "10%"
Progress.Label2A.Visible = True
Application.Wait (Now + TimeValue("0:00:01" ))
Progress.Repaint
 
Progress.Caption = "15%"
Progress.Repaint
 
Progress.Caption = "20%"
Progress.Label3A.Visible = True
Progress.Repaint
 
Progress.Label4A.Visible = True
Application.Wait (Now + TimeValue("0:00:01" ))
Progress.Repaint
 
Progress.Caption = "25%"
Progress.Label5A.Visible = True
Progress.Repaint
 
Progress.Label6A.Visible = True
Application.Wait (Now + TimeValue("0:00:01" ))
Progress.Repaint
 
Progress.Caption = "30%"
Progress.Label7A.Visible = True
Progress.Repaint
 
Progress.Caption = "35%"
Progress.Label8A.Visible = True
Progress.Repaint
 
Progress.Caption = "45%"
Progress.Label9A.Visible = True
Application.Wait (Now + TimeValue("0:00:01" ))
Progress.Repaint
 
Progress.Caption = "50%"
Progress.Label10A.Visible = True
Application.Wait (Now + TimeValue("0:00:01" ))
Progress.Repaint
 
Progress.Caption = "55%"
Progress.Label11A.Visible = True
Application.Wait (Now + TimeValue("0:00:01" ))
Progress.Repaint
 
Progress.Caption = "55%"
Progress.Label12A.Visible = True
Application.Wait (Now + TimeValue("0:00:01" ))
Progress.Repaint
 
Progress.Caption = "57%"
Progress.Label13A.Visible = True
Progress.Repaint
 
Progress.Label14A.Visible = True
Application.Wait (Now + TimeValue("0:00:01" ))
Progress.Repaint
 
Progress.Caption = "60%"
Progress.Label15A.Visible = True
Progress.Repaint
 
Progress.Caption = "75%"
Progress.Label16A.Visible = True
Application.Wait (Now + TimeValue("0:00:01" ))
Progress.Repaint
 
Progress.Caption = "80%"
Progress.Label17A.Visible = True
Progress.Repaint
 
Progress.Caption = "90%"
Progress.Label18A.Visible = True
Progress.Repaint
 
Progress.Caption = "95%"
Progress.Label19A.Visible = True
Application.Wait (Now + TimeValue("0:00:01" ))
Progress.Repaint
 
Progress.Caption = "98%"
Progress.Label20A.Visible = True
Application.Wait (Now + TimeValue("0:00:01" ))
Progress.Repaint
 
Progress.Caption = "100%"
 
Progress.Encours.Visible = False
Progress.MainAttente.Visible = False
Progress.Label1.Visible = False
Progress.Label2.Visible = True
Progress.MessValOk.Visible = True
Progress.Fermer.Visible = True
Progress.MainOk.Visible = True
Exit Sub
End Sub

n°2107347
onobyone
Posté le 20-10-2011 à 15:54:12  profilanswer
 

Nouvelle information suite à réponse d'un forum collègue :
Le problème n'apparaît pas si j'utilise les boutons et cases à cocher de la barre d'outils Formulaire et non les contrôles Active X.
Toutefois, je ne sais pas s'il y a une explication ou non à cela.

n°2107348
SuppotDeSa​Tante
Aka dje69r
Posté le 20-10-2011 à 15:57:09  profilanswer
 

Si tu mets un point d'arret sur chaque ligne, il sort du code à quel moment ?
 
Quel controle ActiveX utilises tu pour la barre ?


Message édité par SuppotDeSaTante le 20-10-2011 à 15:57:53

---------------
Soyez malin, louez entre voisins !
n°2107349
onobyone
Posté le 20-10-2011 à 16:13:54  profilanswer
 

Je ne suis pas un pro en developpement mais je vais essayer de te répondre au mieux :
Ma barre de progression contient 2 boutons, plusieurs labels, 2 images.
Dans le menu Outils > Reference de vba j'ai de coché :
Visual Basic for Applications
Microsoft Excel 11.0 objet Library
OLE Automation
Microsoft Forms  2.0 objet Library.
 
Si je mets des points d'arrêts, un message d'erreur apparaît : impossible d'entre en mode Arret maintenant.
 
Information complémentaire : il semblerait que le problème soit connu chez microsoft, je n'ai pas tout lu encore (en anglais)
http://support.microsoft.com/kb/155051/en-us

n°2107358
SuppotDeSa​Tante
Aka dje69r
Posté le 20-10-2011 à 16:27:53  profilanswer
 

Ah mais ok, c'est toi qui a créé la barre de progression en fait...
 
Pourquoi ne pas en utiliser une toute prete ?
Un controle ActiveX justement de ProgressBar
 
Si tu changes la méthode de pause, ca donne quoi ?
Genre :
 

Code :
  1. Function Arret(NbSeconde)
  2. Dim PauseTime, Start, Finish, TotalTime
  3.     ' Définit la durée.
  4.     PauseTime = NbSeconde
  5.     ' Définit l'heure de début.
  6.     Start = Timer
  7.     Do While Timer < Start + PauseTime
  8.         ' Donne le contrôle à d'autres processus.
  9.         DoEvents
  10.     Loop
  11.     ' Définit l'heure de fin.
  12.     Finish = Timer
  13. End Function
  14. Public Sub Envoi_DE_HAB_SansVal()
  15. Application.DisplayAlerts = False
  16. If ActiveWorkbook.Worksheets("Feuil2" ).Visible = False Then
  17.    Sheets("Feuil2" ).Delete
  18.    Sheets("Feuil1" ).Select
  19. Else: GoTo fin
  20. End If
  21. fin:
  22. Application.DisplayAlerts = True
  23. '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  24. Progress.Show
  25. Progress.Caption = "1%"
  26. Progress.Label1A.Visible = True
  27. Progress.Repaint
  28. Progress.Caption = "5%"
  29. Progress.Repaint
  30. Progress.Caption = "10%"
  31. Progress.Label2A.Visible = True
  32. Arret(1)
  33. Progress.Repaint
  34. Progress.Caption = "15%"
  35. Progress.Repaint
  36. Progress.Caption = "20%"
  37. Progress.Label3A.Visible = True
  38. Progress.Repaint
  39. Progress.Label4A.Visible = True
  40. Arret(1)
  41. Progress.Repaint
  42. Progress.Caption = "25%"
  43. Progress.Label5A.Visible = True
  44. Progress.Repaint
  45. Progress.Label6A.Visible = True
  46. Arret(1)
  47. Progress.Repaint
  48. Progress.Caption = "30%"
  49. Progress.Label7A.Visible = True
  50. Progress.Repaint
  51. Progress.Caption = "35%"
  52. Progress.Label8A.Visible = True
  53. Progress.Repaint
  54. Progress.Caption = "45%"
  55. Progress.Label9A.Visible = True
  56. Arret(1)
  57. Progress.Repaint
  58. Progress.Caption = "50%"
  59. Progress.Label10A.Visible = True
  60. Arret(1)
  61. Progress.Repaint
  62. Progress.Caption = "55%"
  63. Progress.Label11A.Visible = True
  64. Arret(1)
  65. Progress.Repaint
  66. Progress.Caption = "55%"
  67. Progress.Label12A.Visible = True
  68. Arret(1)
  69. Progress.Repaint
  70. Progress.Caption = "57%"
  71. Progress.Label13A.Visible = True
  72. Progress.Repaint
  73. Progress.Label14A.Visible = True
  74. Arret(1)
  75. Progress.Repaint
  76. Progress.Caption = "60%"
  77. Progress.Label15A.Visible = True
  78. Progress.Repaint
  79. Progress.Caption = "75%"
  80. Progress.Label16A.Visible = True
  81. Arret(1)
  82. Progress.Repaint
  83. Progress.Caption = "80%"
  84. Progress.Label17A.Visible = True
  85. Progress.Repaint
  86. Progress.Caption = "90%"
  87. Progress.Label18A.Visible = True
  88. Progress.Repaint
  89. Progress.Caption = "95%"
  90. Progress.Label19A.Visible = True
  91. Arret(1)
  92. Progress.Repaint
  93. Progress.Caption = "98%"
  94. Progress.Label20A.Visible = True
  95. Arret(1)
  96. Progress.Repaint
  97. Progress.Caption = "100%"
  98. Progress.Encours.Visible = False
  99. Progress.MainAttente.Visible = False
  100. Progress.Label1.Visible = False
  101. Progress.Label2.Visible = True
  102. Progress.MessValOk.Visible = True
  103. Progress.Fermer.Visible = True
  104. Progress.MainOk.Visible = True
  105. Exit Sub
  106. End Sub


---------------
Soyez malin, louez entre voisins !
n°2107404
onobyone
Posté le 20-10-2011 à 18:16:33  profilanswer
 

Je crois qu'à l'époque de la création du fichier, la progressbar ne correspondait pas au besoin ou je ne savais pas l'utiliser (ca fait loin, je ne me rappelle plus trop sans compter qu'aujourd'hui, je ne sais toujours pas l'utiliser car pas cherché à le faire) et je suis partie sur celle-ci.
Il n'y a pas de temps de pause. En fait, ce n'est ni plus ni moins que des labels qui s'affichent au fur et à mesure du déroulement de la macro.

n°2107432
SuppotDeSa​Tante
Aka dje69r
Posté le 20-10-2011 à 21:12:41  profilanswer
 

Si tu as des temps de pause :
Application.Wait (Now + TimeValue("0:00:01" ))  
Ca, ca fait attendre le process pdt 1seconde. Tres certainement pour laisser le temps aux labels de s'afficher/actualiser.
 
Essaie avec ce que je t'ai donné.


---------------
Soyez malin, louez entre voisins !
mood
Publicité
Posté le 20-10-2011 à 21:12:41  profilanswer
 

n°2107433
onobyone
Posté le 20-10-2011 à 21:18:48  profilanswer
 

Oups la boulette..
Ok je vais tester
Merci.
 
Re
je viens de tester, le problème est identique.
Juste pour m'en assurer, as-tu vu plus haut qu'à priori le problème était connu chez microsoft ?
Merci


Message édité par onobyone le 20-10-2011 à 21:38:58

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Excel - Problème de suppression d'onglets si objets présents

 

Sujets relatifs
Problème d'encodage PDO/Mysql/PHPprobleme avec PHIDGETS
Problème script awk !! =/Gestion de document Word via macro VBA excel
Problème avec formulaire en PHPFormule Excel pour compter des cellules remplies
Probleme de remplissage dynamique d'un JTableProbleme Session / popup et redirection
Macro sous excelExecuter le code d'un bouton Access sous Excel
Plus de sujets relatifs à : Excel - Problème de suppression d'onglets si objets présents


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR