Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/08/2011, 12h15   #1
Invité de passage
 
Femme
Assistant aux utilisateurs
Inscription : 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
Points : 0
Points : 0
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
aurogrady est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 13h06   #2
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 198
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 198
Points : 14 398
Points : 14 398
Envoyer un message via Skype™ à Pierre Fauconnier
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 :
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)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 13h53   #3
Invité de passage
 
Femme
Assistant aux utilisateurs
Inscription : 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
Points : 0
Points : 0
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?
aurogrady est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 13h59   #4
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 198
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 198
Points : 14 398
Points : 14 398
Envoyer un message via Skype™ à Pierre Fauconnier
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 :
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)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h11   #5
Invité de passage
 
Femme
Assistant aux utilisateurs
Inscription : 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
Points : 0
Points : 0
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 :
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
aurogrady est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 18h29   #6
Membre habitué
 
Inscription : décembre 2007
Messages : 102
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 102
Points : 105
Points : 105
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 :
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
jp014 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 12h06   #7
Invité de passage
 
Femme
Assistant aux utilisateurs
Inscription : 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
Points : 0
Points : 0
Bonjour,

Merci pour ton aide, j'ai donc adapté ton code avec le mien
Mais ça ne fonctionne toujours pas correctement maintenant il y a deux ligne de combobox en trop
Code :
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
Private Sub TextBox1_Change()
Dim nbval As Integer
Dim nbrcom, j, x, i As Integer
Dim cbox As Control
Dim cbox2 As Control
Dim cbox3 As Control
Dim cbox4 As Control
Dim cbox5 As Control
nbrcom = TextBox1.Value
nbval = "0"
If nbrcom = "" Then
    MsgBox ("Veuillez inserer un chiffre")
    Exit Sub
Else
If Not IsNumeric(nbrcom) Then
MsgBox ("Veuillez inserer un chiffre")
    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 = "ref" & i
            .Left = 20
            .Top = 70 + ((i - 1) * 22)
            .Width = 100
            .Height = 15.5
            .RowSource = "'LISTES'!A1: A153" ' récupère les info à mettre dans le cmbobox
        Me.Height = cbox.Top + cbox.Height + 50 ' permet d'ajuster la dimension de l'userform au nb de combobox
        CommandButton1.Top = Me.Height - 45 'permet de placer le bouton sous les combobox
        Me.Height = CommandButton1.Top + cbox.Height + 50 ' permet d'ajuster la dimension de l'userform au bouton
        End With
 
        Set cbox2 = Me.Controls.Add("Forms.Combobox.1")
        With cbox2
            .Name = "taille" & i
            .Left = 120
            .Top = 70 + ((i - 1) * 22)
            .Width = 40
            .Height = 15.5
            .RowSource = "'LISTES'!C1: C44" ' récupère les info à mettre dans le cmbobox
        Me.Height = cbox2.Top + cbox2.Height + 50 ' permet d'ajuster la dimension de l'userform au nb de combobox
        CommandButton1.Top = Me.Height - 45 'permet de placer le bouton sous les combobox
        Me.Height = CommandButton1.Top + cbox2.Height + 50 ' permet d'ajuster la dimension de l'userform au bouton
        End With
 
        Set cbox3 = Me.Controls.Add("Forms.Combobox.1")
        With cbox3
            .Name = "couleur" & i
            .Left = 160
            .Top = 70 + ((i - 1) * 22)
            .Width = 65
            .Height = 15.5
            .RowSource = "'LISTES'!D1: D34" ' récupère les info à mettre dans le cmbobox
        Me.Height = cbox3.Top + cbox3.Height + 50 ' permet d'ajuster la dimension de l'userform au nb de combobox
        CommandButton1.Top = Me.Height - 45 'permet de placer le bouton sous les combobox
        Me.Height = CommandButton1.Top + cbox3.Height + 50 ' permet d'ajuster la dimension de l'userform au bouton
        End With
 
        Set cbox4 = Me.Controls.Add("Forms.textbox.1")
        With cbox4
            .Name = "qt" & i
            .Left = 225
            .Top = 70 + ((i - 1) * 22)
            .Width = 35
            .Height = 15.5
        Me.Height = cbox4.Top + cbox4.Height + 50
        CommandButton1.Top = Me.Height - 45
        Me.Height = CommandButton1.Top + cbox4.Height + 50
        End With
 
 
        Set cbox5 = Me.Controls.Add("Forms.Combobox.1")
        With cbox5
            .Name = "motif" & i
            .Left = 260
            .Top = 70 + ((i - 1) * 22)
            .Width = 100
            .Height = 15.5
            .RowSource = "'LISTES'!B1: B6"
        Me.Height = cbox5.Top + cbox5.Height + 50
        CommandButton1.Top = Me.Height - 45
        Me.Height = CommandButton1.Top + cbox5.Height + 50
        End With
 
Next i
 nbval = nbrcom
Else
For i = nbrcom + 1 To nbval
Me.Controls.Remove "ref" & i
Me.Controls.Remove "taille" & i
Me.Controls.Remove "couleur" & i
Me.Controls.Remove "qt" & i
Me.Controls.Remove "motif" & i
Next i
nbval = nbrcom
End If
TextBox1.SetFocus
End If
End Sub
aurogrady est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 12h15   #8
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 198
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 198
Points : 14 398
Points : 14 398
Envoyer un message via Skype™ à Pierre Fauconnier
Le plus simple serait de supprimer les combobox puis d'ajouter le nombre voulu
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 14h23   #9
Invité de passage
 
Femme
Assistant aux utilisateurs
Inscription : 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
Points : 0
Points : 0
j'ai essayé mais je n'y arrive pas, ça m'indique argument non valide peut tu m'indiquer de quelle façon ferais tu?
Merci

et j'ai une autre question :
je souhaite maintenant récupérer les valeurs sélectionnées dans mes différentes combobox générées automatiquement mais je ne sais pas comment faire; le nom de la première combobox est "ref" &i pour le nombre de fois que je dois la créer mais ref&i.value ne marche pas je ne sais pas comment faire
merci
aurogrady est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 15h17   #10
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 198
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 198
Points : 14 398
Points : 14 398
Envoyer un message via Skype™ à Pierre Fauconnier
Pour supprimer les contrôles, en supposant que seuls les combobox à supprimer commencent par "Ref"

Code :
1
2
3
4
5
  Dim Controle As Control
 
  For Each Controle In Controls
  If Controle.Name Like "ref*" Then Controls.Remove Controle.Name
  Next
Pour manipuler un contrôle "indexé"
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 15h46   #11
Invité de passage
 
Femme
Assistant aux utilisateurs
Inscription : 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
Points : 0
Points : 0
merci merci
ça fonctionne super bien !!!
aurogrady est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h38.


 
 
 
 
Partenaires

Hébergement Web