Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Nom d'une userform créée automatiquement

cobol80

XLDnaute Nouveau
Bonjour,

J'ai récupéré un bout de code (voir ci-dessous) sur le forum pour nommer une userform créée automatiquement par un module.

Set ObjUSF = ThisWorkbook.VBProject.VBComponents.Add(3)
With ObjUSF
.Properties("Caption") = "Etage pour le zoning"
.Properties("Width") = 660
.Properties("Height") = 195
.Properties("Name") = "Etage6"
End With

La première fois cela fonctionnement correctement la userform porte bien ce nom. Par contre la seconde fois cela me donne une erreur :

Erreur d'execution 75
Erreur d'accès Chemin/fichier

Même si je supprime manuellement la userform avant de relancer, même si je supprime la userform automatiquement avec la commande REMOVE :

ThisWorkbook.VBProject.VBComponents.remove... qui fonctionne correctement

Merci de vos réponses.
Cordialement
PM
 

jeanpierre

Nous a quitté
Repose en paix
Re : Nom d'une userform créée automatiquement

Bonjour cobol80,

En première lecture, je pense que, suite à ta création et à ta suppression, VBA a modifié le nom de ton USF et là, effectivement Erreur. A voir donc, mais sans ton fichier.....

A te lire.

Jean-Pierre
 

cobol80

XLDnaute Nouveau
Re : Nom d'une userform créée automatiquement

Bonjour,
merci pour cette lecture et réponse rapide.
Je joins le fichier exemple récupéré qui ne fonctionne pas non plus.
Cordialement
 

Pièces jointes

  • Creation userform et label automatique.xls
    41.5 KB · Affichages: 59

PMO2

XLDnaute Accro
Re : Nom d'une userform créée automatiquement

Bonjour,

Voici le code corrigé (merci de tenir compte des remarques signalées par '/// ou par '---)
Code:
'/// Remarque PMO : c'est ici qu'il faut adapter le nom du UserForm ///
Const USFName As String = "Etage6_"   'adaptez "Etage6_" au nom souhaité
'//////////////////////////////////////////////////////////////////////

Const Sign As String = "@+Thierry 's Truc sur www.Excel-Downloads.com, Aug 2005"

Const TxbWidth As Integer = 65
Const TxbHeigth As Integer = 15
Const TxbLeft As Integer = 90
Const TxbTop As Integer = 15

Const LblWidth As Integer = 70
Const LblHeigth As Integer = 15
Const LblLeft As Integer = 10
Const LblTop As Integer = 15

Sub MyUserFormAutoBuilder()
Dim ObjUSF As Object
Dim ObjTextBox As Object, ObjLabel As Object, CmdB As Object, LstB As Object
Dim TopPlusHeight As Integer
Dim x As Byte
Dim VLblLeft As Integer
Dim VTxbLeft As Integer

'--- Ajouts ou modifications PMO ---
Dim suffixe&
Randomize Timer
suffixe& = Int((2 ^ 24 * Rnd) + 1)
For Each ObjUSF In ThisWorkbook.VBProject.VBComponents
  If Left(ObjUSF.Name, Len(USFName)) = USFName Then
    ThisWorkbook.VBProject.VBComponents.Remove VBComponent:=ObjUSF
    Exit For
  End If
Next ObjUSF
'---------------------------------

  Set ObjUSF = ThisWorkbook.VBProject.VBComponents.Add(3)
  With ObjUSF
    .Properties("Caption") = Sign
    .Properties("Width") = 660
    .Properties("Height") = 195
    .Properties("ShowModal") = True
    
        '--- Modification PMO - laissez en place la constante USFName, ne la modifiez qu'au ---
        '--- niveau de sa déclaration (voir, au début du code, Const USFName As String )    ---
    .Properties("Name") = USFName & suffixe& 'Si on veut forcer un Nom de UserForm...
        '--------------------------------------------------------------------------------------
        
  End With

    For x = 1 To 40

      Set ObjTextBox = ObjUSF.Designer.Controls.Add("Forms.TextBox.1")
      Set ObjLabel = ObjUSF.Designer.Controls.Add("Forms.Label.1")

          Select Case x
            Case 1 To 10
              If x = 1 Then TopPlusHeight = LblTop
              VLblLeft = LblLeft
              VTxbLeft = TxbLeft
            Case 11 To 20
              If x = 11 Then TopPlusHeight = LblTop
              VLblLeft = LblLeft + 160
              VTxbLeft = TxbLeft + 160
            Case 21 To 30
              If x = 21 Then TopPlusHeight = LblTop
              VLblLeft = LblLeft + 320
              VTxbLeft = TxbLeft + 320
            Case 31 To 40
              If x = 31 Then TopPlusHeight = LblTop
              VLblLeft = LblLeft + 480
              VTxbLeft = TxbLeft + 480
          End Select


          With ObjLabel
            .Caption = "Label TextBox " & x
            .Left = VLblLeft: .Top = TopPlusHeight: .Width = LblWidth: .Height = LblHeigth
            .Tag = "Thierry's Demo"
            .Name = "LblDemo" & x
          End With
          With ObjTextBox
            .Left = VTxbLeft: .Top = TopPlusHeight: .Width = TxbWidth: .Height = TxbHeigth
            .Tag = "Thierry's Demo"
            .Name = "TxbDemo" & x
            .TextAlign = 3
          End With

        TopPlusHeight = TopPlusHeight + 15
    Next

MyLabelClicks ObjUSF.Name

VBA.UserForms.Add(ObjUSF.Name).Show

Set ObjUSF = Nothing
Set ObjTextBox = Nothing
Set ObjLabel = Nothing

End Sub

Cordialement.

PMO
Patrick Morange
 

cobol80

XLDnaute Nouveau
[Résolu] Re : Nom d'une userform créée automatiquement

Bonjour,

Merci cela fonctionne correctement.
Si je comprends bien on ne peut pas avoir le même nom à chaque nouvelle création style ETAGE6, on est obligé de l'associer avec un parametre comme l'heure, le jour...même si on reussi à supprimer l'ancienne.

Encore merci.
 

PMO2

XLDnaute Accro
Re : Nom d'une userform créée automatiquement

Bonjour,

Si je comprends bien on ne peut pas avoir le même nom à chaque nouvelle création style ETAGE6, on est obligé de l'associer avec un paramètre comme l'heure, le jour...même si on reussi à supprimer l'ancienne.

Pour parler franc, je ne suis pas aussi péremptoire. Je n'ai pas connaissance de ce qui se passe en coulisse mais j'ai trouvé la solution à ce problème par un moyen détourné qui a le mérite de faire.

De nombreux programmeurs se sont plaint du grossissement, sans raison apparente, de leur classeur alors qu'ils avaient seulement modifié un petit bout de code. Cela amène à penser qu'Excel, au sein du VBE, laisse subsister des objets invisibles comme dans le cas qui nous préoccupe.

Il y a de forts risques que la méthode que je propose laisse des fantômes qui grossiraient le classeur. Je n'ai pas trouvé mieux. A surveiller donc.

Cordialement.

PMO
Patrick Morange
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…