若干の補足をしておきます。
既におわかりのように、問題は、↓ここです。
4枚目の画像を読んだときに、
With ActiveSheet
.Shapes.AddPicture myDir & myFName, msoFalse, msoTrue, Selection.Left, Selection.Top, -1, -1
Set shp = ActiveSheet.Shapes(1)
と、一枚目のshpを使ってしまうからです。
AddPictureメソッドのヘルプを読むと、
戻り値はShapeオブジェクトであることがわかります。
Set shp = .Shapes.AddPicture(myDir & myFName, msoFalse, msoTrue, Selection.Left, Selection.Top, -1, -1)
とすれば、それが何枚目かなどという指定は不要です。
(戻り値を使う場合は、引数をカッコに入れないといけないことに注意(仕様です))
ここさえクリアーできれば、正しく動くものになるでしょう。
あとは、同じことの繰り返しは避けることを念頭において修正すればよいでしょう。
提示したコードを参考にしてください。
(補足1)
なお、順序としては、こう書くのが自然でした。
i = 8 '画像挿入開始行の初期指定
counter = 1
myFName = Dir(myDir & "*.JPG")
Do While myFName <> ""
Call myAddPicture(myDir, myFName, i, 2)
i = i + IIf(counter Mod 3 = 0, 25, 17)
counter = counter + 1
myFName = Dir
Loop
(補足2)
また、C列のファイル名も事前に消去しておいたほうがいいでしょうか。
ActiveSheet.DrawingObjects.Delete
Columns("C").ClearContents