Tout ce qui se trouve après le mot Dim fait parti des déclarations de variable :
a est déclaré sans autre spécification : Ce peut être n'importe quoi. En l'occurrence ici ce sera un Array (tableau) dont les dimensions ne sont pas spécifiées : Normal, je ne sais pas encore ce que je mettrai dedans...
iLR est une variable de type Integer
Dim iLR%
veux dire exactement la même chose que :
Dim iLR as Integer
après cette ligne :
iLR = .Range("A" & .Rows.Count).End(3).Row
iLR contient le n° de la dernière ligne écrite en colonne A. (soit 4 dans ton exemple...)
Par suite
a = .Range("A1:AI" & iLR).Value
signifie que a contient un tableau de valeurs qui sont en fait le contenu de .Range("A1:AI4")
par suite ce tableau sera transposé dans la Feuille1
On redimensionne la cellule A1 aux dimensions de a et on dit que cette plage = a
Ce qui est plus rapide qu'un Copier / Coller
Au lieu de
With Sheets("Feuil1")
.[A1].Resize(UBound(a), UBound(a, 2)) = a
J'aurai aussi pu écrire :
With Sheets("Feuil1")
.Range("A1:AI" & iLR)= a
Mais la première notation (avec Resize) est la plupart du temps utilisé par les développeurs habitués pour des raisons complexes à expliquer.
La programmation VBA est un long apprentissage, il n'y a pas de méthode particulière pour apprendre. La meilleure manière est de coder, coder, coder et... coder !
Après, la consultation de forum pour corriger ses erreurs ou apprendre des techniques plus efficace est aussi un très bon moyen de progresser.
A+