[Calc] - Création formulaire
Bonjour,
Le tout premier tuto-astuces de l'histoire du forum sur Open Office Calc, cela mérite bien sa petite introduction
Comment crée un formulaire dans une boite de dialogue.
Démo:
Pour commencer,
Introduction:
Création de l'objet oDialogue qui contient la boite de dialogue
Dim oDialogue As Object
Cette objet va servir pour la suite du code.
Première macro:
Ouverture de la boite de dialogue (Boite1)
Sub Ouverture
oDialogue=CreateUnoDialog(DialogLibraries.Standard.Boite1)
oDialogue.execute()
End Sub
Deuxième macro:
Qui s'exécute lors du clic sur le bouton Envoyer
Sub envoyer
Dim c1 As String
Dim c2 As String
Dim c3 As String
Dim Doc As Object
Dim Sheet As Object
Dim Cell1 As Object
Dim Cell2 As Object
Dim Cell3 As Object
Dim Row As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Row = Sheet.getCellByPosition(3, 0)
If oDialogue.getControl("DateField1").Text="" Then
MsgBox(prompt:="Vous n'avez pas saisi la Date")
Else
If oDialogue.getControl("TextField1").Text="hh:mm" Then
MsgBox(prompt:="Vous n'avez pas saisi l'Heure")
Else
If oDialogue.getControl("ComboBox1").Text="" Then
MsgBox(prompt:="Vous n'avez pas saisi l'Activité")
Else
c1 = oDialogue.getControl("DateField1").Text
c2 = oDialogue.getControl("TextField1").Text
c3 = oDialogue.getControl("ComboBox1").Text
Cell1 = Sheet.getCellByPosition(0, Row.value)
Cell2 = Sheet.getCellByPosition(1, Row.value)
Cell3 = Sheet.getCellByPosition(2, Row.value)
Cell1.String = c1
Cell2.String = c2
Cell3.String = c3
oDialogue.endExecute()
End If
End If
End If
End Sub
La macro est divisé en 3 parties:
1) Initialisation des variables
2) Test si les champs sont vide ou pas
3) Insertion dans la feuille
1ère partie: Initialisation des variables
Dim c1 As String
Dim c2 As String
Dim c3 As String
Dim Doc As Object
Dim Sheet As Object
Dim Cell1 As Object
Dim Cell2 As Object
Dim Cell3 As Object
Dim Row As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Row = Sheet.getCellByPosition(3, 0)
On initialise les variables et on assigne une valeur à certaine.
2ème partie: Test si les champs sont vides ou pas
If oDialogue.getControl("DateField1").Text="" Then
MsgBox(prompt:="Vous n'avez pas saisi la Date")
Else
If oDialogue.getControl("TextField1").Text="hh:mm" Then
MsgBox(prompt:="Vous n'avez pas saisi l'Heure")
Else
If oDialogue.getControl("ComboBox1").Text="" Then
MsgBox(prompt:="Vous n'avez pas saisi l'Activité")
Else
'Contenu de la partie 3
End If
End If
End If
On vérifie que les trois champs ne sont pas vides. Puis on exécute le code la 3ème partie
3ème partie: Insertion dans la feuille
c1 = oDialogue.getControl("DateField1").Text
c2 = oDialogue.getControl("TextField1").Text
c3 = oDialogue.getControl("ComboBox1").Text
Cell1 = Sheet.getCellByPosition(0, Row.value)
Cell2 = Sheet.getCellByPosition(1, Row.value)
Cell3 = Sheet.getCellByPosition(2, Row.value)
Cell1.String = c1
Cell2.String = c2
Cell3.String = c3
oDialogue.endExecute()
Insertion dans la feuille des valeurs des champs du formulaire et fermeture de la boite de dialogue
Création de la boite de dialogue:
Dans l'outil adapté, insérer un champ date, un champ texte, une combobox et un bouton. Ensuite styliser comme vous le voulez.
Puis on active le bouton
Insertion de la formule qui permet de savoir quelle est le nombre de ligne:
=NBVAL(A2:A1000)+1
Le code complet
'=========================Code crée par ImoKa
Option Compatible
Dim oDialogue As Object 'Création variable de la boite de dialogue
Sub Ouverture 'Initialisation et exécution de la boite de dialogue
oDialogue=CreateUnoDialog(DialogLibraries.Standard.Boite1)
oDialogue.execute()
End Sub
Sub envoyer
'Déclaration des variables
Dim c1 As String
Dim c2 As String
Dim c3 As String
Dim Doc As Object
Dim Sheet As Object
Dim Cell1 As Object
Dim Cell2 As Object
Dim Cell3 As Object
Dim Row As Object
Doc = StarDesktop.CurrentComponent 'Classeur actif
Sheet = Doc.Sheets(0) 'Première feuille
Row = Sheet.getCellByPosition(3, 0) 'Cellule D1
'Test de vérification des données si elle sont correcte
If oDialogue.getControl("DateField1").Text="" Then
MsgBox(prompt:="Vous n'avez pas saisi la Date")
Else
If oDialogue.getControl("TextField1").Text="hh:mm" Then
MsgBox(prompt:="Vous n'avez pas saisi l'Heure")
Else
If oDialogue.getControl("ComboBox1").Text="" Then
MsgBox(prompt:="Vous n'avez pas saisi l'Activité")
Else 'Insertion dans la feuille
c1 = oDialogue.getControl("DateField1").Text
c2 = oDialogue.getControl("TextField1").Text
c3 = oDialogue.getControl("ComboBox1").Text
Cell1 = Sheet.getCellByPosition(0, Row.value)
Cell2 = Sheet.getCellByPosition(1, Row.value)
Cell3 = Sheet.getCellByPosition(2, Row.value)
Cell1.String = c1
Cell2.String = c2
Cell3.String = c3
oDialogue.endExecute() 'Fermeture de la boite de dialogue
End If
End If
End If
End Sub
Fichier:
Bonne Journée
PS: Attendez une minute après l'ouverture du fichier avant d'appuyer sur le bouton qui démarre la macro dans la feuille, sinon un message d'erreur apparaît. Si vous êtes impatient cliquez une 1ère fois sur le bouton, dites OK au message d'erreur et recliquez sur le bouton.