1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| Option Explicit
Sub tablo()
'Initialisation des variables
Dim rng_in As Range
Dim rng_out As Range
Dim dte As Date
Dim offst As Integer
Dim i As Integer, j As Integer
'Avec la "Feuil2"...
With Worksheets("Feuil2")
'... on set "rng_in" sur la cellule de la ligne 1 sur laquelle on trouve "Lilly ID"
Set rng_in = .Rows(1).Find("Lilly ID", LookIn:=xlValues, LookAt:=xlWhole).Offset(1, 0)
'Pour i = 0 au nombre de lignes (non-vide) de la feuille...
For i = 0 To .Columns(rng_in.Column).Find("*", , , , , xlPrevious).Row - 2
'... avec la "Feuil1"...
With Worksheets("Feuil1")
'... on vérifie si "rng_in" décalé de l ligne(s) contient quelque chose.
If rng_in.Offset(i, 0) <> "" Then
'Si oui, on set "rng_out" sur la référence de la "Feuil1".
Set rng_out = .Columns(1).Find(rng_in.Offset(i, 0), LookIn:=xlValues, LookAt:=xlWhole)
'Si on trouve bien la référence sur la "Feuil1"...
If Not rng_out Is Nothing Then
'... alors on définie "dte" comme étant la date de rng_in décalé de i ligne(s) et de -2 colonnes (colonne A de la "Feuil2")
dte = rng_in.Offset(i, -2)
'On définie offst ) 0 pour chaque itération de i.
offst = 0
'On boucle maintenant sur j de 1 au nombre de colonnes non-vides de la ligne 2 (de la "Feuil1")
For j = 1 To .Rows(2).Find("*", , , , , xlPrevious).Column
'Si l'année ET le mois de [A2] (de la "Feuil1") déclalé de j colonne(s) sont égaux à la date "dte"...
If year(.Range("A2").Offset(0, j)) = year(dte) And Month(.Range("A2").Offset(0, j)) = Month(dte) Then
'... alors on définie "offst" égal à ce décalage.
offst = j
'et on a pas besoin de continuer, parce qu'on a trouvé le mois correspondant, donc on sort de la boucle j.
Exit For
End If
Next j
'Il se peut qu'on ne trouve pas de date (exemple année = 2013). Or, si offst est différent de 0, on en aura trouvé une.
If offst <> 0 Then
'Donc, si on trouve une date, alors on ajoute dans "rng_out" décalé de "offst" colonnes la valeur de "rng_in" pour l'itération i sur laquelle on se trouve.
rng_out.Offset(0, offst) = rng_out.Offset(0, offst) + rng_in.Offset(i, 3)
End If
Else
'Et si jamais on ne trouve pas de référence dans la "Feuil1", une MsgBox s'affiche.
MsgBox "La référence """ & rng_in.Offset(i, 0) & """ n'est pas présente dans le tableau."
End If
End If
End With
Next i
End With
End Sub |