équivalent de TARGET de VBA en macro libre office

Bonjour,

j’ai il y a quelques années développé un petit script VBA sur excel.
Depuis, je n’utilise plus que libre office. Le fichier enregistré sous excel est lu et fonctionne sous libre office mais quand je l’enregistre (format xlsm ou ods), le nouveau fichier ne fonctionne plus.
Je souhaiterai écrire à nouveau mon script mais dans un macro au standard libre office (ou réussir à le faire fonctionner après un enregistrement)

Mon script consiste à remplir automatiquement un certain nombre de cellules (target.offset() = ) à partir d’une saisie dans un cellule (if target.value = )

Quelqu’un aurait t’il une méthode équivalente en libre office ?

Je mets en copie mon script VBA ; je n’attends pas une traduction mais juste des pistes.

Merci
PS1 : je ne suis pas un développeur, je me débrouille juste un peu. J’avais réalisé le script en furetant sur les forums sans avoir tout compris à ce que je faisais (notamment Application.EnableEvents) mais ça marchait

PS2 : script VBA

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Tablo
Dim i As Long
 

If Target.Cells.Count > 1 Then Exit Sub
If Target.Column <> 10 Or Target.Row < 10 Or Target.Row > 24 Then Exit Sub

Tablo = Sheets("liste adhérents").Range("A2:E201")
 
For i = LBound(Tablo, 1) To UBound(Tablo, 1)

    If Target.Value = Tablo(i, 2) Then

        Application.EnableEvents = False

        Target.Offset(0, -8).Value = Tablo(i, 2)

        Target.Offset(0, -7).Value = Tablo(i, 1)

        Target.Offset(0, -6).Value = Tablo(i, 4)

        Target.Offset(0, -5).Value = Tablo(i, 3)

        Application.EnableEvents = True

        Exit For

    End If

Next i

End Sub

Bonjour @Bertrand_M

Je ne pratique plus VBA depuis une vingtaine d’années… De ce que je comprends ton script :

  • est déclenché sur modification de la feuille
  • si le délencheur est une cellule modifiée (i.e. pas une plage)
  • si la cellule modifiée fait partie de la plage K11:K25
  • si la cellule modifiée est égale à une valeur de la colonne B de la plage liste adhérents.A2:E201
  • on met à jour la plage C:F de la même ligne avec les données trouvées dans la plage adhérents.

Si c’est bien cela, la gestion des événements est différente dans LibreOffice. Ce n’est pas en fonction du nom de la macro (Worksheet_Change en VBA). On peut associer n’importe quelle macro via clic droit sur l’onglet puis Événements de la feuilleContenu modifié.

Dans l’exemple joint queryIntersection.ods le déclenchement est associé à la feuille Feuille1. J’ai coloré l’arrière-plan de K11:K25 pour mieux visualiser et faciliter le test.

La macro suivante est lancée :

Option VBASupport 1
option explicit

Sub PysOnChange(oEvt)

dim oPlage as object, oResult as object,  oSheet as object, oCell as object
dim Tablo as variant
dim lRow as long, lCol as Long, i as long
   
if oEvt.supportsService("com.sun.star.sheet.SheetCell") then
	oPlage = oEvt.spreadSheet.getCellRangeByname("K11:K25")
	oResult = oEvt.queryIntersection(oPlage.RangeAddress)
	If oResult.RangeAddressesAsString <> "" Then 
		oSheet = thiscomponent.currentController.ActiveSheet
		lCol = oEvt.getCellAddress.column
		lRow = oEvt.getCellAddress.row
		Tablo = Sheets("liste adhérents").Range("A2:E201")		
		For i = LBound(Tablo, 1) To UBound(Tablo, 1)		
			If oEvt.formula = Tablo(i, 2) Then
				oCell = oSheet.getCellByPosition(lCol -8, lRow)
				oCell.formula = Tablo(i, 2)
				oCell =oSheet.getCellByPosition(lCol -7, lRow)
				oCell.formula = Tablo(i, 1)
				oCell =oSheet.getCellByPosition(lCol -6, lRow)
				oCell.formula = Tablo(i, 4)
				oCell = oSheet.getCellByPosition(lCol -5, lRow)
				oCell.formula = Tablo(i, 3)
			    Exit For		
			End If		
		Next i		   	
	end if
end if
    
End Sub

Pour info. tout ceci pourrait être réalisé par des formules (sans macro).

Cordialement

Merci beaucoup, je ne m’attendais pas à avoir la traduction complète en LO. C’est très sympa.
Tu as bien compris la manœuvre et ça marche. Je vais essayer de comprendre la syntaxe.

Si je n’ai pas traité ce problème par des formules, c’est que la zone à remplir doit pouvoir aussi être complétée de manière manuelle et comme la feuille est aussi manipulée par des personnes qui ne maîtrisent que très peu le tableur, je ne voulais pas de formules qui auraient pu être écrasées dans des cellules que je ne voulais pas verrouillées non plus.

Merci,

@Bertrand_M

Merci pour le “retour”. Pour info. l’essentiel des ressources pour apprendre est regroupé sur la page Macros de notre wiki.

Cordialement