[Résolu][Calc] Collage special à la suite sur ligne vide
Publié : 09 sept. 2020 08:51
Bonjour à tous,
Après avoir parcouru les différents sujets, je ne parviens pas à trouver une solution à ma problématique.
Pourtant, cela doit être courant, je m'explique :
Le but est de copier des cellules définies d'une feuille de calcul, puis d'effectuer un collage spécial, sur une autre feuille, mais à partir de la première ligne vide.
Le première partie , j'y parviens à travers la macro suivante : (exemple)
La seconde partie, j'y parviens à travers la macro suivante : (exemple)
Cependant, après maintes tentatives, je ne réussis pas à associer les deux.
Si un utilisateur du forum pouvait m' apporter une solution, cela serait super sympa.
J'imagine que cela doit être sollicité régulièrement.
Merci beaucoup par avance,
Après avoir parcouru les différents sujets, je ne parviens pas à trouver une solution à ma problématique.
Pourtant, cela doit être courant, je m'explique :
Le but est de copier des cellules définies d'une feuille de calcul, puis d'effectuer un collage spécial, sur une autre feuille, mais à partir de la première ligne vide.
Le première partie , j'y parviens à travers la macro suivante : (exemple)
Code : Tout sélectionner
Sub CopierCollerEntreFeuilles()
Dim Args(),Opts()
' Classeur courant
Doc = ThisComponent
SheetCopy = Doc.Sheets().getByName("Feuille1")
' on copie la plage de cellules source
oRange = SheetCopy.getCellRangeByName("A1:A10")
da = oRange.getDataArray
' on choisit la feuille de destination
SheetPaste = Doc.Sheets().getByName("Feuille2")
' on colle la plage de cellules source dans la plage destination
oRange = SheetPaste.getCellRangeByName("C1:C10") 'la plage doit être de même taille que celle de la source
oRange.setDataArray(da)
End Sub
Code : Tout sélectionner
REM ***** BASIC *****
option explicit
Sub Main
dim oDoc as object, oFeuille as object, oCol as object
dim indexCol as long, indexFeuille as integer
dim indexLigne as long
indexFeuille = 0
oDoc = thisComponent
oFeuille = oDoc.sheets.getByIndex(indexFeuille)
oCol = oFeuille.getColumns.getByName("A")
indexCol = oCol.getRangeAddress.startColumn
indexLigne = acGetIndexLigneFin(indexFeuille, indexCol)
msgBox("Début de zone libre " & chr(13) _
& "en " & oCol.ColumnDescriptions(0) & " : " _
& "ligne " & indexLigne + 2, 64, "acGetIndexLigneFin ")
end sub
'************************************************************ 20/02/09
'**** Retourne l'index de la ligne
'**** de la dernière cellule non vide de la colonne indexCol
'*********************************************************************
function acGetIndexLigneFin(iFeuille as integer, iCol as long) as long
dim oDoc as object, oFeuille as object, oCol as object
dim dscCherche as object
dim oCell as object
dim oCellAdresse as object
dim ligneMaxi as long
dim ligneFin as long
ligneFin = -1 ' par défaut, retourne -1
oDoc = thisComponent
oFeuille = oDoc.sheets.getByIndex(iFeuille)
oCol = oFeuille.getColumns.getByIndex(iCol)
' Se positionner sur la dernière cellule de la colonne
ligneMaxi = oFeuille.rangeAddress.endRow
oCell = oFeuille.getCellByPosition(0,ligneMaxi)
oDoc.currentController.select(oCell)
' Effectuer une recherche vers le haut
dscCherche = oCol.createSearchDescriptor
with dscCherche
.SearchString = "."
.SearchBackwards = true
.SearchRegularExpression = true
end with
oCell = oCol.findFirst(dscCherche)
if (isNull(oCell) = false) then
' Cellule trouvée
oCellAdresse = oCell.cellAddress
ligneFin = oCellAdresse.row
oDoc.currentController.select(oCell)
end if
acGetIndexLigneFin = ligneFin
end function
Si un utilisateur du forum pouvait m' apporter une solution, cela serait super sympa.
J'imagine que cela doit être sollicité régulièrement.
Merci beaucoup par avance,