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 :

nom d'un userform dans une variable


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut nom d'un userform dans une variable
    Bonjour,
    J'ai userform qui enregistre des configurations de couleurs pour d'autres userform.

    Avec des lignes de code, dans lesquelles le nom du formulaire appelant est écrit, aucun problème de mise à jour de la couleur de l'userform appelant après avoir quitté l'userform qui enregistre les configurations couleur.

    Il serait plus "propre" de mettre le nom du formulaire appelant,déjà stocké dans une cellule excel, dans une variable. J'ai trouvé sur ce site : VBA.UserForms.add(sVariable).show (où sVariable est une variable de type string). Ce code rappelle bien mon formulaire appelant, initialement déchargé, mais sans les couleurs et sans les données (listbox vide).

    J'ai cherché sur le net mais j'ai trouvé très peu de chose. Aussi je remercie tous ceux qui voudront bien m'aider

    Sylvie Bastien

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 179
    Billets dans le blog
    53
    Par défaut
    Bonjour Sylvie,
    Je n'ai peut-être pas compris ta question mais je n'ai aucun problème avec cette méthode.
    J'ai créé un UserForm avec un ListBox ainsi que deux couleurs (Caption du UserForm) et BackColor
    Avec la procédure ci-dessous écrite rapidement donc sans test sur Target, j'affiche bien le UserForm dont le nom est la valeur de la cellule (Target). Les couleurs sont bien là et la liste correctement alimentée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     UserForms.Add(Target.Value).Show
     Cancel = True
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Pas bien compris non plus la question.
    Montre le code qui fait ceci, en nous précisant dans quel module de code il est placé :
    Avec des lignes de code, dans lesquelles le nom du formulaire appelant est écrit, aucun problème de mise à jour de la couleur de l'userform appelant après avoir quitté l'userform qui enregistre les configurations couleur.
    Cela nous "parlera" peut-être un peu plus

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut nom d'un userform dans une variable
    Merci à tous les deux,

    Philippe, j'essaye ta solution et je vous tiens informés

    Sylvie Bastien

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut nom d'un userform dans une variable
    Merci Philippe,

    J'ai testé ton code qui affiche bien la boite de dialogue quand je double-clique sur le nom d'une boite de dialogue contenu dans une cellule excel.

    Voici ce que j'ai dans mon application

    1) label de l'userform usf_bteChoix

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Label6_Click()
    '---
    '   Intitulé appelant la boite couleur
    '---
        Unload usf_bteChoix
        usf_bteCouleur.Show
    End Sub
    2) bouton quitter de l'userform usf_bteCouleur : (userform qui possède les boutons "Ajouter", "Modifier", "Supprimer" et "Quitter")

    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
    Private Sub CommandButton4_Click()
    '---
    '   Bouton "QUITTER" de la boite couleur
    '---
        'fermeture de la boite couleur
        Unload usf_bteCouleur
     
        'témoin de boite appelante
        monTexte = Worksheets("Renseignements").Cells(2, 15).Value
     
        'affichage de la boite de dialogue selon le témoin
        Select Case monTexte
            Case Is = "usf_bteChoix"
                usf_bteChoix.Show
     
            Case Is = "usf_btePersonnels"
                usf_btePersonnels.Show
        End Select
    '---
    '   décharger les variables utilisées
    '---
        Set monTexte = Nothing
    End Sub
    Certes, avec select case..., les boites de dialogue sont chargées avec leurs couleurs et leurs données.

    VBA.UserForms.add(monTexte).show ne semble pas passer par Private Sub UserForm_Initialize() de la boite contenue dans la variable.

    Philippe et unparia, si vous avez une idée... je suis preneuse

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Ce code ne permets pas de voir quel est le problème.
    J'y note par ailleurs une aberration évidente entre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monTexte = Worksheets("Renseignements").Cells(2, 15).Value
    et
    commence s'il te plait par travailler en Option Explicit, ce qui t'obligera à typer ta variable montexte
    Lance et tu la verras, cette aberration ...

    Et enfin : si des instructions sont à exécuter pour modifier des contrôles dans un userform, elles ne sont pas à mettre dans son évènement Initialize, mais dans son évènement Activate.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut nom d'un userform dans une variable
    Unparia,

    Ma variable monTexte est de type string. Elle est définie ailleurs dans l'application. Elle est initialisée, puis je travaille avec son contenu. Et à la fin, elle est déchargée afin de libérer de la mémoire.

    Pourquoi trouves-tu cela bizarre ? N'est-ce pas utile ?

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Si elle était vraiment "de type string. Elle est définie ailleurs dans l'application" et donc en Public pour être accessible depuis ton bouton "QUITTER", tu aurais une magnifique erreur dénoncée à cette ligne :
    Travaille donc proprement en Option Explicit -->> et tu verras que le type de cette variable est inconnu dans le code de ton bouton "QUITTER"

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut nom d'un userform dans une variable
    Unparia

    Mes variables sont toutes déclarées dans le module ThisWorkbook et elles sont précédées de Option Explicit

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Option explicit t'oblige à déclarer tes variables, mais pas à les typer.
    Unparia a fait un écart de langage mais il parle bien du type. Ta variable texte n'est pas typée (ou typée Variant) au lieu de String. Il faut typer au plus près de ce que tu veux qu'elle contienne.
    eric

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut
    Bonjour Eriiic,

    J'ai déclaré une variable de type variant et je l'ai utilisée avec VBA.UserForms.add.... L'userform est bien chargé mais sans les couleurs et sans les données.

    Unparia a pointé le déchargement de ma variable juste avant la fin de ma procédure. Mais il a oublié de m'indiquer pourquoi.

    J'ai lu plusieurs fois que cela permettait de libérer de la mémoire. Comment procèdes-tu ?

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    J'ai lu plusieurs fois que cela permettait de libérer de la mémoire
    De décharger de la mémoire des variables objets.
    Ta variable montexte n'est pas un objet.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut
    Bonjour Eriiic,

    J'ai déclaré une variable de type variant et je l'ai utilisée avec VBA.UserForms.add.... L'userform est bien chargé mais sans les couleurs et sans les données.

    Unparia a pointé le déchargement de ma variable juste avant la fin de ma procédure. Mais il a oublié de m'indiquer pourquoi.

    J'ai lu plusieurs fois que cela permettait de libérer de la mémoire. Comment procèdes-tu ?

  14. #14
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 179
    Billets dans le blog
    53
    Par défaut
    Bonjour Sylvie,
    Maintes fois répété par Unparia et appuyé par Eric, il y a une incompatibilité entre cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monTexte = Worksheets("Renseignements").Cells(2, 15).Value
    et celle-ci
    Set est un mot clé utilisé pour attribuer une référence d'objet à une variable ou à une propriété or la variable monTexte n'est pas un objet dans ton cas mais une valeur.

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     Dim rng As Range  ' Variable objet de type range
     Dim txt As String ' Variable de stype String (chaîne de caractères)
     txt = "Mon texte"
     Set rng = ThisWorkbook.Worksheets("Résultats").Range("A1").CurrentRegion
     ' Code
     ' Fin de procédure
     Set rng = Nothing ' Libère la mémoire occupée par la variable objet
    Typer une variable comme un variant n'est pas une bonne pratique.

    La lecture de ce tutoriel Utiliser les variables en VBA Excel t'en apprendra plus sur le sujet
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  15. #15
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Comme dit unparia, elle ne doit pas être Variant mais String.
    C'est une question de rigueur qui t'empêche une utilisation anormale de la variable. Un bon type permet en plus à l'autocomplétion de te proposer les bonnes propriétés et méthodes (dans la mesure où tu ne te contentes pas de As Variant ou As Object quand tu as mieux ;-)).
    Que ta variable texte soit considérée comme un objet (seuls à accepter Is Nothing) peut s'avérer gênant donc ça mange pas de pain de bien la typer, au contraire.
    C'est fortement conseillé de bien typer, même si le cœur de ton problème est trouvé ailleurs.
    Edit : bon, j'ai été trop lent, désolé de la sur-couche :-)

Discussions similaires

  1. [XL-2007] Nom d un userform dans une variable
    Par chrisaccess dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/02/2016, 08h49
  2. Récupérer le nom d'un fichier dans une variable
    Par JeanDan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/07/2009, 18h12
  3. Requète SQL avec nom de table contenu dans une variable
    Par samoussa dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/05/2009, 13h58
  4. Nom d'un control dans une variable
    Par cheverny dans le forum ASP.NET
    Réponses: 8
    Dernier message: 19/03/2009, 15h59
  5. affectation d'un nom de classeur ouvert dans une variable
    Par nolive915 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/09/2006, 10h55

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