IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenOffice & LibreOffice Discussion :

Saisie de données par formulaire à la première ligne disponible


Sujet :

OpenOffice & LibreOffice

  1. #1
    Candidat au Club Avatar de Sid-Le-Bricoleur
    Homme Profil pro
    En recherche de poste de coordinateur de projets
    Inscrit en
    Avril 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : En recherche de poste de coordinateur de projets

    Informations forums :
    Inscription : Avril 2021
    Messages : 3
    Par défaut Saisie de données par formulaire à la première ligne disponible
    Bonjour,

    J'avais une macro sur VBA qui me permettait facilement de saisir de nouvelles données dès la première ligne vide d'une feuille.
    Le problème c'est que je suis sur LibreOffice aujourd'hui et que je n'ai pas pu convertir toutes les fonctionnalités de ma macro.

    Je suis donc aller récupérer la fonctionnalité ici, ici et .
    Mais aucun d'entre eux recopié intégralement ne fonctionnait pour mon cas. Je me suis surtout inspiré du premier mais la fonction .AbsoluteName ne fonctionnait pas dans mon script.

    Sur ce message du forum, je n'ai pas compris le "+2" à oCurseur.RangeAddress.EndRow+2.

    Bref, grosso modo, voilà mon script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Sub Enregistrement_Click()
        Dim MonDoc As Object
        Dim MaFeuille As Object
        Dim LigneVide As Long
        Dim ID As Long
        Dim NomMagasin_string As String
        Dim NomMagasin_upper As String
        Dim oCurseur As Object 'curseur sur la cellule
        Dim oPlage As Object 'la plage utilisée
     
        MonDoc = ThisComponent
        MaFeuille = MonDoc.Sheets.getByName("FEUILLE")
        ActivationInterface.getModel
        NomMagasin_string = ActivationInterface.getControl("NomMagasin").Text
     
        If MsgBox("Confirmez-vous l'ajout de cet article ?", 1, "Demande de confirmation d'ajout") = 1 Then
     
            'Determiner LigneVide (dernière ligne disponible)
            oCurseur = MaFeuille.createCursor
            oCurseur.gotoEndOfUsedArea(True)
            LigneVide = oCurseur.getRangeAddress.EndRow
     
            ' Add ID number (incremental)
            ID = MaFeuille.getCellByPosition(0, LigneVide + 1).Value
            ID = LigneVide 
            ' Transfer company information
            If NomMagasin_string <> "" Then
                NomMagasin_upper = UCase(NomMagasin_string)
                MaFeuille.getCellByPosition(1, LigneVide + 1).String = Trim(NomMagasin_upper)
            End If
        End If
    End Sub
    Mon script actuel fonctionne mais présente deux gros problèmes :
    1. La macro parvient à insérer les données à la suite lors de chaque enregistrement de données mais insère celles-ci 2 lignes après la dernière ligne complétée (en d'autres termes, ma macro remplit les données après un espace de 2 lignes), comme illustré ci-dessous :
      Nom : espace.PNG
Affichages : 49
Taille : 2,9 Ko
    2. Ma variable ID reprend la valeur emptyRow car mon script actuel manque d'une variable annexe qui identifie la valeur précédente de ID. Sauf que je n'ai pas trouvé de solution fonctionnelle à ce stade.

    Qu'est-ce que je dois changer dans mon script pour régler ces deux soucis ?


    J'ai un autre souci concernant la boîte de dialogue qui intègre ces données dans ma feuille :
    elle comporte deux zones combinées de formulaires (pas de liens directs avec mon script) sauf que le texte écrit dans l'un est recopié automatiquement dans l'autre, pourquoi ??
    Nom : doublon.PNG
Affichages : 43
Taille : 2,1 Ko
    Quel serait le bouton de formulaire adapté pour écrire du texte et sélectionner une valeur existante dans une liste sans qu'elle soit recopiée dans l'autre zone de texte ?


    Aussi, quelle est la différence entre gotoEndOfUsedArea(False) et gotoEndOfUsedArea(True) ? J'ai beau lire la définition ici, je n'ai toujours pas compris.

    D'avance merci pour vos lumières
    (aucune idée pourquoi il y a un "Â" qui apparaît sur certaines lignes vides du code)

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 287
    Par défaut Libroffice reprende les macros VBA telle quelle
    Normalement Libroffice peut reprendre les macros vbas car le nom des objets est à peu près le même

  3. #3
    Candidat au Club Avatar de Sid-Le-Bricoleur
    Homme Profil pro
    En recherche de poste de coordinateur de projets
    Inscrit en
    Avril 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : En recherche de poste de coordinateur de projets

    Informations forums :
    Inscription : Avril 2021
    Messages : 3
    Par défaut
    Citation Envoyé par mach1974 Voir le message
    Normalement Libroffice peut reprendre les macros vbas car le nom des objets est à peu près le même
    Oui je n'ai pas eu à changer grand chose, je me suis même servi de Blackbox pour convertir mon VBA en Basic

    Mais la fonction VBA que j'avais qui permet de trouver la variable LigneVide ici ne fonctionne pas tel quel : je l'ai remplacé par ce qui se rapproche le plus (et ce qui se trouve dans les différentes sources mentionnées) : l'utilisation de la propriété .EndRow.

    Et aujourd'hui, ma macro trouve LigneVide mais présente les bugs évoqués.

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 287
    Par défaut XLDOWN
    Pour la propriété Endrow, il faut ajouter la direction

    xlDown
    xlToLeft
    xlToRight
    xlUp

  5. #5
    Candidat au Club Avatar de Sid-Le-Bricoleur
    Homme Profil pro
    En recherche de poste de coordinateur de projets
    Inscrit en
    Avril 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : En recherche de poste de coordinateur de projets

    Informations forums :
    Inscription : Avril 2021
    Messages : 3
    Par défaut
    Citation Envoyé par mach1974 Voir le message
    Pour la propriété Endrow, il faut ajouter la direction

    xlDown
    xlToLeft
    xlToRight
    xlUp
    La propriété EndRow comme tu évoques .End(xlUp).Row ne fonctionne pas sous BASIC (ou alors je n'ai pas trouvé/compris comment faire).
    C'est justement ce que j'ai utilisé sous VBA et qui tient en une ligne.

    Qqn d'autre a eu un soucis similaire mais la réponse proposée est assez conséquente : Converting a simple Excel VBA macro to LibreOffice Calc BASIC macro.

    Une idée ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/07/2009, 12h27
  2. [Excel] Intégrer au fichier Excel des données saisies par formulaire
    Par drogba72 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 21/05/2008, 12h13
  3. Modifier des donnés sql par formulaire (avec variables)
    Par expression dans le forum Langage
    Réponses: 2
    Dernier message: 29/03/2008, 10h35
  4. [formulaire]1 seule ligne par page
    Par 4rn0_o dans le forum IHM
    Réponses: 3
    Dernier message: 29/08/2007, 14h49
  5. Réponses: 2
    Dernier message: 25/07/2007, 12h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo