Extrait l'ISBN à partir d'une liste d'EAN

Sub Che_EAN_Get_ISBN()
REM Ouvre un fichier en ecriture et ecrit :
REM ISBN Tab EAN Tab PPN (tout est bon)
REM EAN Absent Tab EAN Tab 0 (rien trouve)
REM ISBN Absent Tab EAN Tab PPN (trouve EAN, mais sans 010)
	Dim oNet, sUsername, FSO
	Dim Chemin, MonFichier
	Set oNet=CreateObject("WScript.Network")
	sUsername=oNet.UserName
	Set oNet = Nothing
	Chemin = "c:\oclcpica\WinIBW30\Profiles\" & sUsername & "\Che_EAN_Get_ISBN.txt"
	Set FSO = CreateObject("Scripting.FileSystemObject")
	Chemin = FSO.GetAbsolutePathName(Chemin)
	Set MonFichier = FSO.OpenTextFile(Chemin,2,True)
	Dim PPN
	Dim motif
	motif = "(\$[aAz](.*?)\$|\$[aAz](.*?)$)"
	Dim LesEAN, DerISBN
	LesEAN = Array("9782841176656","9782240032072","9782866374181","9782866227395","9782866192822","9782866333263","9782866325527","9782240012968","9782240013408","9782866333980","9782866334123","9782866227357","9782866227708","9782240008190","9782866252281","9782866294021","9782240022103","9782866352004","9782240022035","9782865653539","9782240008688","9782866227807","9782866294106","9782240013118","9782843501999","9782866185169","9782866293819","9782866227968","9782240017512","9782240026309","9782240025906","9782840931782","9782240008695","9782240015969","9782240022080","9782866227982","9782866234751","9782869181700","9782866216375","9782913090774","9782866374273","3133091086084","9782218946165","9782240016133","9782747026659","9782747027540","9782865653195","978286632556","9782840931058")
	For Each EAN In LesEAN
		Application.ActiveWindow.Command "che num " & EAN
		Rem Si l'EAN n'est pas dans le Sudoc, note l'EAN dans le fichier
		If Not Application.ActiveWindow.Messages.Count = 0 Then
			MonFichier.WriteLine "Absent" & vbTab & EAN & vbTab & "0"
		Else
			Application.ActiveWindow.Command "mod", False
			PPN = Application.ActiveWindow.Variable("P3GPP")
			Dim TrouveISBN
			TrouveISBN = Application.ActiveWindow.Title.FindTag("010", 0, False, False)
			Rem Si l'ISBN n'est pas dans la notice, note EAN et PPN dans le fichier
			If Len(TrouveISBN) = 0 Then
				MonFichier.WriteLine "ISBN Absent" & vbTab & EAN & vbTab & PPN
			Else
				DerISBN = ChercheRegExp(motif, TrouveISBN)
				MonFichier.WriteLine DerISBN & vbTab & EAN & vbTab & PPN
			End If
			REM Ferme la fenetre
			Application.activeWindow.simulateIBWKey "FE"
		End If
		TrouveISBN = Null
	Next
	MsgBox "Resultat dans : Che_EAN_Get_ISBN.txt"
End Sub

Function ChercheRegExp(LeMotif, LaChaine)
  Dim regEx, oMatch, oMatches, Reponse
	Set regEx = New RegExp
	regEx.Pattern = LeMotif
	regEx.IgnoreCase = True
	regEx.Global = True
	Set oMatches = regEx.Execute(LaChaine)
	If oMatches.Count = 0 Then
		Reponse = "Rien trouvé."
	Else
		For Each oMatch in oMatches
			If Len(oMatch.SubMatches(1)) > 0 Then
				Reponse = oMatch.SubMatches(1)
			Else
				Reponse = oMatch.SubMatches(2)
			End If
		Next
	End If
	ChercheRegExp = Reponse
End Function

On part d'une liste d'EAN que l'on met dans un tableau.
Pour chaque EAN, on lance une requête che num EAN
Si on trouve l'EAN, on ouvre la notice et on cherche le champ 010 (FindTag)
La fonction FindTag renvoie une chaîne : on teste la chaîne renvoyée avec Len()
Si 010 est trouvé, on lui passe une expression régulière : (\$[aAz](.*?)\$|\$[aAz](.*?)$)
(\$[aAz](.*?)\$|\$[aAz](.*?)$) : soit \$[aAz](.*?)\$ soit \$[aAz](.*?)$
\$[aAz](.*?)\$ : la chaîne commence et finit par le signe $ ; la chaîne commence par $a, $A ou $z
\$[aAz](.*?)$) : sinon, la chaîne commence par $a, $A ou $z, mais va jusqu'à la fin de la ligne.
Chaque groupe de parenthèse est un élément de SubMatches : l'ISBN est SubMatches (1) dans le cas où il est entouré de $, SubMatches (2) dans le cas où il va jusqu'à la fin de la ligne.