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 là.
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 :
Mon script actuel fonctionne mais présente deux gros problèmes :
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
- 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 :
- 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 ??
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)
Partager