Erreur d'exécution basic dans une macro

Bonjour,

Je souhaite exécuter une macro sous libre office calc, dont voici les codes ci-dessous. En revanche un message d’erreur apparaît : “Erreur d’exécution BASIC. Variable d’objet non définie.”
De plus quand je vérifie ma macro avec l’outil pas à pas, ça m’indique que l’erreur se situe à la deuxième ligne. (pourtant ma feuille se nomme bien Feuil1 dans mon fichier)

Quelqu’un aurait la solution ? Est-ce le code en lui même qui est faux/non adapté à LibreOffice ?

Sub filtre()
Feuil1.Activate
Feuil1.Range("A1,B1").Select
Selection.Copy
Sheets("Feuil2").Select
Range("A1:B1").PasteSpecial
Columns("A:A").EntireColumn.AutoFit
Columns("B:B").EntireColumn.AutoFit
Range("C4").Select
Sheets("Feuil1").Select
Application.CutCopyMode = False
Feuille1.Range("A3").Select
Sheets("Feuil2").Select
Sheets("Feuil1").Range("A1:B15").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("Feuil1").Range("H6:K7"), CopyToRange:=Sheets("Feuil2").Range("A1:B1"), Unique:=False
End Sub

Bonjour

Est-ce le code en lui même qui est faux/non adapté à LibreOffice ?

Oui, le basic LibreOffice n’est pas le VBA

[Ajout]

Ci-dessous ce que cela pourrait donner en basic LibreOffice.

  • copie de cellules et optimisation des tailles de colonne : en principe résultat identique
  • pour le filtre, ne disposant pas de tes données (critères) je montre comment filtrer la plage A1:B15 (feuille1) pour ne garder que ce qui commence par A en colonne A. Le résultat est copié en feuille2.A1 comme dans ta macro.

Ci-dessous le code:

sub filtrePys()

dim oClasseur as object, oFeuilleDep as object, oPlageDep as object
dim oFeuilleArr as object, oCellArr as object
dim oFiltre as object
dim oChampFiltre(0) As New com.sun.star.sheet.TableFilterField   

oClasseur = thisComponent
oFeuilleDep = oClasseur.Sheets.getByName("Feuil1")
oPlageDep = oFeuilleDep.getCellRangeByName("A1:B1")
oFeuilleArr = oClasseur.Sheets.getByName("Feuil2")
oCellArr = oFeuilleArr.getCellRangeByName("A1")

oFeuilleArr.copyrange(oCellArr.cellAddress, oPlageDep.rangeAddress)

oFeuilleArr.columns.getByName("A").OptimalWidth=true
oFeuilleArr.columns.getByName("B").OptimalWidth=true


oPlageDep =  oFeuilleDep.getCellRangeByName("A1:B15")
oFiltre = oPlageDep.createFilterDescriptor(true)

with oChampFiltre(0)
	.Field = 0
	.IsNumeric = false      	
	.Operator = com.sun.star.sheet.FilterOperator.EQUAL
	.StringValue = "a.*"  
end with	

with oFiltre						
	.UseRegularExpressions = true			
	.ContainsHeader = true						
	.CopyOutputData = true																		
	.OutputPosition = oFeuilleArr.getCellRangeByName("A1").CellAddress
	.setFilterFields(oChampFiltre())
end with

oPlageDep.filter(oFiltre)

end sub

Voir Filtrer.ods

[Ajout 29-06-19 07:30]

Voir nouvelle version avec les modifications demandées : Filtrer.ods

Cordialement

Bonjour, merci pour votre rapide retour. La macro fonctionne à présent et je vous en remercie encore.

Cependant mes critères seront des nombres. J’ai donc essayer de noter true à la place de false à la ligne IsNumeric et d’insérer un chiffre en critère mais cela ne fonctionne pas et je ne trouve pas la manip. De même est-il possible de rentrer dans StringValue une case correspondante dans le tableau ? J’ai essayé de noter “F1” dans la macro en mettant le critère “a.*” dans la case F1 mais en vain.

Désolé je suis novice en macro ! encore merci de votre aide !!! :slight_smile:

@leastu voir nouvelle version dans ma réponse…

Bonjour,
Merci beaucoup pour votre aide, ma macro fonctionne à merveille, j’ai même réussi à ajouter des critères supplémentaires ! Je vous remercie encore !