Modifier une localisation dans un lot de notices

Sub RemplaceLocalisation()
REM Il faut d'abord afficher un lot de notices
	Dim NbreExemplaires, Compteur
	Dim Total, Chaine, Localisation, NouvelleChaine, PositionRBC, PositionDollar_d, PositionDollar_a, Ligne, LigneTemp
	Const AncienFonds = "$dSalle Europe : Revues"
	Const NouveauFonds = "$dSalle Europe : Périodiques"
	Const RBC = "831372101"
REM Total = Nombre de notices dans le lot
	Total = Application.ActiveWindow.Variable("P3GSZ")
	For element = 1 To Total
		Application.ActiveWindow.Command "aff " & element, False
		Application.ActiveWindow.Command "mod", False
REM Compte le nombre d'exemplaires dans la notice
		NbreExemplaires = 0
		Do While Application.ActiveWindow.Title.FindTag("A97", NbreExemplaires, True, False, False) <> ""
			NbreExemplaires = NbreExemplaires + 1
		Loop
REM Je regarde chaque exemplaire
		For Compteur = 0 To (NbreExemplaires - 1)
			Chaine = Application.ActiveWindow.Title.FindTag("930", Compteur , True, True, False)
			Ligne = Application.ActiveWindow.Title.CurrentLineNumber
REM Je vérifie que l'exemplaire est dans la bonne bibliothèque
			PositionRBC = InStr(Chaine, RBC)
			If PositionRBC <> 0 Then
				PositionDollar_d = InStr(Chaine, "$d")
				PositionDollar_a = InStr(Chaine, "$a")
				Localisation = Mid(Chaine, PositionDollar_d, (PositionDollar_a - PositionDollar_d))
				If Localisation = AncienFonds Then
					NouvelleChaine = Replace(Chaine, Localisation, NouveauFonds)
					Application.ActiveWindow.Title.StartOfBuffer
					Application.ActiveWindow.Title.LineDown(Ligne + 1)
					Application.ActiveWindow.Title.DeleteToEndOfLine()			
					Application.ActiveWindow.Title.InsertText(NouvelleChaine)
				Else
					MsgBox("Le PPN " & Application.ActiveWindow.Variable("P3GPP") & " n'est pas dans l'ancien fonds")
				End If
			End If
		Next
		Application.ActiveWindow.SimulateIBWKey("FR")
	Next
End Sub

Syntaxe de FindTag : FindTag("champ", Nième, InclutEtiquette, YVa, removeIgnoredText)

findtag (20K)

Nième : à partir de 0, je cherche la nième occurrence de l'étiquette de champ
InclutEtiquette : True/False. Si True, la fonction inclut l'étiquette de champ dans la chaîne trouvée. Ici : True, la variable Chaine contient l'étiquette du champ ("930").
YVa : True/False. Si True, la fonction sélectionne la ligne trouvée.
removeIgnoredText : ?

CurrentLineNumber : comme FindTag sélectionne la ligne trouvée, on peut récupérer le numéro de la ligne où se trouve le curseur.

LineDown(Ligne + 1) : est-ce un bug ? Quand le curseur est tout en haut (StartOfBuffer), c'est comme s'il était à la ligne 0. Par exemple, si on fait LineDown(3) on se retrouve à la ligne 2 !
En revanche, si le curseur n'est pas en haut, la fonction marche comme attendu : par exemple, étant ligne 3, si on fait LineDown(3), on se retrouve bien ligne 6.