[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:

20210922 185615

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
Description de la macro

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.

image

Puis on active le bouton

image image image

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:

29macro.ods (13.21 Ko)

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.

Rechercher des sujets similaires à "calc creation formulaire"