Strange issues with SPI

I am working on a project where I am using an I2C oled screen and an SPI shift register. I am coding with the makecode editor.
I had been trying to use both the I2C protocol (oled screen) and the spi at the same time (shift register) and was sort of expecting that this would not work. To my surprise it did on occasions actually work but it was unreliable. I have individually tested all parts of the circuit with short code and the circuit all functions separately. The oled works, the shift register counts. I have been sending a number to one microbit from the other using the radio send. For example when button a is pushed it sends a 1 and when button B is pressed it sends a number 2. When the other microbit receives the number it displays one or another message on the oled screen or displays a binary number on leds connected to the shift register.
Both of these arrangements work separately and at times both have worked together. So if button A was pressed the message “170” would be displayed as text on the oled and when button B was pressed it would be shown as a binary output on the leds connected to the shift register. However, there was some strange magic going on. This would only work if I had the usb cable connected to the microbit controlling the microbit connected to the circuit with the oled screen and shift register. If powered up only on battery the oled would work but not the shift register. Also if the circuit / microbit were unplugged from the microbit (with 3v battery also connected) the board would then function perfectly even though it was unplugged from the usb. Almost as if the circuit were getting a kick of some sort.

At the moment I have the microbit controlling the circuit connected to the circuit with jumper cables from a microbit pinout / holder / interface. I am aware that spi do not really like multi strand wire. So I have taken another microbit pinout / interface socket and removed the pins from the front, replacing them with soldered in pins sticking from the back of the board so that it can be soldered directly into a PCB with no jumper cables. I will be assembling this tomorrow.

I have also tried not using the actual spi protocol and instead controlling the shift register by loading the 8 bits of data to it with clock pulses and then displaying on the leds by using the latch which works fine independent of the I2c oled. As this is just done by pulsing digital outputs there should be no conflict with the I2c protocol that I can see.

If anyone can clarify that it is impossible to use i2c and spi at the same time that would be great.
If anyone can clarify that there should be no issue with using the oled (i2c) and manually, as it were, sending data to the shift register by pulsing the three digital outputs linked to latch, data and clock, that would be great.
If anyone has a clue about the weird usb thing going on or perhaps knows someone who can exorcise my haunted microbit that would also be great.

Just to clarify the shift register is being powered by a 6v supply and the 3v and 6v have a common earth. The circuit is soldered together on a pcb and all sub blocks work without fault separately when tested with code. I am using the makecode editor to produce the program.

Sorry about the long post.