IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur lors du changement de nom d'un UserForm


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Par défaut Erreur lors du changement de nom d'un UserForm
    Bonjour à tous,

    Comme indiqué dans le titre, je reçois une erreur (de type 75) lorsque je change le nom de mon UserForm.

    Pour être précis, je crée mon UserForm dans mon code et je souhaite lui attribuer un nom particulier. Seulement, si cela marche la première fois, il s'avère que l'erreur apparaît les fois suivantes... Apparemment, je ne peux pas attribuer un nom à mon UserForm si ce nom a déjà été attribué auparavant.

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim Fiche1 As Object
    Set Fiche1 = Application.VBE.ActiveVBProject.VBComponents.Add(vbext_ct_MSForm)
    With Fiche1
    .Name = "Sélection_module"
    End With
    Je tiens à préciser qu'avant de relancer cette partie de mon code, je supprime l'UserForm précédent mais cela ne suffit pas pour permettre au nouvel UserForm de prendre le nom que je veux lui attribuer...

    Si quelqu'un peut me donner une piste à suivre pour contourner ce problème...

    Merci d'avance pour votre aide.

    Niko

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heuh!!!
    bonjour


    comment supprime tu le userform precedeant?

    tu pourrais commencer par
    set fiche1 =nothing
    car dans ton code si tu met set quelquechose tu ne peu pas le refaire une deuxieme fois car meme si tu suprime le usf l object fiche1 existe toujours


    au plaisiir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Par défaut
    Je supprime l'UserForm en faisant bouton droit, puis supprimer.

    Pour ce qui est de rajouter le Set Fiche1 = Nothing, il faudrait que je le mette où dans mon code? Car j'ai essayé à divers endroits, et ça ne change rien...

    Merci pour ta réponse en tout cas.

    Niko

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Bonjour

    ce n'est pas le plus propre mais essaye en mettant cette ligne juste avant la création de ton userForm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Fiche1 Is Nothing Then Set Fiche1 = Nothing

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Par défaut
    Bonsoir,

    J'ai bien rajouté la ligne que vous m'avez proposé juste avant la création de mon UserForm.

    Il s'avère que si aucun UserForm n'a été créé avant avec le même nom que je souhaite donner au nouveau, ça marche, mais dès que je supprime l'UserForm (en faisant clic droit, et supprimer UserForm) et que je tente de relancer cette portion du code, il me met une erreur 75 (Erreur d'accès Chemin/Fichier).
    Si je lance ce code, sans supprimer l'UserForm possédant le même nom, il me donne une erreur 50135 (Erreur définie par l'application ou par l'objet).

    J'ai l'impression que le problème est dû au fait que j'essaie de créer un UserForm en lui donnant un nom que possède ou a possédé déjà un autre UserForm, et ce, que je supprime ou non l'UserForm en question...

    Je vous avouerai que je ne vois pas trop comment contourner tout ça...

    Pour rappel, mon code est devenu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim Fiche1 As Object
    If Not Fiche1 Is Nothing Then Set Fiche1 = Nothing
    Set Fiche1 = Application.VBE.ActiveVBProject.VBComponents.Add(vbext_ct_MSForm)
    With Fiche1
    .Name = "Sélection_module"
    End With
    Merci à tous ceux qui pourront m'aider.

    Niko

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    i faut bien entendu que tu mete tout ca hors de ton usf
    parceque quand tu le suprime les macros partent avec bien entendu

    dans un module normal c'est mieux


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Par défaut
    C'est ce que j'ai fait, mon code est dans une macro hors de mon UserForm, mais rien n'a changé...

    Je me demandais si il existait une commande permettant de supprimer toutes les UserForm d'un projet VBA? Cela pourrait peut-être résoudre mon problème en retirant tous les "résidus" de mes UserForm qu'il pourrait y avoir en mémoire...

    Merci pour vos conseils en tout cas.

    Niko

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    tu trouvera ca dans la faq comment suprimer un module 1 ou 2 ou 3

    les chiffres designant le type si je me souviens bien le "2" represente les userforms mais je n'en suis pas sur tu devrais faire cette recherche



    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Membre Expert
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Par défaut
    Bonjour
    la solution se trouve dans la FAQ
    http://excel.developpez.com/faq/inde...m#UsfDynamique

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Par défaut
    Bonjour.

    Bon, alors j'ai rajouté dans mon code la commande permettant de supprimer tous les UserForm d'un projet et il s'avère que mon problème n'est pas réglé pour autant.

    Dès qu'un UserForm avec un nom, disons Y, a été créé, il est impossible (apparemment) de créer un autre UserForm avec ce nom Y, que l'UserForm précédent soit supprimé ou non.

    Si dans le dernier cas, ça paraît évident (on ne peut pas avoir deux UserForm existants du même nom), le premier cas me laisse assez perplexe... C'est comme si il gardait les noms donnés à un UserForm, ou pire les UserForm déjà créés, en mémoire...

    Je n'ai trouvé aucune solution à ce problème nulle part (aide de l'éditeur ou en ligne).

    En attendant, je vais me contenter de garder les noms UserFormX en essayant de ne pas me mélanger les pinceaux, tout en continuant à contourner ce problème.

    Je vous tiens au courant si je trouve quelque chose.

    Niko

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour

    et bien sur que le nom n'est plus utilisable

    il faut que tu instancie le userform par un variable objet

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        set mon newusf= machin trus .add blablabla
    et a la fin de la creation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set newusf=nothing
    en gros tu donne une existance et un nom a ton nouveau usf

    et tu declare a la fin que la variable newusf est = a rien

    bien sur tout en haut du module avant toute les macros
    tu declare la variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dim newusf as object
    voila
    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Par défaut
    Bonjour,

    C'est effectivement ce que j'ai déjà fait mais ça ne change en rien mon problème: un nom déjà utilisé par un UserForm (supprimé ou non) ne peut pas être réutilisé lorsqu'on recrée un UserForm. Et ce, même si j'ai mis la variable MonUserForm à Nothing.

    Merci en tout cas pour ton message.

    Niko

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour

    ok
    dans ce cas la il y a une autre solution

    toujours avec une variable objet

    dans le module de tes macros

    tout en haut avant les macros

    tu met

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public maform as object

    et dans ton module quand tu a le nom de ton userform qui apparrait

    tu remplace le me ou le nom de l'usf par la variable

    bien entendu tu rajoute dans le usf activate tu met

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set maform =me' dailleur cette ligne il faudra que tu  rajoute la fonction activate par macro
    en gros

    tu créé ton usf
    tu rajoute la fonction activate par macro
    et quand le usf s'active il prend le nom provisoire maform

    a partir de ce momment il n'est plus necessaire que le usf nouvellement créé porte le meme nom a chaque fois

    ca devrai te simplifier la tache


    voila au plaisir

    si tu ne comprend pas envoie un exemple de ton fichier j'essaierai de voir si je peut faire quelque chose
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Par défaut
    Re-bonjour

    J'ai trouvé une solution à mon problème sur un autre site. Voilà le code correspondant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Set form = Application.Workbooks(nombook).VBProject.VBComponents.Add(3)
    On Error Resume Next
    Application.Workbooks(nombook).VBProject.VBComponents.Remove _
    Application.Workbooks(nombook).VBProject.VBComponents("NomForm")
    Application.Workbooks(nombook).Save
    On Error GoTo 0
    form.Name = "NomForm"
    Set form = Nothing
    Apparemment, il suffit de sauvegarder le classeur pour qu'il efface de sa mémoire les noms des UserForms créés précédemment et qui ont été supprimés, laissant la "place vacante" pour les nouveaux UserForms. C'est pas forcément ce qui se fait de mieux ou de plus propre, mais ça a l'avantage de me donner une solution qui convient à ce que je fais dans le reste de mon code.

    Merci à tous ceux qui m'ont aidé et @ la prochaine!

    Niko

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    oui effectivement

    c'est une solution de sauvegarder le classeur pour reinitialiser le contenu

    a condition que tu n'ai pas de modification provisoires

    exemple
    a suposer que tu remplisse des celules et a la fermeture ces cellules doivent rester vierges la tu va avoir un probleme


    a reflechir

    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  16. #16
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    rebonjour
    voyant que tu n'a pas compris

    un bout de code sera plus explicite

    place deux bouton dans ta feuille

    dans le module de la feuil 1 met ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub CommandButton1_Click()
    ajout_usf
    End Sub
     
    Private Sub CommandButton2_Click()
    supprimer_le_usf
    End Sub


    met ca dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Public ok As Boolean
    Public i As Long
    Public Fiche1 As Object
    Public nomglobal As String
    Sub ajout_usf()
    If ok = False Then
     
    MsgBox "vous n'avez pas supprimer l'ancien": Exit Sub
    ElseIf ok = True Then
    i = i + 1
    Set Fiche1 = Application.VBE.ActiveVBProject.VBComponents.Add(3)
    With Fiche1
    .Name = "Sélection_module" & i
    nomglobal = "Sélection_module" & i
    End With
    End If
    ok = False
    End Sub
     
     
    Sub supprimer_le_usf()
    ThisWorkbook.VBProject.VBComponents.Remove _
        ThisWorkbook.VBProject.VBComponents(nomglobal)
     ok = True
     End Sub

    en gros des variables sont declarée en haut du module standard en public
    elle seront donc utilisable dans tout le projet et tou modules
    la premiere "ok en boolean que je metrais a true ou false selon mon souhait
    la variable "i" qui va me servir a incrementer de 1 a chaque creation le nom du usf

    la variable "fiche1 en object ca je pense que tu a compris
    la variable "nomglobal" qui va me servir a memoriser le nom du dernier usf créé

    ainsi dans la macro qui supprime le usf la variable nomglobal me servira a identifier le usf a eliminer

    tu peut te servir de cette variables pour toute tes modif dans le usf

    donc en resumé ton usf porte le meme nom suivi du numero incrementé par "i" donc a la suppression tu ne peut pas te tromper il ne peut pas y avoir d'erreur

    la variable "ok" me sert a interdir ou autoriser la creation d'un usf
    ainsi quand tu a créé ton usf la variables passe a "false" donc tant que cet usf n'a pas ete supprimer tu ne peut par en recréé un

    j'espere avoir été suffisement explicite sur cette methode

    resultat des course tu n'est pas obligé d' enregistrer ton classeur a chaque fois que tu a créé et supprimer

    que ca te soit utile


    au plaisir

    et puis tien
    voila un exemple vite fait
    oui javais oublié de presiser de metre la variables "ok" a true dans le workbook open
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Par défaut
    Bonjour,

    Merci beaucoup pour ton exemple. C'est vrai que mettre un indice à la fin du nom de mon objet est très pratique; ça me permet de pouvoir le manipuler un peu comme je veux, sans craindre de retomber sur un nom déjà utilisé.

    Par contre, le problème reste le même quand à la réutilisation d'un nom précédemment donné à un objet qu'il ait été supprimé ou non. Mais je vais pouvoir gentiment contourner ce problème grâce à toi

    J'ai rajouté la lignepour pouvoir manipuler mon UserForm comme je veux.

    Merci encore et @ la prochaine

    Niko

  18. #18
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    oui c'est exavtement ca puisque que la variable est declarée en haut de module elle peut te servir partout
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/06/2015, 04h36
  2. Réponses: 3
    Dernier message: 05/12/2014, 20h39
  3. Variable pour modifier les liens lors de changement du nom du site
    Par Sohrab dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 29/10/2010, 21h37
  4. [MySQL] erreur lors de changement du framework
    Par ikramta dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 22/06/2009, 15h16
  5. Erreur lors de changement de longueur de champs
    Par Bouillon dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/10/2006, 09h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo