Ciao. Ti faccio un paragone con la cucina:
Una classe è come una ricetta che spiega come fare una torta: essa contiene proprietà che, continuando con la nostra analogia, sono gli ingredienti neccessari per fare la torta, e contiene metodi, che in cucina sarebbero le varie procedure da fare (es. Prendi 300g di burro e mescolali allo zucchero). Quando crei un'istanza della classe ( Dim MyVar As NomeClasse ) è come se tu prendessi la ricetta e facessi la torta.

Un modulo (e qui finisce il paragone con la cucina) è, come hai detto giustamente, contenitore di funzioni e procedure che si possono riutilizzare più volte e da tutto il progetto basta richiamarle. Infatti ogni metodo del modulo è implicitamente Shared ossia non vi è bisogno di un'istanza di classe per accedervi.

Tuttavia anche un metodo di una classe può essere dichiarato Shared, come ad esempio il metodo .IsNullOrEmpty(String) della classe String. In questo caso, però, bisogna verificare che il metodo da noi dichiarato Shared non usi proprietà o altri cose che vengono inizializzate solo nel costruttore (ad esempio).