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 :

[VBA-E] modifier une userform [Trucs & Astuces]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de cwain
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 218
    Par défaut [VBA-E] modifier une userform
    Bonjour,

    J'aimerais créer une userform avec plusieurs checkbox, jusque là ça va, mais j'aimerais que les caption de ces checkbox soient importées depuis des cellules d'une feuille de mon fichier, et que les checkbox soient mises en page dans la userform (leur nombre peut être variable). Est-ce possible et si oui comment faire ? Je n'ai pas trouvé de tutoriel sur le sujet (pê j'ai mal cherché ?)

    Merci pour votre aide

    Vincent

  2. #2
    Membre Expert Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Par défaut
    Essaie un truc dans ce genre, en VBA pour Excel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
        UserForm1.CheckBox1.Caption = _
            Workbooks("Classeur2").Worksheets(1).Cells(1, 1).Value
        UserForm1.Show
    End Sub

  3. #3
    Membre éprouvé Avatar de cwain
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 218
    Par défaut
    OK merci, ça marche bien
    Plusieurs problèmes que je n'arrive pas à résoudre :
    - si je veux utiliser la même instruction en boucle (de checkbox1 à checkbox13), j'essaie quelquechose comme ça : checkbox & i mais ça ne passe pas
    - si j'ai une valeur supplémentaire à intégrer, je dois créer une autre checkbox. Comment créer et mettre en page une checkbox supplémentaire, automatiquement ?


  4. #4
    Membre Expert Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Par défaut
    Regarde l'aide sur la collection "controls()" de ton formulaire, et tu verras que tout ira mieux pour désigner un contrôle par son nom.
    Et pour en ajouter, un indice: en anglais, "ajouter" se dit "Add".

    et si tu préfères le copier-coller, fais une recherche sur ce forum, tout a été expliqué il-y-a quelques jours...

  5. #5
    Membre éprouvé Avatar de cwain
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 218
    Par défaut
    OK, j'ai trouvé quelquechose pour créer les checkbox, mais ce qui est créé n'est pas "sauvegardé" : une fois la macro exécutée, la userform redevient vierge. Conséquence : je dois la faire tourner à chaque fois que j'ai besoin de cette userform. J'aimerais pouvoir garder la userform créée, et faire tourner la macro qui ajoute des checkbox seulement de temps en temps.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For j = 1 To 3
    Set Checkj = UserForm1.Controls.Add("Forms.CheckBox.1", "Checkj", True)
     
    Checkj.Left = 20
    Checkj.Width = 10
    Checkj.Height = 20
    Checkj.Top = CheckTop
    CheckTop = CheckTop + 25
     
    Next
    UserForm1.Show

  6. #6
    Membre Expert Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Par défaut
    Houps, alors là, c'est plus compliqué. Je ne sais même pas si c'est possible. On peut modifier le code VBA en passant par l'objet "Project", je crois. Peut-être que ça marcherait aussi pour modifier le formulaire que tu as créé dans l'éditeur de code VBA, mais ça dépasse mes compétences...

  7. #7
    Membre éprouvé Avatar de cwain
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 218
    Par défaut
    ok, je lance la macro à chaque fois, c'est pas grave
    par contre, je ne sais pas comment récupérer les valeurs de mes checkbox, je ne sais pas comment manipuler ces trucs bizarres.
    j'ai un commandbutton, et j'aimerais qu'en cliquant dessus, les captions des checkbox cochées aillent gentiment se mettre dans des cellules d'une feuille. Le problème c'est qu'il ne reconnait plus les "checkj"

  8. #8
    Membre Expert Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Par défaut
    Ha ouais, j'avais lu ton code trop vite.
    Dans ton cas, tes checkbox ne s'appellent pas check1, check2 et check3...
    Passe plutôt par un tableau de checkbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim check(3) As Controls
    puis désigne les par check(j).

  9. #9
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour Cwain , bonjour Megaxel

    pour créer un objet dynamiquement et de façon définitive dans ton UserForm , tu peux essayer


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    'Necessite d'activer la reference
    'Microsoft Visual Basic for Applications extensibility 5.3
    Dim Usf As VBComponent
    Dim Obj As MSForms.CheckBox
     
    Set Usf = ThisWorkbook.VBProject.VBComponents("UserForm1")
    Set Obj = Usf.Designer.Controls.Add("forms.CheckBox.1")
     
    With Obj
    .Left = 30: .Top = 40: .Width = 60: .Height = 20
    End With
     
    VBA.UserForms.Add (Usf.Name)
    UserForms(0).Show


    bonne soiree
    michel

  10. #10
    Membre Expert Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Par défaut
    Salut Michel.
    Pas "Project" alors, mais "VBProject"... Il me semblait bien qu'il y avait un truc dans ce genre là.
    Et je suppose qu'il faut quand même enregistrer le classeur, non?
    En tout cas, je mets ça dans un coin, c'est le genre de trucs difficile à inventer...
    Merci!

  11. #11
    Membre éprouvé Avatar de cwain
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 218
    Par défaut
    oki merci pour les réponses, je crois bien que ça m'aidera bien, le seul pett hic étant que je suis en congé à partir d'aujourd'hui, sans possibilité de le tester. Désolé de vous planter là ! Je rentre lundi, je testerai tout ça et vous tiendrai au courant.
    Encore merci pour l'aide, c'est les premières fois que j'y ai recours, et c'est sympa d'être épaulé de la sorte !

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Il y a ça sur le forum (uniquement pour regrouper le sujet traité)
    http://www.developpez.net/forums/vie...trol+dynamique

    A toutes fins utiles pour ceux qui en ont... l'utilité...

  13. #13
    Membre éprouvé Avatar de cwain
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 218
    Par défaut
    Bonjour,
    J'ai essayé de trafiquer le code de megaxel, qui marche bien pour un objet, mais j'arrive pas à le faire marcher pour plusieurs objets du même type créés en boucle.
    Mon code donne à peu près ça et bloque à "set object ..."
    quelqu'un a une idée ?

    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
    Dim Usf As VBComponent
    Dim Obj() As MSForms.CheckBox
    'je calcule et obtiens le nombre de personnes à partir de la feuille
    NbPers=9
     
    Redim obj(Nbpers)
     
    Set Usf = ThisWorkbook.VBProject.VBComponents("UserForm1")
     
    For i=1 to NbPers
       Set Obj(i) = Usf.Designer.Controls.Add("forms.CheckBox.1")
       With Obj(i)
       .Left = 30: .Top = 40+20*i: .Width = 60: .Height = 20
       End With
       VBA.UserForms.Add (Usf.Name)
    Next
     
    UserForm1.Show

  14. #14
    Membre Expert Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Par défaut
    Déjà, qu'entends-tu par "ça bloque" ? C'est quoi, le message d'erreur?
    Ensuite, une question indiscrète : Combien vaut "i" au moment du plantage?

  15. #15
    Membre éprouvé Avatar de cwain
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 218
    Par défaut
    j'ai :
    erreur d'exécution '-2147319767 (80028029)':
    Référence future non valide, ou référence à un type non compilé
    Ca bloque au premier passage du pas à pas, pour i=1 donc

  16. #16
    Membre Expert Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Par défaut
    Ok. J'essaie de reproduire ton erreur... Tu as quoi, comme référence, dans ton projet?

  17. #17
    Membre Expert Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Par défaut
    Je suis un âne...
    Et ce dodo est un malin!!!

    Je retourne à ma sieste...

  18. #18
    Membre éprouvé Avatar de cwain
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 218
    Par défaut
    j'ai :
    - visual basic for applications (jusque là, rien de choquant)
    - microsoft excel 11.0 Object Library
    - OLE automation
    - Microsoft Office 11.0 Object library
    - microsoft forms 2.0 object library
    - microsoft visual basic for applications extensibility 5.3

  19. #19
    Membre éprouvé Avatar de cwain
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 218
    Par défaut
    oups, g envoyé le dernier post sans avoir vu celui de ouskel'n'or, sorry
    heu, je.. enfin.. heu.. je pensais que ça ajoutait les contrôles à la userform, mais j'ai pas bon... ça la nomme ?
    Je me penche plus sérieusement sur cette ligne

  20. #20
    Membre éprouvé Avatar de cwain
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 218
    Par défaut
    grmbl, j'avais réussi à faire marcher megaxel's code ce matin et là non, je dois passer à côté de qqch d'évident.
    A ma décharge je dirai que la digestion appauvrit grandement mes facultés (voire les anihile ???)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [VBA-W] Atteindre une userform par un object
    Par tazamorte dans le forum VBA Word
    Réponses: 6
    Dernier message: 05/04/2007, 17h16
  2. [VBA-E] modifier une zone d'impression
    Par LeXo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/02/2007, 22h53
  3. VBA Excel, modifier une lettre type dans word
    Par morgan47 dans le forum VBA Word
    Réponses: 2
    Dernier message: 26/06/2006, 21h02
  4. [VBA E] Bloquer une USERFORM en consultation
    Par vanessaferraz dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/06/2006, 12h16
  5. [VBA-E] Dupliquer une userform
    Par cwain dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/04/2006, 12h11

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