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 59 60
| Sub Détail2_bis()
'Déclaration des variables
Dim rng As Range
Dim WkSht As Worksheet
Dim dest As Range
Dim flag As Boolean
'On se place sur la feuille "Import"
With Worksheets("Import")
'On assigne à rng la cellule H1
Set rng = .Range("H1")
'On boucle de 1 à la fin de la ligne H
For i = 1 To .Columns(8).Find("*", , , , , xlPrevious).Row - 1
'On assigne à WkSht la feuille dont la valeur comprise en H1 + un décalage de i ligne(s)
Set WkSht = Worksheets(rng.Offset(i, 0).Value)
'Avec cette feuille
With WkSht
'On cherche en colonne 6 "Code Détail2"...
Set dest = .Columns(1).Find(rng.Offset(i, -2), LookIn:=xlValues, LookAt:=xlWhole)
flag = True
'... si on ne trouve rien
If dest Is Nothing Then
'... on va en bas de la feuille et on insère les valeurs
Set dest = .Columns(1).Find("*", , , , , xlPrevious).Offset(1, 0)
dest = rng.Offset(i, -2)
dest.Offset(0, 1) = rng.Offset(i, -7)
dest.Offset(0, 2) = rng.Offset(i, -6)
'... si on trouve un "Code Détail2"
Else
'... on vérifie si un "Other" correspond
Do While dest = rng.Offset(i, -2)
If dest.Offset(0, 2) = rng.Offset(i, -6) Then
'... si "Oui", on set le flag à "False"
flag = False
Exit Do
'... si "Non", on conserve le flag à "True" pour passer dans la fonction suivante
Else
Set dest = dest.Offset(1, 0)
End If
Loop
'La fonction suivante permet d'insérer une ligne
If flag Then
.Rows(dest.Row).Insert Shift:=xlDown
dest.Offset(-1, 0) = rng.Offset(i, -2)
dest.Offset(-1, 1) = rng.Offset(i, -7)
dest.Offset(-1, 2) = rng.Offset(i, -6)
End If
End If
End With
Next i
End With
End Sub |