Objet CurrentSelection

Bonjour,
Sub DerniereLigneNonVide

     Dim Curseur, Cellule, MaFeuille, MonDocument As Object
     Dim MaSelection As Object

     MonDocument = ThisComponent
     MaFeuille = ThisComponent.CurrentController.ActiveSheet
     MaSelection = MonDocument.*CurrentSelection*
     Curseur = MaFeuille.createCursorByRange(MaSelection)
     Curseur.gotoEndOfUsedArea( False )

     Cellule = MaFeuille.GetCellByPosition(Curseur.RangeAddress.EndColumn, Curseur.RangeAddress.EndRow + 1)
     Cellule.setString("VIDE")
     MonDocument.CurrentController.Select(Cellule)
     MsgBox "RAZ du contenu de la cellule"
     Cellule.setString("")

End Sub

Dans cette petite macro je positionne le curseur sur la dernière cellule non vide à partir de la sélection de la première cellule de la zone concernée.
Seulement CurrentSelection, ce qui est normal, se positionne dans la colonne la plus à droite lorsqu'il y a des cellules adjacentes non vides.
Existe-t-il une procédure pour faire en sorte que le curseur reste toujours dans la colonne concernée par la sélection.
Merci de vos bons soins.
Michel B.

Si j'ai bien compris,

C'est là que se trouve l'erreur

Cellule = MaFeuille.GetCellByPosition(Curseur.RangeAddress.*EndColumn*, Curseur.RangeAddress.EndRow + 1)

Cordialement
Mr Sandy-Pascal Andriant

Bonjour

algol.formations wrote

Dans cette petite macro je positionne le curseur sur la dernière cellule
non vide à partir de la sélection de la première cellule de la zone
concernée.
Seulement CurrentSelection, ce qui est normal, se positionne dans la
colonne la plus à droite lorsqu'il y a des cellules adjacentes non vides.
Existe-t-il une procédure pour faire en sorte que le curseur reste
toujours dans la colonne concernée par la sélection.

Tu peux t'inspirer du dernier exemple de cette page du wiki:
https://wiki.documentfoundation.org/Macros/Calc/001/fr

Dans cet exemple la plage est sélectionnée. On peut l'adapter pour
sélectionner la cellule suivante (comme tu ne le faisais pas je n'ai
pas ajouté les contrôles préalables sur le contenu de la sélection
courante au lancement) :

option explicit

sub LibOZoneUtiliseeFormule

dim oClasseur as Object, oFeuille as Object, oPlage as Object, oSelection as
object
dim oCherche as Object, oResult as Object

oClasseur = thisComponent
oFeuille = oClasseur.CurrentController.ActiveSheet
oSelection = oClasseur.CurrentSelection

with oSelection.cellAddress
  oPlage = oFeuille.getCellRangeByPosition(.column, .row, .column, 10000)
end with

oCherche = oPlage.createSearchDescriptor

' Recherche:
' .tout caractère
' .expression régulière coché
' .dans les valeurs (et non les formules et commentaires)
with oCherche
        .SearchString = "."
        .SearchRegularExpression = true
        .SearchType = 1
end with

oResult = oPlage.findAll(oCherche)

if isnull(oResult) then
        msgbox "rien à sélectionner"
else
' il peut y avoir plusieurs plages de résultats si cellules vides
' dans la colonne : on prend la plus élevée
  with oResult.RangeAddresses(ubound(oResult.RangeAddresses))
    oPlage = oFeuille.getCellByPosition(.EndColumn, .Endrow + 1)
  end with
' On sélectionne la plage concernée
        thiscomponent.currentController.select(oPlage)
end if

end sub

Merci à tous mais l'automatisation que je veux exécuter en LoBasic est l'équivalent d'une macro enregistrée :

1. je me positionne dans la première cellule x de la zone x à y
2. j'effectue un ctrl + pointeur bas
3. qui me positionne sur la cellule suivante (première cellule
    vide de la zone x à y)

Bien évidemment (c'est là la demande) la référence de la première cellule de la zone considérée doit être variable.
Cordialement
Ci-joint le classeur complet
http://cjoint.com/?DFppQrQEfRN
Michel B.

Bonjour

algol.formations wrote

Bien évidemment (c'est là la demande) la référence de la première
cellule de la zone considérée doit être variable.

Je me demande si tu as lu et testé ce que je te propose ?
Ou quelque chose m'échappe...

Cordialement
Pierre-Yves

Bonjour
J'ai testé ton code, le curseur est bien positionné sur la cellule concernée (les index colonne - ligne sont sélectionnés) mais elle n'est pas activée.
A+
Michel B.

Bonjour

Michel Blanchard wrote

J'ai testé ton code, le curseur est bien positionné sur la cellule
concernée (les index colonne - ligne sont sélectionnés) mais elle n'est
pas activée.

Tu as testé depuis l'EDI ou depuis le classeur ?

Cordialement
Pierre-Yves

Effectivement, autant pour moi mais j'ai des difficultés à interpréter l'énumération des propriétés ou méthodes dans la boucle with.
Pourrais-tu les expliciter une à une parce que je dois être en capacité d'expliquer cette partie du code.
Merci pour ta patience
Cordialement
Michel B.

Bonjour

algol.formations wrote

Effectivement, autant pour moi mais j'ai des difficultés à interpréter
l'énumération des propriétés ou méthodes dans la boucle with.
Pourrais-tu les expliciter une à une parce que je dois être en capacité
d'expliquer cette partie du code.

Ok...

with ne fait pas une boucle. C'est une intruction qui évide de répéter
la variable sur laquelle on travaille.

Je suppose que les instructions posant problème sont les dernières.
Elles sont utiles si la colonne comprend plusieurs plages (si il y a
des "trous", des cellules non remplies). Dans ce cas la recherche
renvoie plusieurs plages. Le résultat de la recherche est un tableau.
Le code fourni précédemment faisait l'hypothèse qu'on recherche la
dernière cellule vide (le numéro de ligne le plus grand).
Si on veut sélectionner la première cellule vide il faut utiliser la
première
plage retournée. J'ai ajouté cela en commentaire dans l'exemple joint
(tester en colonne C)

TrouverVideColonne.ods
<http://nabble.documentfoundation.org/file/n4112778/TrouverVideColonne.ods>

Cordialement
Pierre-Yves