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 :

Bouton de UserForm mis en variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de danbo52
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 98
    Par défaut Bouton de UserForm mis en variable
    bonjour,

    myope, je n'ai pas vu traité ce sujet, et je ne trouve pas dans la littérature.

    prob:

    sur une feuille 'feuil1' de classeur (XL 2003-2007), j'ai un bouton 'Btn'.
    En cliquant dessus, j'appelle un Userform, qui se nomme bêtement 'UserForm1'.

    Ce Userform contient des boutons d'actions. Leur légende (caption) est en français.

    Sur la feuille 'feuil2' du même classeur, j'ai des listes de mots, qui représentent les termes de toutes les legendes des boutons du Userform:
    colonne 1 => francais
    colonne 2 => allemand
    colonne 3 => anglais

    Or, sur la feuilll 'feuil1', j'ai trois boutons 'francais', 'allemand' et 'anglais'.
    En appuyant sur l'un des trois, les legendes devraient changer dans le userform:
    exemple
    'ouvrir fichier courant' deviendrait 'Open current file', etc...

    Remarque :

    je souhaite que les boutons soient et restent sur la feuille 'feuil1', car j'ai d'autres Userforms en cours.

    Question:

    Quelle est la syntaxe depuis les trois boutons de langues la feuil 'feuil1' qui permettrait de faire changer la légende des boutons du Userform, en posant que les noms des boutons seront dans une variable, puisque je vais boucler chaque liste de la colonne de langue choisie.

    ex bidon :
    choix du Userform k du classeur
    for i....'pour i legendes à changer dans le Userform
    prendre item(i) de la colonne j de la feuil2
    changer la legende du bouton(i) du userform(k)
    next i 'boucler

    merci (développement freelance pour une Société)

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    Est-ce que tes légendes dans ton Userform ont le nom de type Label1, Label2,...
    As tu bien autant de lignes dans ta feuille 2 que de légende dans ton UF ?

    A+

    Edit: Si la réponse est oui aux questions, voici une proposition, il y a certainement plus efficace que faire 3 codes distinct associés à chaque bouton mais il faudrait en savoir plus sur ton fichier. Donc en l'état, ton bouton Français doit être lié à la macro AfficheFr, ton bouton Allemand à la macro AfficheDe, etc.

    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
    Sub AfficheFr()
     
    Dim i As Long, NbLeg As Long
    Dim ob As Object
     
    NbLeg = Sheets("sheet2").Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
     
    For i = 1 To NbLeg
        For Each ob In UserForm1.Controls
            If ob.Name = "Label" & i Then
                ob.Caption = Sheets("sheet2").Cells(i, 1)
            End If
        Next ob
    Next i
    UserForm1.Show
     
    End Sub
    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
    Sub AfficheDe()
     
    Dim i As Long, NbLeg As Long
    Dim ob As Object
     
    NbLeg = Sheets("sheet2").Cells(Columns(2).Cells.Count, 2).End(xlUp).Row
     
    For i = 1 To NbLeg
        For Each ob In UserForm1.Controls
            If ob.Name = "Label" & i Then
                ob.Caption = Sheets("sheet2").Cells(i, 2)
            End If
        Next ob
    Next i
    UserForm1.Show
     
    End Sub
    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
    Sub AfficheGB()
     
    Dim i As Long, NbLeg As Long
    Dim ob As Object
     
    NbLeg = Sheets("sheet2").Cells(Columns(3).Cells.Count, 3).End(xlUp).Row
     
    For i = 1 To NbLeg
        For Each ob In UserForm1.Controls
            If ob.Name = "Label" & i Then
                ob.Caption = Sheets("sheet2").Cells(i, 3)
            End If
        Next ob
    Next i
    UserForm1.Show
     
    End Sub

  3. #3
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Plutot que trois procédure, une seule avec un paramètre peux suffire.

  4. #4
    Membre confirmé Avatar de danbo52
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 98
    Par défaut Essai en cours
    Merci pour ta réponse rapide.
    Je fais un test et je réponds, j'espère au plus tôt cet a.midi ou ce soir... à moins que j'ai 5 mn là.

    Danbo

  5. #5
    Membre confirmé Avatar de danbo52
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 98
    Par défaut
    le Userform dispose de boutons et de zones de textes
    Pour faciliter la tache des programmeur (maintenance) et des utilisateurs, chaque bouton porte le nom de la fonction qu'il gère.
    Par exemple, le bouton d'importation de données s'appelle 'ImportDonnees', et c'est ainsi pour tout, boutons et zones de texte.
    Il n'y a donc pas de Label1, 2, 3 ...
    Tout doit être explicite pour la maintenance du code.

    Je suis très pointilleux là dessus, j'aime commenter et libeller de manière à ce qu'un néophyte comme un professionnel puisse travailler sans chercher le sens du code durant des heures.

    Excel ne reconnait pas la forme 'ob.caption' que tu m'as proposée, sans me répondre sur le type d'erreur.

    Petite précision que j'avais énoncé au début, je souhaite aussi disposer d'une scrutation en relatif des 'userform', et non en dur. Je m'explique:

    au lieu d'écrire Userform1.propriétés....
    je préférerai écrire
    ("Userform" & indice).propriétés....

    ---------------------

    AALEX 38 , c'est bien ce que je pensais aussi !

    Fvandermeulen,

    le ob.Caption répond que l'objet n'est pas le Userform mais le fichier actif (qui en l'occurence s'appelle objet1.xls)

  6. #6
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Re,
    La piste proposée était selon mes questions, tu peux toujours utiliser l'ordre des éléments de ton userform pour autant que ce soit plus ou moins logique (ou d'ajouter le numéro d'ordre sur ta feuille 2)
    Je reste dans les suppositions car je n'arrive pas a avoir une d'idée clair de ton classeur. (c'est d'ailleurs pourquoi il y avait trois procédure et pas une)
    Premier principe la suite est logique; Label-Bouton,Label-Bouton; tu fais une boucle avec step 2
    Deuxième en bouclant sur les lignes de ta feuilles 2 tu récupère en variable le numéro de l'élément

    Pour ce qui est du userform récupéré 'dynamiquement' théoriquement pas de problème mais qu'est-ce qui va définir ton K de ton exemple ?

    Sinon pour le problème de Ob.caption, j'avoue que je sèche chez moi ça passait bien...

    A+

    Edit: Je viens de voir ton poste avec ton test sur Ob, l'as tu bien utiliser dans une une boucle de type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each ob In UserForm1.Controls
    Ce qui précise qu'on ne regarde que les objets dans les controles du userform.

  7. #7
    Membre confirmé Avatar de danbo52
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 98
    Par défaut détection du UserForm1
    Fvandermeulen

    Oui, je boucle bien en appelant le userform, mais Excel me répond qu'il s'agit du classeur, car il bloque sur cette ligne, justement.
    Il ne reconnait pas le Userform, à priori.

    Je regarde autant dans les déclarations que dans la méthode d'appel.

  8. #8
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour danbo52 Fvandermeulen l'ami aalex le forum
    comme j' ai compris!!!! code dans la feuille1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Option Explicit
    Dim i As Byte, j As Control, x As Byte, z As Byte
     
    Private Sub CommandButton1_Click()
    UserForm1.Show
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CommandButton2_Click()
    z = 1
    Affic
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CommandButton3_Click()
    z = 2
    Affic
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CommandButton4_Click()
    z = 3
    Affic
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Affic()
    With Sheets(2)
    x = 1
    For Each j In UserForm1.Controls
    If TypeOf j Is MSForms.CommandButton Then
    j.Caption = .Cells(x, z)
    x = x + 1
    End If: Next: End With
    End Sub
    ps tu es pas oblige de ouvrir userform1 avant click sur tes 3 boutons.

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

Discussions similaires

  1. [XL-2007] Boutons d'Userform inactifs
    Par ohohoh dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/06/2009, 07h57
  2. Réponses: 1
    Dernier message: 05/12/2008, 19h44
  3. Bouton lancement fonction JS avec variable PHP
    Par LePueblo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/10/2008, 14h12
  4. Réponses: 2
    Dernier message: 18/10/2008, 13h06
  5. Mettre la valeur d'un bouton d'option dans une variable
    Par beegees dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 01/03/2006, 10h00

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