Corriges toutes les lignes acShape(NbShape) = shTmp.Name par acShape(nNbShape) = shTmp.Name il y a des chances que cela corriges le problème si tu initialises X = 4 avant le redimensionnemment de acShape.
Je pense aussi que msoSegment n'existe pas (c'est msoSegmentLine) mais comme msoSgement n'est pas défini, il vaut zéro ce qui, là, tombe bien car c'est justement la valeur de msSegmentLine ...
PS : Perso et ça n'engage que moi , j'aime bien l'option "Option Explicit" car elle évite ce genre d'erreur