« Macros-commandes VBA/Création de Formulaire » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 76 :
{{remarque|contenu=
La propriété ''Name'' peut aussi s'appliquer sur la propriété ''Parent'' de l'objet. Par exemple dans Excel :
<sourcesyntaxhighlight lang="vb">
Dim F As Excel.Worksheet
Set F = ActiveSheet
MsgBox "La feuille " & F.Name & " se trouve dans le fichier " & F.Parent.Name & " de l'application " & F.Parent.Parent.Name
</syntaxhighlight>
</source>
}}
 
Ligne 271 :
Pour un exemple où il s'agit d'intégrer différentes projets, il faut agir comme suit :
 
<sourcesyntaxhighlight lang="vb">
Private Sub UserForm_Initialize()
'Cette procédure renseigne le ComboBox1 avec des valeurs
Ligne 278 :
ComboBox1.AddItem "Projet 3"
End Sub
</syntaxhighlight>
</source>
Ou
 
<sourcesyntaxhighlight lang="vb">
Private Sub UserForm_Initialize()
'Cette procédure renseigne la ListBox1 avec des valeurs
Ligne 289 :
ListBox1.AddItem "Projet 3"
End Sub
</syntaxhighlight>
</source>
 
 
Ligne 296 :
'''''Illustration :'''''
 
<sourcesyntaxhighlight lang="vb">
Private Sub UserForm_Initialize()
For Each projet in range("data!A1:A20")
If left(projet.value,1)="1" then ComboBoxchoixProjet.AddItem (projet.value)
End Sub
</syntaxhighlight>
</source>
 
''Il est à noter qu’il existe également la méthode RemoveItem mais celle-ci fait exactement l'inverse de la méthode AddItem : elle permet de supprimer un élément de la ComboBox ou ListBox.''
Ligne 321 :
* Rechercher la propriété Value et lui donner comme valeur ‘Choisir’
* Poser un bouton de commande et entrer le code suivant :
<sourcesyntaxhighlight lang="vb">
Private Sub CommandButton1_Click()
Label1.caption = ComboBox1.Value
End Sub
</syntaxhighlight>
</source>
 
* Enfin, exécuter le programme pour s’assurer de son bon fonctionnement
Ligne 340 :
'''''Illustration :'''''
 
<sourcesyntaxhighlight lang="vb">
Private Sub RemplirCombo()
ComboBoxProjet.List = Array("Un", "Deux", "Trois", "Quatre")
End Sub
</syntaxhighlight>
</source>
 
C’est utile dans le sens où cela évite de devoir créer un tableau avec les données nécessaires dans un classeur excel. C'est donc pratique uniquement s’il n’y que quelques éléments connus d'avance à ajouter dans la liste de choix.
Ligne 498 :
Il faut créer un bouton dans la feuille (partie développeur → insérer → bouton - > cliquer sur la cellule choisie) et lui affecter la macro suivante.Une fois le bouton installé vous devez inscrire une instruction qui lance l’affichage d'un formulaire en appelant par son nom :
 
<sourcesyntaxhighlight lang="vb">
Private Sub CommandButtonformulaire_Click()
UserFormprojet.Show
End Sub
</syntaxhighlight>
</source>
 
Cette instruction lance l’affichage du formulaire en commençant par la macro UserFormprojet.Show. Si Excel vous affiche un message d'erreur à ce stade, lancez votre formulaire en mode pas à pas : mettez vous dans l'éditeur VBA cliquez dans le formulaire et appuyez sur la touche F8 de façon répétée. Le code défile et vous verrez où se situe votre erreur.
Ligne 550 :
* Faire un double-clic sur la première (pour afficher le code) et taper le code suivant :
 
<sourcesyntaxhighlight lang="vb">
Private Sub TextBox1_Change()
[A1] = UserForm1.TextBox1
End Sub
</syntaxhighlight>
</source>
 
Ceci affiche dans la cellule A1 le texte tapé de la zone de texte 1 (TextBox1)
Ligne 560 :
* Idem pour la deuxième mais avec ce code ci ⇒ http://bdiemert.free.fr/wikiversity/VBA/FRMNomPrenom.jpg
 
<sourcesyntaxhighlight lang="vb">
Private Sub TextBox2_Change()
[B1] = UserForm1.TextBox2
End Sub
</syntaxhighlight>
</source>
 
** <code>Change()</code> est un des évènements prédéfinis qui surviennent lors des manipulations de zone de texte, comme les suivants
Ligne 576 :
Maintenant nous allons concaténer le nom et le prénom dans la cellule C1. Pour cela, nous allons créer un bouton, et rentrer dans la propriété "Caption", y écrire "Valider", puis dans la propriété ⇒ Apparence ⇒ (Name) le nommer : "Bt_Valider", Double-cliquer sur ce bouton et taper ce code :
 
<sourcesyntaxhighlight lang="vb">
Private Sub Bt_Valider_Click()
[C1] = UserForm1.TextBox1 & " " & UserForm1.TextBox2
End Sub
</syntaxhighlight>
</source>
 
Maintenant, nous allons afficher le formulaire, taper le nom dans la zone de texte 1 et le prénom dans la 2 puis cliquer sur le bouton « Valider » ⇒ http://bdiemert.free.fr/wikiversity/VBA/IDENomPrenomValider.jpg
Ligne 602 :
Double-cliquer sur la zone de liste (ComboBox) et rentrer ce code:
 
<sourcesyntaxhighlight lang="vb">
Private Sub ComboBox1_Change()
[C3] = UserForm1.ComboBox1
End Sub
</syntaxhighlight>
</source>
 
=== Utiliser un bouton Option ===
Ligne 614 :
* Double-cliquer sur le premier bouton (Fille) et entrer ce code:
 
<sourcesyntaxhighlight lang="vb">
Private Sub OptionButton1_Click()
If Controls("OptionButton1").Value = True Then
Ligne 620 :
End If
End Sub
</syntaxhighlight>
</source>
 
Ce qui écrira dans la cellule C4 "Vous êtes une fille" lorsque ce bouton sera coché
Ligne 626 :
* Double-cliquer sur le deuxième bouton (Garçon) et saisir le code :
 
<sourcesyntaxhighlight lang="vb">
Private Sub OptionButton2_Click()
If Controls("OptionButton2").Value = True Then
Ligne 632 :
End If
End Sub
</syntaxhighlight>
</source>
 
Cela écrira dans la cellule C4 "Vous êtes un garçon" lorsque ce bouton sera coché ⇒ ''''16{{e}} image'''' {{lien brisé|consulté le=2017-07-23|url=http://imageshack.com/a/img191/7605/nwl1.jpg}}
Ligne 645 :
# Programmer le bouton "Valider" via un double-clic et la saisie du code suivant :
 
<sourcesyntaxhighlight lang="vb">
Private Sub CommandButton1_Click()
If Controls("Textbox1") = "" Then
Ligne 653 :
[A1] = UserForm1.TextBox1
End Sub
</syntaxhighlight>
</source>
 
Tant qu'au moins une lettre du prénom ne sera pas saisie, le focus replacé sur la TextBox1, sinon le prénom s'affichera en A1 ⇒ ''''18{{e}} image'''' {{lien brisé|consulté le=2017-07-23|url=http://imageshack.com/a/img51/1829/2z3r.jpg}}
Ligne 670 :
'''Exercice :'''
 
<sourcesyntaxhighlight lang="vb">
Private Sub RangeBoitesDansCellules()
' se positionne sur la feuille suivi
Ligne 699 :
Next ligne
End Sub
</syntaxhighlight>
</source>
 
 
Ligne 717 :
'''Exercice :'''
 
<sourcesyntaxhighlight lang="vb">
Private Sub RangeProjetsDansCombo()
' se positionne sur la feuille projet
Ligne 728 :
Next projet
End Sub
</syntaxhighlight>
</source>
 
== Exercices ==
Ligne 736 :
Le code suivant initialise le formulaire en masquant et minimisant Excel, en réglant taille, hauteur, largeur et position
 
<sourcesyntaxhighlight lang="vb">
Sub monFormulaire_Initialize()
Excel.Application.Visible = False ' on peut masquer les feuilles de calculs
Ligne 745 :
Me.Left = Application.Left + Application.Width - Me.Width ' positionner le plus à droite possible
End Sub
</syntaxhighlight>
</source>
 
=== Exemple de code associé à un contrôle ===
Ligne 753 :
Le code suivant rend visible un bouton quand on coche une case, et le masque quand on la décoche
 
<sourcesyntaxhighlight lang="vb">
Sub maCasaCocher_Click()
If maCasaCocher.maCasaCocher= True Then
Ligne 763 :
End Sub
End Function
</syntaxhighlight>
</source>
=== Exemple de création d'un formulaire personnalisé ===
Ligne 883 :
Pour qu'un userform se lance automatiquement au démarrage, ajouter le code suivant dans une feuille :
 
<sourcesyntaxhighlight lang="vb">
Sub workbook_open()
MonFormulaire1.Show vbModeless
End Sub
</syntaxhighlight>
</source>
* On désigne donc le formulaire par son nom (MonFormulaire1 ci-dessus). Mais dans le code du formulaire, on peut utiliser ''Me'' à la place.
* Supprimer la mention ''vbModeless'' ci-dessus entraine l'impossibilité d'ouvrir d'autres fichiers Excel pendant l’utilisation du formulaire.
Ligne 893 :
Le code suivant initialise le userform qui le contient, en effet le nom de cette fonction est connu et la lance automatiquement au lancement :
 
<sourcesyntaxhighlight lang="vb">
Sub UserForm_Initialize()
Excel.Application.Visible = False ' on peut masquer les feuilles de calculs
Ligne 904 :
Me.Left = Application.Left + Application.Width - Me.Width ' le plus à droite possible
End Sub
</syntaxhighlight>
</source>
 
Ensuite, en mode création la boite à outil permet d'ajouter des objets dans le userform (boutons, champs...). Nommer ces objets dans leur propriété permet de le appeler ensuite :
 
<sourcesyntaxhighlight lang="vb">
MonFormulaire1.MonChamp1 = "Hello the world !"
</syntaxhighlight>
</source>
 
 
Ligne 988 :
 
Celle ci-dessous affiche un bouton quand on coche une case, et le masque quand on la décoche :
<sourcesyntaxhighlight lang="vb">
Sub MaCasaCoche_Click()
If Me.MaCasaCoche = True Then
Ligne 996 :
End If
End Sub
</syntaxhighlight>
</source>
 
== Inventaire des composantes d'un formulaire ==
Pour lister tous les objets que contient un formulaire :
<sourcesyntaxhighlight lang="vb">
Dim ctrl As MSForms.Control
For Each ctrl In Me.Controls
MsgBox ctrl.Name
Next
</syntaxhighlight>
</source>
 
== Compiler un exécutable ==