Instead of delaying between pulses, loop around the main loop() function as fast as possible constantly checking the time to see if we should pulse the motor.
This means that computations can occur in the loop (so long as they are reasonably fast).
To implement this, the micros() function can be used to get an unsigned long representing the microseconds ...
A minor issue that probably won't affect your result is that
Serial.println("ONE STEP CLIMB ON VERTCAL AXIS");
--> digitalWrite(9,LOW); // This line 'needs' adding
digitalWrite(7,HIGH); // Set Dir high for y
I can't see anything in the code that will prevent the motors running, OK it will take ~13 seconds to start moving, but it should move.
So - ...