Bonsoir,
Sub TftFichProd()
Dim Ttm(), ColB, tm%, n%, i%, k%
ColB = Array(15, 16, 21, 5, 6, 34, 2, 29, 30, 31, 44, 22, 23, 24, 8, 33, 25, 26, 28)
With Worksheets("Base")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 3 To n
If .Cells(i, 11) = "Terminé" Then
ReDim Preserve Ttm(18, tm)
If .Cells(i, ColB(0)) <> "" Then Ttm(0, tm) = .Cells(i, ColB(0)).Value2
For k = 1 To 18
If .Cells(i, ColB(k)) <> "" Then Ttm(k, tm) = .Cells(i, ColB(k))
Next k
tm = tm + 1
End If
Next i
End With
With Worksheets("FICHE DE PRODUCTION")
.Range("A1").CurrentRegion.Offset(1).ClearContents
.Range("A2").Resize(tm, 19).Value = WorksheetFunction.Transpose(Ttm)
.Range("A2").Resize(tm).NumberFormat = "dd/mm/yyyy"
End With
End Sub
pas de difficulté pour comprendre le code :
on établit un tableau des numéros de colonnes de la base à prélever (ColB) : si des adaptations à faire en la matière, il suffit donc de modifier cette liste et d'ajuster le nombre de colonnes (actuellement : 19 col., indices de 0 à 18 !)
on parcourt les lignes de la base (après s'être dimensionné pour cela : n), et on teste sur chaque ligne la cellule en K
si "Terminée", on incrémente un tableau (Ttm) avec la variable tm [1er incrément et 1er indice = 0]
on sert l'élément 0 de la ligne en utilisant la propr. Value2 car il s'agit d'une date (ce qui permet d'éviter des déconvenues...)
on sert les autres en utilisant une boucle et le tableau ColB...
on teste la présence d'une valeur dans la cellule avant affectation au tableau de façon que l'élément reste vide si pas de valeur (évite renvoi de 0 éventuel...)
on incrémente tm
le tableau constitué on passe à la fiche :
on efface les données antérieures
on affecte le tableau (nb de lignes fourni par tm) en le transposant [nous avons un tableau(colonnes, lignes), la partie variable constituant nécessairement sa 2e dimension, en le transposant on rétablit un tableau(lignes, colonnes)...]
on met au format date la 1re colonne au cas où elle ne le serait pas.
Cordialement.