J'ai récemment migré vers pclinuxos à partir de Windows et semble l'apprécier. Le seul problème auquel je suis confronté est que libreoffice, le tableur par défaut, n’est pas compatible avec les macros Excel. Ci-dessous le code vba que j'ai:
Option VBASupport
Sub DeleteToLeft()
Selection.SpecialCells(xlBlanks).Delete shift:=xlToLeft
End Sub
Function SinceLastWash()
Application.Volatile
WashCount = 0
WearCount = 0
CurrentRow = Application.ThisCell.Row
For i = 3 To 35
If Range(Cells(CurrentRow, i), Cells(CurrentRow, i)).Value = "a" Then
WearCount = WearCount + 1
End If
If Range(Cells(CurrentRow, i), Cells(CurrentRow, i)).Value = "q" Then
WashCount = WashCount + 1
WearCount = 0
End If
Next i
SinceLastWash = WearCount
End Function
Function testhis()
testhis = Application.ThisCell.Row
End Function
Existe-t-il un moyen de convertir ce code pour le rendre compatible avec libreoffice ou dois-je apprendre un tout nouveau langage comme le python? Apprendre à utiliser python ne poserait pas de problème, mais ne constituerait pas une solution à mon problème, car de nombreux fichiers liés au travail dans Excel contiennent beaucoup de code vba.
Je veux juste ajouter que la fonction SinceLastWash donne la valeur correcte dans certaines cellules où je l’utilise et dans d’autres donne une erreur, #NAME?
Merci
Vous devez traduire les parties manipulant le document pour utiliser l'API UNO. Malheureusement, cela peut être délicat en fonction de ce que fait votre macro. Les déclarations de base fonctionnent directement. La modification d'un document ne le fait généralement pas.
Range(Cells(CurrentRow, i), Cells(CurrentRow, i)).Value = "a"
La commande Cells renvoie une cellule spécifique basée sur une ligne et une colonne. Donc, vous avez besoin de la ligne actuelle. Voici un peu de folie pour obtenir la cellule active:
Sub RetrieveTheActiveCell()
Dim oOldSelection 'The original selection of cell ranges
Dim oRanges 'A blank range created by the document
Dim oActiveCell 'The current active cell
Dim oConv 'The cell address conversion service
Dim oDoc
oDoc = ThisComponent
REM store the current selection
oOldSelection = oDoc.CurrentSelection
REM Create an empty SheetCellRanges service and then select it.
REM This leaves ONLY the active cell selected.
oRanges = oDoc.createInstance("com.Sun.star.sheet.SheetCellRanges")
oDoc.CurrentController.Select(oRanges)
REM Get the active cell!
oActiveCell = oDoc.CurrentSelection
oConv = oDoc.createInstance("com.Sun.star.table.CellAddressConversion")
oConv.Address = oActiveCell.getCellAddress
Print oConv.UserInterfaceRepresentation
print oConv.PersistentRepresentation
REM Restore the old selection, but lose the previously active cell
oDoc.CurrentController.Select(oOldSelection)
End Sub
Lorsque vous avez la cellule active, vous obtenez l'adresse de la cellule, et à partir de cela, vous avez la ligne. Vous n'avez pas du tout besoin d'utiliser la plage, car vous ne vous préoccupez que d'une seule cellule. Vous obtenez donc la feuille active, puis une cellule particulière de la feuille.
Quelque chose comme ça: ThisComponent.getCurrentController (). GetActiveSheet (). GetCellByPosition (nCol, nRow) .getString () = "a"
Je n'ai pas envie de comprendre ce que cela fait
Selection.SpecialCells(xlBlanks).Delete shift:=xlToLeft
De Fichier d'aide en ligne de LibreOffice:
À quelques exceptions près, Microsoft Office et LibreOffice ne peuvent pas exécuter le même code de macro. Microsoft Office utilise le code VBA (Visual Basic pour Applications) et LibreOffice utilise le code Basic basé sur l'environnement API de LibreOffice (Application Program Interface). Bien que le langage de programmation soit le même, les objets et les méthodes sont différents.
Les versions les plus récentes de LibreOffice peuvent exécuter certains scripts Excel Visual Basic si vous activez cette fonctionnalité dans LibreOffice - Outils de préférences - Options - Charger/Enregistrer - Propriétés VBA.
En réalité, vous devrez probablement vous asseoir avec l'API LibreOffice et réécrire les fonctionnalités.
Le seul outil automatique que je connaisse est Tableur professionnel (notez que je n’ai aucune expérience personnelle ou professionnelle ni aucune affiliation avec le site).
Cela semble spécifique à OpenOffice mais je pense que cela fonctionne aussi avec LibreOffice.
En général cependant, vous feriez mieux de le faire vous-même, car l'outil est loin d'être parfait ...
Dans LibreOffice 4.4, le premier sous-programme ne fonctionnera pas du tout (je suppose que toutes les variables commençant par 'xl'. Les deux autres fonctionnent parfaitement si vous changez ThisCell en ActiveCell.
Plutôt que
Option VBASupport
J'utilise
Option VBASupport 1
Option Compatible
Selection.SpecialCells(xlBlanks).Delete shift:=xlToLeft
supprime les cellules vides si je ne me trompe pas