Bonjour,
Pour expliquer ce grand mystère je vous conseille d'exécuter ce code pas à pas. Vous verrez que quand vous écrivez Range("I1:I5").Value en VBA, vous vous retrouvez avec un tableau de valeurs (Array), et non pas 1 valeur unique.
Donc écrire ma_chaine = Range1.Value & Range2.Value & Range3.Value renvoie bien une chaine de caractère, la concaténation des 3 valeurs.
Mais écrire machaine = Range("I1:I3").Value renvoie un tableau de 3 cases avec dans chacune des cases une valeur.
Donc si vous mélangez les deux, vous vous retrouvez à comparer des tableaux à des strings (des patates et des camions) et le code plante car ça n'a rien à voir.
De plus, la méthode "élégante" ne pourra jamais fonctionner car on ne peut pas écrire "tableau1 = tableau2" en VBA (et en programmation en générale). Il faut boucler sur les tableaux et comparer leurs valeurs une à une pour vérifier l'égalité.
EDIT : salut @Dan, nos messages se sont croisés (et se complètent !). Bonne journée