Sub CopierSousConditionsSansFormats()
Dim Source As Worksheet, Cible As Worksheet, RgSource As Range, RgCible As Range
Dim Données(), Résultats(), NewRés()
Dim i As Long, j As Long, NbL As Long, NbC As Long
Const NbColRés = 4
Set Source = ActiveWorkbook.Worksheets("Shipping List")
Set Cible = ActiveWorkbook.Worksheets("LACEY")
Set RgSource = Source.Range("E12:N1519") 'Plage contenant toutes les données
Set RgCible = Cible.Range("A16") '1ère cellule de la plage cible
Application.ScreenUpdating = False
'On nettoie la cible (valeurs et formats)
RgCible.Resize(Cible.Rows.Count - RgCible.Row + 1, NbColRés).Clear
'on stocke dans un tableau de variables toutes les valeurs de la plage de données
Données = RgSource.Value2
'i : Index pour de décalage en ligne de la plage cible
i = 0
For j = 1 To UBound(Données, 1) 'J varie de 1 aux nombre de lignes de la plage des données (ici 1508 lignes)
If IsNumeric(Données(j, 10)) And Not IsEmpty(Données(j, 10)) Then
If Données(j, 10) > 0 Then
'Ici Données(j,10) est une valeur numérique supérieure à 0
Select Case Données(j, 1)
Case "CAP", "USA", "SPF", "LAM", "LVL"
'On incrémente i pour le prochain résultat
i = i + 1
'On redimensionne le tableau Résultats et on le remplit (au début i vaut 1)
'————————————————————————————————————————————————————————————————————————————
'Remarque : le tableau est en colonnes-lignes et non pas en lignes-colonnes
'————————————————————————————————————————————————————————————————————————————
ReDim Preserve Résultats(1 To NbColRés, 1 To i)
Résultats(1, i) = 1
Résultats(2, i) = Données(j, 1)
Résultats(3, i) = Données(j, 4)
Résultats(4, i) = Données(j, 5)
Case Else
'Rien
End Select
End If
End If
Next
'On transpose les résultats pour passer dans un tableau en lignes, colonnes
NbL = UBound(Résultats, 2) 'Nbre de lignes = dimension 2 du tableau Résultats
NbC = UBound(Résultats, 1) 'Nbre de colonnes = dimension 1 du tableau Résultats
'Nouveau tableau de Résultats
ReDim NewRés(1 To NbL, 1 To NbC)
'Transposition
For i = 1 To NbL
For j = 1 To NbC
NewRés(i, j) = Résultats(j, i)
Next j
Next i
'On attribue à la plage cible redimensionnée les résultats
RgCible.Resize(NbL, NbC).Value2 = NewRés
'On se positionne juste au dessus de la cellule cible (True : avec défilement d'écran)
Application.Goto RgCible.Offset(-1, 0), True
Application.ScreenUpdating = True
End Sub