Macros-commandes VBA/Exercices/Création de formulaire personnalisé
Création d'un formulaire personnalisé
modifierLe but ici est de pouvoir créer un formulaire personnalisé
Exemple
Enoncé : vous êtes chef de projet , directeur projet, contrôleur de gestion, ou vous avez simplement envie de découvrir une application simple sous VBA vous permettant de gerer le traitement de données, ne cherchez plus, vous avez trouvez ce qu’il vous fallait. Vous disposez d'une base de données simple (qui pourra être complexifiée par la suite) composée des informations suivantes :
- Le code projet
- Le nom du projet et le nom des acteurs travaillant dessus
- Le nom du directeur de projet
- Les 12 Mois de l'année
Vous souhaiteriez :
- Affecter à chaque acteur et pour chaque projet le nombre d'heures que ce dernier a travaillé sur le projet
- Que les noms des acteurs soient dynamiques en fonction du projet sur lequel la saisie est effectuée
Solution
Public numeroDeProjet As Integer
Private Sub ComboBoxChoixProjet_AfterUpdate()
Application.Visible = True
i = numeroDeProjet
lign = 3 + (i * 8)
UserFormprojet.LabelActeur1 = Sheets("Tb suivi Projets + MCO + Act").Cells(lign, 2)
lign = lign + 1
UserFormprojet.LabelActeur2 = Sheets("Tb suivi Projets + MCO + Act").Cells(lign, 2)
lign = lign + 1
UserFormprojet.LabelActeur3 = Sheets("Tb suivi Projets + MCO + Act").Cells(lign, 2)
lign = lign + 1
UserFormprojet.LabelActeur4 = Sheets("Tb suivi Projets + MCO + Act").Cells(lign, 2)
lign = lign + 1
UserFormprojet.LabelActeur5 = Sheets("Tb suivi Projets + MCO + Act").Cells(lign, 2)
lign = lign + 1
UserFormprojet.LabelActeur6 = Sheets("Tb suivi Projets + MCO + Act").Cells(lign, 2)
End Sub
'Autre solution pour remplir le noms des acteurs en fonction du projet saisie dans la combo
Private Sub remplirLabelsNoms()
' se positionne sur la feuille suivi
Set f = Sheets("Tb suivi Projets + MCO + Act")
' teste l’ordre du projet sélectionné
If numeroDeProjet >= 0 Then
'recherche la ligne ou on trouve le premier acteur du projet
ligne = (numeroDeProjet * 8) + 3
' la colonne elle est égale à 2
colonne = 2
' range les noms des employés dans les bonnes étiquettes (labels) en changeant (incrémentant la ligne de recherche)
For rang = 1 To 6
Controls("LabelActeur" & rang).Caption = f.Cells(ligne, colonne)
ligne = ligne + 1
Next rang
End If
End Sub
Private Sub ComboBoxChoixProjet_Change()
' se positionne sur la feuille suivi
Set f = Sheets("Tb suivi Projets + MCO + Act")
' récupère le numéro d'ordre du projet
numeroDeProjet = ComboBoxChoixProjet.ListIndex ' attention la numérotation commence à 0
End Sub
Private Sub CommandButtonQuitter_Click()
' se positionne sur la feuille suivi
Set f = Sheets("Tb suivi Projets + MCO + Act")
'Bouton de commande quitter, qui décharge le formulaire quand on clique
Unload Me
End Sub
Sub CommandEnregistrer_Click()
' se positionne sur la feuille suivi
Set f = Sheets("Tb suivi Projets + MCO + Act")
' teste l’ordre du projet sélectionné
If numeroDeProjet >= 0 Then
'initialise les lignes de début et de fin
'en fonction de l’ordre du projet dans le combo
'ligned = 3 puis 11 puis 19 puis 27 ...
'lignef = 8 puis 16 puis 24 puis 32
ligned = (numeroDeProjet * 8) + 3
lignef = ligned + 5
End If
' initialiser les box
boite = 0
' boucle sur les lignes de début à fin
For ligne = ligned To lignef
' boucle sur les colonnes C à N
For colonne = 3 To 14
' change de textbox à chaque tour
boite = boite + 1
' range dans la cellule pointée par la colonne et la ligne
' la valeur de la boite de texte pointée par le numéro de box
f.Cells(ligne, colonne) = Me.Controls("TextBox" & boite).Value
' va à la colonne suivante
Next colonne
' va à la ligne suivante
Next ligne
End Sub
Private Sub UserForm_Initialize()
' se positionne sur la feuille projet
Set f = Sheets("Projets")
'initialise les variables de projets
numeroDeProjet = -1
'Alimentation de la combobox avec le nom des différents projets
For projet = 2 To 4
ComboBoxChoixProjet.AddItem f.Cells(projet, 1)
Next projet
' se positionne sur la feuille suivi
Set f = Sheets("Tb suivi Projets + MCO + Act")
End Sub