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 :

Comment conserver les modifications faites sur un UserForm [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Logisticien
    Inscrit en
    Avril 2016
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Logisticien
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2016
    Messages : 70
    Points : 85
    Points
    85
    Par défaut Comment conserver les modifications faites sur un UserForm
    Salut à tous !

    Je souhaiterais savoir s'il est possible de sauvegarder une modification sur un
    UserForm. Pour la sauvegarde des valeurs des contrôles c'est possible.
    Je veux construire une interface utilisateur personnalisable du moins au niveau des
    couleurs du formulaire et de l'arrière plan des feuilles comme exemple
    ce code permet de changer le BackColor du UserForm a chaque clique mais je
    je voudrais que si l'utilisateur applique une couleur Vert Claire, qu'il puisse appuyer sur un
    bouton pour sauvegarder ses modifications et que a la prochaine ouverture,
    qu'il retrouve son interface personnalisée avec ce fond Vert Claire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CmbPersonaliserForm_Click()
        Red = Int(Rnd * 255)
        Green = Int(Rnd * 255)
        Blue = Int(Rnd * 255)
        UserForm1.BackColor = RGB(Red, Green, Blue)
    End Sub
    Merci D'avance de votre réponse


    Cordialement.

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Plusieurs possibilités, parmi lesquelles :
    - en utilisant les fonctions Savesetting et Getsetting (à lire dans ton aide VBA où elles sont accompagnés d'un exemple)
    - en enregistrant ces données dans un fichier texte et en les y récupérant pour les appliquer à l'ouverture de ton userform
    - en enregistrant ces données sur une feuille de ton classeur et en les y récupérant à l'ouverture de ton userform.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, tu peux également utiliser les bons vieux fichiers *.ini. Ceci évitant d'aller encombrer la base de registre.

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Une autre possibilité, celle d'utiliser un Nom caché dans le classeur (ici, "CouleurFond"). A la première ouverture de la Form le nom n'existe pas, il sera créé. A la fermeture de la Form la valeur sera stockée dans le nom et à l'ouverture suivante la couleur de fond de la Form sera chargée. Tu peux créer autant de Noms que tu as besoin pour stocker tes différentes valeurs.
    Attention, la valeur du Nom est sous la forme =49152 d'où l'utilisation de "Right()" pour supprimer le signe "=" :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    Private Sub UserForm_Initialize()
     
        Dim Nom As Name
     
        On Error Resume Next 'gère l'erreur de la non existance du nom
        Set Nom = ThisWorkbook.Names("CouleurFond")
     
        'si il existe...
        If Err.Number = 0 Then
     
            'la couleur de fond est définie pour la Form
            Me.BackColor = CLng(Right(Nom.Value, Len(Nom.Value) - 1))
     
        Else
     
            'le nom est créé et est invisible dans la boite "Gestionnaire de noms"
            ThisWorkbook.Names.Add "CouleurFond", Me.BackColor, False
     
        End If
     
        On Error GoTo 0
     
    End Sub
     
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
     
        Dim Nom As Name
     
        On Error Resume Next
        Set Nom = ThisWorkbook.Names("CouleurFond")
     
        'stocke la valeur dans le nom
        If Err.Number = 0 Then
     
            Nom.Value = Me.BackColor
     
        End If
     
    End Sub

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Pour résumer :
    - un userform perd à sa fermeture ses paramètres et variables modifiés en mode exécution
    - il faut alors :
    ---- les stocker ailleurs. Cet "ailleurs" est à choisir selon ce qui te convient le mieux (plusieurs "ailleurs ont déjà été évoqués... on pourrait en ajouter d'autres, dont par exemple un fichier xml)
    ---- les extraire de cet "ailleurs" lors de l'ouverture du userform et les appliquer.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bien vu theze
    je n'y aurais jamais pensé sans utiliser une cellule sur un sheets en plus pour une transportabilité c'est sans équivalent
    bravo pour l'astuce!
    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
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour as tous,

    Merci Patrick

  8. #8
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    Bonjour à tous

    oui il est possible de sauvegarder une modification sur un userform
    voici comment


    Créer un userform nomé UserForm1.
    Placer un bouton nomé CommandButton1
    ajouter la référence Microsoft Visual Basic for Applications Extensibility 5.3

    insérer ce code dans un module

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Sub test()
     
    '******************************************************************
    'NOTE: Vous devez définir une référence
    'Microsoft Visual Basic for Applications Extensibility 5.3
    '******************************************************************
     
        Dim Mon_User_Form As Object
        Dim Nom_de_la_Form As String
        Dim Button_a_Modifier As MSForms.CommandButton
     
     
     
        Application.VBE.MainWindow.Visible = False
        Application.ScreenUpdating = False
     
        Nom_de_la_Form = "UserForm1"
     
        Set Mon_User_Form = ThisWorkbook.VBProject.VBComponents(Nom_de_la_Form)
     
        'Set nouvelle propriete de la userform
        With Mon_User_Form
            .Properties("Caption") = "Bonjour"
            .Properties("Width") = 200
            .Properties("Height") = 100
        End With
     
        'Modifier le caption du bouton choisi
        Set Button_a_Modifier = Mon_User_Form.Designer.Controls("CommandButton1")
        With Button_a_Modifier
            .Caption = "Je suis modifié"
            .Left = 60
            .Top = 40
            .BackColor = vbGreen
        End With
     
        MsgBox "Fin"
     
    End Sub
    démarrer ce macro
    ensuite aller voir le userform1

  9. #9
    Membre régulier
    Homme Profil pro
    Logisticien
    Inscrit en
    Avril 2016
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Logisticien
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2016
    Messages : 70
    Points : 85
    Points
    85
    Par défaut
    Salut a vous !

    Merci infiniment pour toutes vos contributions assez prompt et pertinentes.
    j'ai trouver la solution du Nom caché dans le classeur et celle de gnain
    assez simple et pratique ça répond nettement a mon cas et
    ça marche parfaitement. lorsque j'exécute le code, les paramétrés sont
    bien appliquées a l'ouverture du userform. par contre la
    solution du fichier ' ini ' un peu complexe pour un début.

    merci encore pour votre apport.

    Cordialement

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    attention il y a méprise!!!!!

    la solution de theze sera vraiment effective que si tu sauvegarde le classeur après modification sinon les modifs seront perdu après fermeture et réouverture du classeur

    et je ne comprends pas bien la démarche de gnain
    avant ouverture de l'userform on peut faire
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom_userform.controls("toto").backcolor=vbred
    ce qui fait exactement la même chose mais la non il n'y aura pas possibilité de sauvegarder comme avec la solution de gnain

    la solution de theze reste la plus appropriée et la plus propre
    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

  11. #11
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Theze Voir le message
    Bonjour,

    Une autre possibilité, celle d'utiliser un Nom caché dans le classeur (ici, "CouleurFond"). A la première ouverture de la Form le nom n'existe pas, il sera créé. A la fermeture de la Form la valeur sera stockée dans le nom et à l'ouverture suivante la couleur de fond de la Form sera chargée. Tu peux créer autant de Noms que tu as besoin pour stocker tes différentes valeurs.
    dans le même genre on peut utiliser CustomDocumentProperties

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        'Récupération de la valeur de la propriété personnalisée (Autoexec_done) du classeur dans la variable p
        Set p = ActiveWorkbook.CustomDocumentProperties("Autoexec_done")
     
        'Test si la valeur récupérée dans p est vide ou non : si oui, on rentre dans la condition, ce qui signifie alors que c'est la première fois que l'on ouvre le classeur.
        If p Is Nothing  Then
     
     
            'Affectation de la valeur "done" à la propriété personnalisée (Autoexec_done) du classeur
            Set p = ActiveWorkbook.CustomDocumentProperties.Add("Autoexec_done", False, msoPropertyTypeString, "done")
    end if

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut RE
    BIEN VU OLIV AUSSI

    ON Y PENSE PAS A CES PETITES ASTUCES QUAND ON VEUT PAS UTILISER UN SHEETS DE MEMO
    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. Comment gérer les modifications sur un lot
    Par emeric2502 dans le forum Modélisation
    Réponses: 0
    Dernier message: 30/01/2015, 16h11
  2. Réponses: 4
    Dernier message: 28/07/2011, 15h16
  3. SVN ne voit pas les modifications faites sur mes fichiers
    Par LGnord dans le forum Subversion
    Réponses: 1
    Dernier message: 03/05/2011, 15h36
  4. Réponses: 4
    Dernier message: 12/05/2007, 23h24
  5. [DOM] comment enregistrer les modifs?
    Par noobiewan kenobi dans le forum Format d'échange (XML, JSON...)
    Réponses: 26
    Dernier message: 30/07/2004, 10h56

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