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 :

Rafraichissement d'un Userform [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Points : 31
    Points
    31
    Par défaut Rafraichissement d'un Userform
    Bonjour à tous.
    Tout d'abord, merci pour votre forum, étant débutant en VBA, il m'est d'une très grande utilité.
    Néanmoins je bloque sur mon fichier et j'en appelle à vos talents pour me débloquer de cette situation qui me rend fou depuis plusieurs jours.

    J'ai crée un fichier qui m'aide à suivre l'activité de mes équipes au travail.

    J'ai un Userform (Userform1) sur lequel se trouve les objectifs de mon équipe ainsi qui les personnes qui la compose.
    D'une équipe à l'autre, le nombre d'agent diffère, du coup, il me faut afficher plus ou moins de textbox pour y associer des noms d'agents.

    J'ai donc crée un lien depuis l'userform1 vers un autre userform Userform3) me permettant de selectionner les nombre d'agent dans chaque équipe.

    Le problème, quand je valide le nombre et que je reviens vers l'userform1, l'affichage de celui n'évolue pas.


    Voici le code de UF1:
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Private Sub CommandButton2_Click()                         'Clic sur le bouton "Valider les agents"
    Sheets("parametres").Range("C3") = TextBox1.Value    'Met en case C3 de l'onglet parametre la valeur de Textbox1
    Sheets("parametres").Range("C4") = TextBox2.Value    'Met en case C4 de l'onglet parametre la valeur de Textbox2
    Sheets("parametres").Range("C5") = TextBox3.Value    'Met en case C5 de l'onglet parametre la valeur de Textbox3
    Sheets("parametres").Range("C6") = TextBox4.Value    'Met en case C6 de l'onglet parametre la valeur de Textbox4
    Sheets("parametres").Range("C7") = TextBox5.Value    'Met en case C7 de l'onglet parametre la valeur de Textbox5
    Sheets("parametres").Range("C8") = TextBox11.Value   'Met en case C8 de l'onglet parametre la valeur de Textbox11
    
    End Sub
    _______________________________
    Private Sub CommandButton3_Click()      'Clic sur le bouton "fermer"
    UserForm1.Hide                                   'Fait disparaitre le Userform1
    End Sub
     ________________________________
    Private Sub CommandButton7_Click()      'Clic sur le bouton "Définir les critères"
    UserForm3.Show                                  'Fait apparaitre le Userform3
    End Sub
    _______________________________
    'Fait apparaitre 2 techniciens
    Private Sub TextBox4_Change()
    If Sheets("parametres").Range("B2") > 1 Then
    TextBox4.Visible = True
    Label5.Visible = True
    Else
    TextBox4.Value = ""
    Sheets("parametres").Range("C6") = TextBox4.Value    'Met en case C6 de l'onglet parametre la valeur de Textbox4
    TextBox4.Visible = False
    Label5.Visible = False
    End If
    End Sub
    
    'Fait apparaitre 3 techniciens
    Private Sub TextBox5_Change()
    If Sheets("parametres").Range("B2") > 2 Then
    TextBox5.Visible = True
    Label6.Visible = True
    Else
    TextBox5.Value = ""
    Sheets("parametres").Range("C7") = TextBox5.Value    'Met en case C7 de l'onglet parametre la valeur de Textbox5
    TextBox5.Visible = False
    Label6.Visible = False
    End If
    End Sub
    
    'Fait apparaitre 4 techniciens
    Private Sub TextBox11_Change()
    If Sheets("parametres").Range("B2") > 3 Then
    TextBox11.Visible = True
    Label23.Visible = True
    Else
    TextBox11.Value = ""
    Sheets("parametres").Range("C8") = TextBox11.Value    'Met en case C8 de l'onglet parametre la valeur de Textbox11
    TextBox11.Visible = False
    Label23.Visible = False
    End If
    End Sub
    _______________________________
    Private Sub UserForm_Initialize()               'A l'ouverture de l'Userform1
    TextBox1 = Sheets("parametres").Range("C3")     'Met dans la textbox 1 la valeur de la case C3 de l'onglet parametre
    TextBox2 = Sheets("parametres").Range("C4")     'Met dans la textbox 2 la valeur de la case C4 de l'onglet parametre
    TextBox3 = Sheets("parametres").Range("C5")     'Met dans la textbox 3 la valeur de la case C5 de l'onglet parametre
    TextBox4 = Sheets("parametres").Range("C6")     'Met dans la textbox 4 la valeur de la case C6 de l'onglet parametre
    TextBox5 = Sheets("parametres").Range("C7")     'Met dans la textbox 5 la valeur de la case C7 de l'onglet parametre
    TextBox11 = Sheets("parametres").Range("C8")    'Met dans la textbox 10 la valeur de la case C8 de l'onglet parametre
    
    End Sub
    et celui de l'UF3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub CommandButton1_Click()                      'Clic sur le bouton "Valider"
    Sheets("parametres").Range("B2") = ComboBox1.Value      'Met en case B2 de l'onglet parametre le choix de la Combobox1
    Unload UserForm3
    UserForm1.Repaint
    End Sub
    __________________________________
    Private Sub CommandButton2_Click()
    UserForm3.Hide                                          'Fait disparaitre le Userform3
    End Sub
    __________________________________
    Private Sub UserForm_Initialize()                       'A l'ouverture de l'Userform3
    ComboBox1 = Sheets("parametres").Range("B2")            'Met dans la textbox 1 la valeur de la case B2 de l'onglet parametre
    End Sub
    Malgré le Unload Me et le Userform1.Repaint, mon affichage ne se met pas à jour.

    Ci contre, le fichier en cours de dev pour plus de compréhension.FOS-#1267765--v2-TEE_-_Bilan_équipe_C.XLS

    Merci d'avance.

  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 : 83
    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
    Je n'ouvre jamais de classeur tiers et ne peux donc que me contenter de ton code et ton exposé.
    Avant toute chose : apprends à indenter tes lignes de code. Cette absence d'indentation le rend difficile à suivre
    Ensuite :
    Malgré le Unload Me et le Userform1.Repaint, mon affichage ne se met pas à jour.
    Lorsque l'on décharge un userform (le Unload), il perd les valeurs de toutes les propriétés modifiées en mode exécfution. Seules sont conservées celles définies en mode création.
    Si tu veux conserver ces propriétés, contente-toi donc de cacher le userform, puis de le montrer à nouveau quand tu en as besoin.
    Ou encore : recharge le userform à son ouverture

    Je vois par ailleurs et à ce propos que tu exécutes dans l'évènement initialize des lignes de code identiques à celles du clic sur ton bouton de commande !!!
    Drôle d'idée. Nul besoin de ce bouton.
    Utilise par contre l'évènement Activate et non l'évènement Initialize et tout ira mieux.
    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
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Tout d'abord merci pour ta réponse.
    Effectivement, rien n'était indenté dans mon code. C'est chose faite désormais et je dois avouer que le code est vraiment plus lisible .

    Concernant tes remarques, il se peut que tu trouves des bizareries dans mon code, mais je suis débutant en VBA, et j'essai de me débrouiller seul dans la majeure partie du temps avec les infos que je trouve sur les forums.
    Il est donc normal que tu trouves des anomalies de codage lol.

    Cependant, tes solutions remettent mon code propre mais mon problème reste présent.
    En gros sur l'UF1, il y a plusieurs textbox, chacun correspondant à une personne d'une équipe. Quand je clique sur mon bouton pour ouvrir l'UF3, je peux à partir de là changer le nombre de personne de mon équipe, par exemple la passer de 4 à 2. Quand je valide ce nombre, je veux que sur l'UF1, je retrouve le bon nombre de textbox correspondant à ma nouvelle équipe.

    Avec mon code actuel, la valeur du nouveau nombre de personne dans l'équipe est bien pris en compte, mais l'affichage de l'UF1 ne change pas, je conserve les textbox qui me sont inutile (pas évident d'explique sans ouvrir le fichier :p )

    J'espère avoir été clair lol
    Merci

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    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
    J'ai des difficultés de bien "voir" ce que tu exposes.
    A tout hasard : tant que UF1 est chargé (caché ou pas), on peut toujours, depuis UF3, "pointer" vers l'un quelconque de ses objets, en lire les propriétés, etc ...
    Imaginons que tu aies sur UF1 une textbox textbox1
    que tu caches (sans le décharger, juste caché) UF1 et montres UF2
    que sur UF2 tu aies une textbox nommée textbox1 (ou n'importe quoi d'autre) :
    ce code, depuis UF2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textbox1.text = UF1.textbox1.text
    affichera dans la textbox de UF3 le contenu de la textbox textbox1 de UF1
    Idem avec toute autre propriété, dont la propriété visible
    A toi de jouer avec. Le reste est plus de la "construction" qu'autre chose.
    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.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Merci Unparia pour ta réponse.

    Alors depuis mon dernier message qui date de 30 minutes, j'ai réussi à mettre le doigt sur ce qui clochait.
    En fait, ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    'Fait apparaitre 2 techniciens
      Private Sub TextBox4_Change()
        If Sheets("parametres").Range("B2") > 1 Then
          TextBox4.Visible = True
          Label5.Visible = True
        Else
          TextBox4.Value = ""
          Sheets("parametres").Range("C6") = TextBox4.Value 'Met en case C6 de l'onglet parametre la valeur de Textbox4
          TextBox4.Visible = False
          Label5.Visible = False
        End If
      End Sub
    n'était jamais exécuté car jamais conditionné.

    Je l'ai placé dans mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Sub Userform_activate()
    End Sub
    dans mon userform1 et là ca fonctionne.

    Enfin, ça fonctionne, je me retrouve encore avec un souci. A la fermeture de mon Userform3 (celui dans lequel je choisis le nombre de personne), mon userform1 ne se rafraîchit pas. Je dois le fermer et le ré-ouvrir pour qu'il se rafraîchisse.
    J'ai fais un panseman dans mon userform3 qui me ferme mon UF1 puis le réouvre automatiquement, mais je pense bien qu'il doit exister une solution "codée" à ce problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CommandButton1_Click()                      'Clic sur le bouton "Valider"
        Sheets("parametres").Range("B2") = ComboBox1.Value      'Met en case B2 de l'onglet parametre le choix de la Combobox1
        Unload Me
        Unload UserForm1
        UserForm1.Repaint
        UserForm1.Show
    End Sub
    Tu arriverais à me dire ou ça coince?

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    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
    Enfin, ça fonctionne, je me retrouve encore avec un souci. A la fermeture de mon Userform3 (celui dans lequel je choisis le nombre de personne), mon userform1 ne se rafraîchit pas. Je dois le fermer et le ré-ouvrir pour qu'il se rafraîchisse.
    Tu arriverais à me dire ou ça coince?
    Il ne se rafraichit pas car les instructions de "rafraichissement" (ce que tu appelles ainsi) ne sont pas exécutée, puisque dans une procédure évènementielle qui ne se redéclenche pas
    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.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Donc si je comprend ce dont tu parles, c'est le même problème qui j'ai résolu juste avant.....
    Je regarde ca et je te tiens au courant.
    Merci encore

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    En fait, je m'aperçois que mon est inutile.
    Je l'ai supprimé intégralement de mon code, ca ne change rien.
    Le fait de fermer et ouvrir à nouveau UF1 fait office de userform.repaint.

    Je pense donc que je ne comprend pas réellement ce que fait cette fonction et comment la placer dans le code.

    Un dernier coup de pouce????

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    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
    Un dernier coup de pouce????
    A un débutant qui a du mal à maîtriser le déroulement des évènements ? --->> oui --->>
    Deux frames différents dans un même userform, visibles tour à tour.

    S'il ne l'était pas (débutant), je l'engagerais alors à s'intéresser à ce que sont les contrôles liés (en commençant par les textboxes) à une plage de données. Mais là, c'est déjà à un autre niveau.
    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.

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

Discussions similaires

  1. [E-03] Rafraichissement userform durant l'éxécution
    Par toinou28 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/02/2009, 17h37
  2. Rafraichissement d un userform
    Par wabo67 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/12/2007, 20h52
  3. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  4. Toujours un problème de rafraichissement de DBGrid
    Par tripper.dim dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/12/2002, 13h15
  5. Timage rafraichissment
    Par Rizzla dans le forum Composants VCL
    Réponses: 5
    Dernier message: 16/09/2002, 17h08

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