Bonjour le fil, bonjour le forum,
Je ne comprends pas ce que la TextBox1 vient faire là !?...
Essai comme ça:
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
If Target.Address <> "$D$2" Then Exit Sub ' si le changement a lieu ailleurs qu'en D2, sort de la procédure
Set OS = Worksheets("Feuil1") 'définit l'onglet OS
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Me.Rows(3 & ":" & Application.Rows.Count).ClearContents 'efface les anciennes données de l'onglet OE
If Target.Value = "" Then Exit Sub 'si D2 est effacée, sort de la procédure
For I = 2 To UBound(TV, 1) ' boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 29) = Target.Value Then 'condition : si la donnée ligne I colonne 12 de TV est égale à la valeur de la cellule modifiée (C2)
K = K + 1 'incrémente K
ReDim Preserve TL(1 To 29, 1 To K) ' redimensionne le tabeau de lignes TL (12 lignes, K colonnes)
For J = 1 To UBound(TV, 2) 'boucle 2 : sur toutes les colonnes J du tableau des valeurs TV
Select Case J 'agit en fonction de J
Case 25, 26 'cas 25 et 26
'récupère dans la ligne J de TL la valeur de la date convertie en entier long en colonne J de TV (=> Transposition)
TL(J, K) = CLng(DateSerial(Year(TV(I, J)), Month(TV(I, J)), Day(TV(I, J))))
Case Else 'tous les autres cas
TL(J, K) = TV(I, J) 'récupère dans la ligne J de TL la valeur de la donnée colonne J de TV (=> Transposition)
End Select 'fin de l'action en fonction de J
Next J 'prochaine colonne de la boucle 2
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 1
If K > 0 Then ' condition : si K est supérieure à zéro
Me.Range("A3").Resize(K, 29).Value = Application.Transpose(TL) 'renvoie le tableau TL transposé dans A4 de l'onglet OE
End If ' fin de la condition
End Sub
Le fichier :