Option Base 1 'définit 1 comme étant le premier élément d'un tableau (au lieu de 0)
Sub Macro1()
Dim ORS As Worksheet 'déclare la variable ORS (Onglet Région Semaine)
Dim TA() As Variant 'déclare la variable TA (Tableau des Activités)
Dim L As Byte 'déclare la variable L (incrément Ligne)
Dim V As Byte 'déclare la variable V (incrément Ville)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim A As Byte 'déclare la variable A (incrément Activité)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Set ORS = Worksheets("Région Semaine") 'définit l'onglet ORS
TA = Array("Rayon 1", "Rayon 2") 'définit le tableau des activités TA
ORS.Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'efface d'éventuelles anciennes valeurs dans l'onglet ORS
L = 1 'initialise la variable L
For V = 3 To 6 'boucle 1 : sur les 4 villes dans les colonne 3 à 6 (=> colonne C à F)
For Each O In Sheets 'boucle 2 : sur tous les onglets O du classeur
If Not O.Name = "Région Semaine" Then 'condition : si l'onglet n'est pas "Région Semaine"
'si l'onglet ne contient pas de données, va à l'étiquette "suite"
If O.Range("A1").CurrentRegion.Cells.Count = 1 Then GoTo suite
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For A = 1 To 2 'boucle 3 : sur les 2 activités
ReDim Preserve TL(1 To 9, 1 To L) 'redimensionne le tableau des Lignes TL (9 lignes, K colonnes)
TL(1, L) = TV(1, V) 'récupère dans la ligne 1 de TL, le nom de la ville dans la ligne 1 colonne V de TV
TL(2, L) = TA(A) 'récupère dans la ligne 2 de TL, l'activité A du tableau TA
TL(3, L) = O.Name 'récupère dans la ligne 3 de TL, le nom de l'onglet O
'récupère dans la ligne 4 de TL, en fonction de A, soit la ligne 2, soit la ligne 5 de TV
TL(4, L) = IIf(A = 1, TV(2, V), TV(5, V))
'récupère dans la ligne 5 de TL, en fonction de A, soit la ligne 3, soit la ligne 6 de TV
TL(5, L) = IIf(A = 1, TV(3, V), TV(6, V))
TL(6, L) = TV(11, V) 'récupère dans la ligne 6 de TL, la donnée ligne 11 colonne V de TV
TL(7, L) = TV(12, V) 'récupère dans la ligne 7 de TL, la donnée ligne 12 colonne V de TV
TL(8, L) = TV(13, V) 'récupère dans la ligne 8 de TL, la donnée ligne 13 colonne V de TV
TL(9, L) = TV(14, V) 'récupère dans la ligne 9 de TL, la donnée ligne 14 colonne V de TV
L = L + 1 'incrémente L (ajoute une colonne au tableau des lignes TL)
Next A 'prochaine activité de la boucle 3
End If 'fin de la condition
suite: 'étiquette
Next O 'prochain onglet de la boucle 2
Next V 'prochaine ville de la boucle 1
'si L est supérieure à 1, renvoie dans A2 redimensionnée de l'onglet ORS, le tableau TL transposé
If L > 1 Then ORS.Range("A2").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
End Sub