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 :

Redimensionner dynamiquement un Userform


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2011
    Messages : 14
    Par défaut Redimensionner dynamiquement un Userform
    Bonjour,

    Je suis en train de créer un userform dans lequel il y aura des combobox qui se créeront en automatique en fonction un nombre donné dans un textbox.
    Je souhaite que la taille de l'userform s'adapte au nombre de combobox car pour le moment les combobox s'affichent par dessus les autres éléments du userform et voir dépasse même de la page. Y a t il un moyen de lui indiquer qu'il doit s'aggrandir et faire descendre les boutons et autres en fonction du nombre de combobox?
    merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Tu peux "jouer" sur la propriété Height de l'objet.

    Voici un code qui, à chaque clic sur le userform, ajoute un textbox et redimensionne le userform. Place-le dans le module du UserForm puis ouvre le userorm avec F5 et clique... Tu verras le userform s'adapter aux contrôles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub UserForm_Click()
      Dim Controle As Control
      Static Haut As Long
     
      Set Controle = Me.Controls.Add("Forms.TextBox.1")
      Controle.Top = Haut
      Haut = Haut + 20
      Me.Height = Controle.Top + Controle.Height + 50
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre averti
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2011
    Messages : 14
    Par défaut
    super!
    merci cela fonctionne pour redimensionner l'userform en fonction de mes combobox!
    Par contre cela affiche toujours par dessus les boutons qu'il y a en bas du userform et en plus maintenant, si je fais peu de combobox l'userform s'ajuste et on ne voit plus le bouton. Y a t il un moyen pour cela prenne également en compte qu'il y a d'autres élément sous les combobox?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Oui, il y a moyen.

    Mon code donne l'idée. Il faut le comprendre et l'adapter en travaillant sur les propriétés des contrôles et du USF (TOP et HEIGHT,notamment)

    La dernière ligne du code suivant replace le bouton CommandButton1 à 48 points du bord inférieur du usf.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub UserForm_Click()
      Dim Controle As Control
      Static Haut As Long
      
      Set Controle = Me.Controls.Add("Forms.TextBox.1")
      Controle.Top = Haut
      Haut = Haut + 20
      Me.Height = Controle.Top + Controle.Height + 50
      CommandButton1.Top = Me.Height - 48
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre averti
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2011
    Messages : 14
    Par défaut
    merci
    je l'ai adapté et c'est nickel!!
    Sinon j'ai une autre petite question.
    Mon code me permet donc de générer des combobox en fonction du nombre indiqué en textbox1 cela fonction trés bien mais admettons que l'utilisateur se trompe de chiffre et veut le modifier, si le nouveau chiffre est > au précédent c'est bon mais par contre s'il est < un combobox de trop se forme et je n'arrive pas à comprendre pourquoi ni comment l'éviter

    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
    Private Sub TextBox1_Change()
    Dim nbrcom, j, x, i As Integer
    Dim cbox As Control
    Dim cbox2 As Control
    nbrcom = TextBox1.Value
     
    If nbrcom = "" Then
        MsgBox ("Veuillez inserer un chiffre")
    Else
        For i = 1 To nbrcom
     
        On Error Resume Next
     
            Set cbox = Me.Controls.Add("Forms.Combobox.1")
            With cbox
                .Name = "combobox" & i
                .Left = 20
                .Top = 50 + ((i - 1) * 22)
                .Width = 168
                .Height = 15.5
                .RowSource = "'feuil5'!A1: A4"
            Me.Height = cbox.Top + cbox.Height + 50
            CommandButton1.Top = Me.Height - 45
            Me.Height = CommandButton1.Top + cbox2.Height + 50
            End With
     
            Set cbox2 = Me.Controls.Add("Forms.Combobox.1")
            With cbox2
                .Name = "combobox" & i
                .Left = 200
                .Top = 50 + ((i - 1) * 22)
                .Width = 168
                .Height = 15.5
                .RowSource = "'feuil5'!A1: A4"
            Me.Height = cbox2.Top + cbox2.Height + 50
            CommandButton1.Top = Me.Height - 45
            Me.Height = CommandButton1.Top + cbox2.Height + 50
            End With
    Next i
    TextBox1.SetFocus
    End If
    End Sub

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 102
    Par défaut
    Bonsoir

    Ci dessous le code pour supprimer les combobox.
    J"ai modifié les noms en rajoutant a et b ainsi que la position du message d'erreur.
    Une variable permet de mémoriser l'ancienne valeur

    A tester et à modifier

    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
    67
    68
    69
     
     
    Dim nbval As Byte
     
    Private Sub TextBox1_Change()
    Dim nbrcom, j, x, i As Integer
    Dim cbox As Control
    Dim cbox2 As Control
     
    nbrcom = TextBox1.Value
     If nbrcom = "" Then
        Exit Sub
     
    Else
    If Not IsNumeric(nbrcom) Then
        MsgBox "Une valeur numérique svp"
        Exit Sub
    End If
     
    If nbrcom > nbval Then
     
        For i = 1 To nbrcom
     
        On Error Resume Next
     
            Set cbox = Me.Controls.Add("Forms.Combobox.1")
            With cbox
                .Name = "comboboxa" & i
                .Left = 20
                .Top = 50 + ((i - 1) * 22)
                .Width = 168
                .Height = 15.5
                .RowSource = "'feuil5'!A1: A4"
            Me.Height = cbox.Top + cbox.Height + 50
            CommandButton1.Top = Me.Height - 45
            Me.Height = CommandButton1.Top + cbox2.Height + 50
            End With
     
            Set cbox2 = Me.Controls.Add("Forms.Combobox.1")
            With cbox2
                .Name = "comboboxb" & i
                .Left = 200
                .Top = 50 + ((i - 1) * 22)
                .Width = 168
                .Height = 15.5
                .RowSource = "'feuil5'!A1: A4"
            Me.Height = cbox2.Top + cbox2.Height + 50
            CommandButton1.Top = Me.Height - 45
            Me.Height = CommandButton1.Top + cbox2.Height + 50
            End With
     
        nbval = nbrcom
     
    Next i
     
    Else
     
    For i = nbrcom + 1 To nbval
        Me.Controls.Remove "comboboxb" & i
        Me.Controls.Remove "comboboxa" & i
    Next i
     
    nbval = nbrcom
     
    End If
     
    TextBox1.SetFocus
    End If
    End Sub
    JP

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

Discussions similaires

  1. Redimensionner dynamiquement div
    Par HaTnuX dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/08/2007, 16h51
  2. Réponses: 11
    Dernier message: 02/06/2007, 01h55
  3. Redimensionner dynamiquement une textbox
    Par soso78 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 29/05/2007, 19h50
  4. Un image qui se redimensionne dynamiquement sur toute la cel
    Par Furius dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 10/01/2006, 23h10
  5. Réponses: 2
    Dernier message: 09/08/2005, 13h02

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