Sub Import_Obook_to_Analysis()
' Liste des colonnes de O.BOOK à conserver dans l'ordre
' Un / indique qu'on insère une colonne vide
Const Liste_Colonne_a_conserver = "A AA BS / / D E F AX AY G / H Y X"
' Liste des titre des colonnes vides insérées dans l'ordre (au moins un titre par "/"
Const Titre_Colonne_vide = "Titre Vide-1;Titre Vide-2;Titre Vide-3"
Dim Source As Worksheet, Cible As Worksheet, Pays$, derlig&, xrg As Range
Dim nbrLig&, TitreVide, colEcr&, colVide&, xcol, deb, i&
deb = Timer
Set Source = Sheets("O.BOOK - calc with DIVISION map")
Set Cible = Sheets("Order book analysis")
Pays = Cible.[b1]
' copie des lignes du pays désiré
Application.ScreenUpdating = False
With Source
If .FilterMode Then .ShowAllData
derlig = .UsedRange.Row + .UsedRange.Rows.Count - 1
Set xrg = .Range("a3:cv" & derlig)
xrg.Sort key1:=xrg(1, 5), order1:=xlAscending, MatchCase:=False, Header:=xlYes
xrg.AutoFilter Field:=5, Criteria1:=Pays
nbrLig = .Cells(Rows.Count, "e").End(xlUp).Row - 2
End With
With Cible
.Rows("3:" & derlig).ClearContents
' suppression des colonnes non désirées de la source
' mettre les colonnes conservées selon l'ordre indiqué
' insérer les colonnes vides
TitreVide = Split(Titre_Colonne_vide & ";;;;;;;;;;;;;;", ";")
colEcr = 0: colVide = 0
For Each xcol In Split(Liste_Colonne_a_conserver, " ")
colEcr = colEcr + 1
If xcol = "/" Then
colVide = colVide + 1
.Cells(3, colEcr) = TitreVide(colVide - 1)
.Cells(3, colEcr).VerticalAlignment = xlTop
.Cells(3, colEcr).HorizontalAlignment = xlCenter
.Cells(3, colEcr).WrapText = True
Else
Source.Cells(3, xcol).Resize(nbrLig).Copy .Cells(3, colEcr)
End If
Next xcol
i = .Cells(Rows.Count, "a").End(xlUp).Row
End With
If Source.FilterMode Then Source.ShowAllData
MsgBox "Le filtrage pour <" & Pays & "> s'est exécuté en : " & Format(Timer - deb, "#,##0.0\ sec.") & vbLf & _
"Nombre d'enregistrements : " & Format(i - 3, "#,##\."), vbInformation
End Sub