Supprimer UserForm
#1
Régulier XLPages

Inscription: 08/12/2008

Messages: 55

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 16-03-2010 17h46

Bonjour a tous

Si j’utilise le code « SuppriUser() » la suppression des 2 UserForm ainsi que le module5 s’effectue correctement.
Seulement j’aurais désirais commencer par  « lance() » qui aurais effectuer l’affichage de l’UserForm nommé vUser puis après avoir cliquet sur le bouton l’UserForm s’efface et demande l’affichage de « UserForm2 » qui lui aussi après un clique sur le bouton l’efface après quoi on retourne dans le module5 ou je ferme les deux UserForm ce que j’aurais pu faire a la place de les effacer bien sur. Seulement c’est la que mon problème commence car si je passe bien a « SuppriUser() » j’ai bien le module qui s’efface mes les UserForm eu reste alors que j’aurais voulu aussi qu’il disparaisse avant que l’on réenregistre le programme, bien sur amputé des 2 UserForm et du module.
Es que l’un d’entre vous peu me donner la solution ?
A l’avance je vous remercie, et bonne journée a tous


Pièce jointe:
xls SuppUser.xls   [ Taille: 25.50 Ko - Téléchargements: 619 ]
Hors Ligne
Rapport   Haut 

Re: Supprimer UserForm
#2
Semi pro XLPages

Inscription: 12/06/2008
De Ile de France Sud

Messages: 145

Système d'exploitation:
PC
Version Excel utilisée:
2003 _ 2010
Posté le : 16-03-2010 18h50
Bonsoir à tous
Bonsoir beatbles

Tu peux essayer ceci :
On Error Resume Next
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.VBComponents("vUser")
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.VBComponents("UserForm2")

 
si j'ai bien compris

Eric
Hors Ligne
Rapport   Haut 

Re: Supprimer UserForm
#3
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 463

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 16-03-2010 19h45
Bonjour beatbles,

J'ai téléchargé ton classeur SuppUser.xls.

Le code ne compile pas, en effet l'instruction :

Unload.UserForm2
 
ne correspond à aucune méthode.

La chose aurait dû s'écrire
Unload UserForm2
Aussi la fonction SuppriUser() est introuvable. Le classeur est-il complet?


Tu cherches à scier la branche sur laquelle tu (m'enfin ton code) es assis avec
   ...
    If comp.Type < 4 Then
          .VBComponents.Remove (comp)
    End If
  Next comp
 
Humm... Et si tu modifiais la méthode utilisée au lieu de chercher à effacer du code qui s'exécute?
Bref tu cherches à descendre en marche, toujours risqué même pour un pro du volant fut-il Schumacher.

Clarifier les actions à prendre en fonction des comportements désirés serait aussi indiqué.
Dit autrement : «Think first, code later»
Ou plus spécifiquement :
Citation :
And I would strongly second Joe's opinion that if you're a newbie at VBA and especially if you're a newbie at programming altogether, I'd get quite a bit more coding under my belt before I'd start messing around with programmatically deleting code from projects. Very easy to make a mell of a hess.
au http://www.mrexcel.com/forum/showthread.php?t=115438

D'où as-tu copié ces bouts de code, histoire d'y voir plus clair? *

Aussi zieuter la section Deleting All VBA Code In A Project du site de Chip Pearson.

Cordialement,

Guy
____
* Le comp.Type est une énumération
Enum vbext_ComponentType

  vbext_ct_StdModule = 1
  vbext_ct_ClassModule =2
  vbext_ct_MSForm = 3
  vbext_ct_ActiveXDesigner = 11
  vbext_ct_Document = 100

End Enum

If comp.Type < 4 Then
  cherche à permettre de ne supprimer que les modules standars, les formulaires et les modules de classe.
  La constante littérale 4 placé dans le code indique la frontière de partage des types de modules à supprimer.
  Et une telle constante ne se devine pas.

Edité par Guy le 16/03/2010 20:00:45

Hors Ligne
Rapport   Haut 

Re: Supprimer UserForm
#4
Régulier XLPages

Inscription: 08/12/2008

Messages: 55

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 17-03-2010 14h33
Bonjour a tous
Merçi Guy d'avoir jeter un oeil a ma question.
Pour le point entre unload et User.. excuse moi je l'ai oublier en le recopiant, car j'ai essayer tellement de fois.
Je serais plus dire ou j'ai trouver les lignes de code , je l'ai avait mis de cote pour qu'en le besoin s'en ferais sentir.
Mon désir est que quand le premier userForm auras fait son travaille ainsi que le second, on efface User et module et que l'on enregistre le programme telle quelle.
On retrouvera la page Excel mes plus de code VBA, peut être devrait il reste un module ne contenant que le code d'enregistrement.
J'ai pris note du site dont tu m'as mis l'adresse .
 J'espére Guy n'avoir pas étais trop brouillons?
Bonne journée
Hors Ligne
Rapport   Haut 

Re: Supprimer UserForm
#5
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 463

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 17-03-2010 16h58
Bonjour beatbles,

Brouillon certainement, embrouillé identiquement. Mais, bon, l'important est d'arriver à quelque chose.

Pour ce faire je te propose une autre avenue qui évite de tomber en sciant la branche sur laquelle tu es assis.
Le classeur original SuppUser.xls porte trois modules dont tu veux te débarrasser à savoir :
  • Module5 (module standard)
  • UserForm2 (formulaire)
  • vUser (formulaire)
Voilà les branches à émonder.

Si on porte ces modules dans un autre classeur et que ce classeur est un addin ou complément les choses sont, ce me semble, plus simples.
Évidemment il faudrait avoir des indications plus précises sur le contexte où sera utilisé ce, ces classeurs pour raffiner ou modifier la méthode.
Tout traitement de données effectuées dans le classeur SuppUser.xls est effectué dans le classeur SuppUser.xla.

Le classeur à traiter (SuppUser.xls) ne porte qu'un seul module modTraiter et qu'une seule procédure dont il n'est nul besoin de se débarrasser.
Option Explicit

Sub Traiter()

  ' Si le addin SuppUser.xla n'est pas installé la procédure réagit en silence et tout baigne
  On Error Resume Next
 
  ' Comme tout le fatras est reporté dans SuppUser.xla il n'est plus besoin de détruire les
  ' divers modules ciblés, suffit simplement d'exécuter le traitement.
  Application.Run "SuppUser.xla!modTraiter.Traiter"
 
End Sub
 
Le classeur de traitement SuppUser.xla porte tout le code pour bidouiller les données, afficher les formulaires et tutti quanti.
La fonction Traiter() du classeur de traitement a été tiré de ton code et se lit comme suit :
Option Explicit

'---------------------------------------------------------------------------------------
' Procédure             : Traiter
' Date                  : mars 2010
' Auteur                : Guy Courville
'
' Description           : Ici on pourra coder la sauvegarde du classeur visé ou toute
'                         traitement souhaité.
'
' Détail                : Cette procédure est appelé depuis un classeur avec Application.Run()
'---------------------------------------------------------------------------------------
'
Public Sub Traiter()

  vUser.Show
  Unload vUser
  Unload UserForm2

End Sub

 

Tu pourras modifier, augmenter et corriger tout ce que tu voudras dans le code sans risquer de te casser le coup en tombant.

Évidemment si tu as d'autres questions ou quelques objections sur la méthode utilisée je suis toujours au bout de la toile

Cordialement,

Guy

Pièce jointe:
zip SuppUser.zip   [ Taille: 18.95 Ko - Téléchargements: 540 ]

Hors Ligne
Rapport   Haut 

Re: Supprimer UserForm
#6
Régulier XLPages

Inscription: 08/12/2008

Messages: 55

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 18-03-2010 14h36
Bonjour a tous
Et merçi encore a Guy pour le mal qu'il se donne pour m'aider.
Je vois que ce que je demande n'est pas simple, et que vous partez vers des réponses qui ne vont pas dans ce que je cherche.
Aussi je me demander ne serait il pas plus simple , si cela est possible de suprimer complément le programme "SuppUser" , aprés l'affichage des 2 UserForms. De maniére également que l'on puisse pas non plus récupérer le programme dans la corbeille.C'est une sorte de sécurité contre les curieux que je désire installé.
Bonne journée a tous
Hors Ligne
Rapport   Haut 

Re: Supprimer UserForm
#7
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 463

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 18-03-2010 18h33
Bonjour beatbles,

As-tu testé la solution proposée?

Citation :
vous partez vers des réponses qui ne vont pas dans ce que je cherche

Tu cherches à supprimer du code pour le soustraire à la vue indiscrète de copieurs de code
Citation :
C'est une sorte de sécurité contre les curieux que je désire installé.

Pour ce faire la solution proposé présentait un classeur dépourvu de code!

Un simple mot de passe pour ce code ne suffirait-il pas?

Je sais bien, très bien même, que ce genre de protection est cassable en deux tours de cuiller à pot mais je sais tout aussi bien que la chose n'est pas à la portée du premier usager ou codeur venu. D'autant que le code en question ne refera pas la théorie des automates programmables ni le fondement de la complétude de Turring.

En plus des liens proposés hier, voici l'avis d'un autre codeur  «Thanks, but for same reson it doesn't work anyway. The cursor goes through all lines but same Forms/Modules aren't erased.» au www.xtremevbtalk.com/archive/index.php/t-141844.html .

Alors essayons quelque chose d'autre :

Dans code du classeur SuppUser.xls établir une référence à VBIDE.  Pour ce faire menu Outils/Références... formulaire Références - VBAProject fouiller pour trouver dans la liste Microsoft Visual Basic for Applications Extensibility 5.3.

Une fois cette référence ajoutée au projet VBA, porter cette modification au code de la procédure RemoveComponent()

Sub RemoveComponents()

  Dim comp As VBComponent

  With ActiveWorkbook.VBProject
 
    For Each comp In .VBComponents
   
      If comp.Type = vbext_ct_MSForm Then
     
        comp.CodeModule.DeleteLines 1, comp.CodeModule.CountOfLines
       
      End If
     
    Next comp
   
  End With
 
End Sub

On remarquera que cette fois le code exécuté dans le module5 ne supprime pas le code exécuté dans le module5 (la redite est fortement volontaire). Seulement les lignes de code des deux, ou de quelconque, formulaires sont supprimées.

À l'exécution de la procédure Lance() et suite à la réouverture du classeur le code du module5 est intact, les formulaires UserForm2 et vUser sont toujours là mais ne portent plus aucun code, aucun.

Et il n'est nullement à craindre que Citation :
De maniére également que l'on puisse pas non plus récupérer le programme dans la corbeille.
puisque le code supprimé est retourné au néant et pas du tout dans la corbeille. Soyons et restons rassurés.

Teste la chose et donne m'en des nouvelles. Il y a sans doute trente-six autres moyens de faire ce que tu cherches à faire. Nous y allons par élimination.

Cordialement,

Guy

P.S. À noter que je viens juste de passer de membre régulier à membre semi-pro alors faut pas trop m'en demander...



Edité par Guy le 18/03/2010 18:50:20

Hors Ligne
Rapport   Haut 

Re: Supprimer UserForm
#8
Régulier XLPages

Inscription: 08/12/2008

Messages: 55

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 20-03-2010 10h45

Bonjour Guy

J’ai testé la solution que tu me proposé, seulement il faudrait que je sois sur que personne ne supprime la XLA, ensuite je serais pas toujours la pour la réinstallé ; si non cela était Bon.

Pour ce qui est de la protection, j’ai regarder mes ne l’ai pas retrouvez, un internaute démontrer que le fais de changer une valeur supprimer la protection. Je ne sais pas si tu as vue cela, si je retrouve l’article je vous l’enverrais a moins que vous ne l’ayez déjà.

Pour le site en anglais je vais essaye de comprendre ce qu’il disait, car je maîtrise pas du tout l’anglais. Google me le traduira.

Par contre la dernière solution que tu me donne, elle convient très bien, ce n’était pas à un copieur de code dont j’ai à faire, mes un personne malfaisante, qui entre est modifie des valeurs ce qui dérégler la marche de petit programme fait pour nous simplifié le travail. Comme cela quand il entrera le code ne sera plus la, mes pas modifier.

Donc en grand merci pour ton aide.

Et aussi toutes mes félicitations pour ta progression a membre semi pro

beatbles

Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes