Alignement de colonnes selon leurs intitulés

pingouinal

XLDnaute Occasionnel
Bonjour tout le monde,

Dans le fichier ci-joint, j'ai des données extraites de SAP qui sont classées dans deux tables l'une au dessus de l'autre.
Je souhaite regrouper le tout en alignant les colonnes à partir de la F, à savoir Amount, Unit, per, UoM, Valid From et Valid to. En gros je souhaite passer de l'onglet Départ à l'onget Arrivée. ^_^'

J'avais d'abord écrit un bout de code qui le faisait, mais je me suis rendu compte que les colonnes n'étaient pas toujours placées de la même façon lors de l'export de SAP. C'est à dire que les colonnes Amount par exemple ne sont pas toujours en G et F.
Je souhaitais donc pouvoir les aligner par rapport à leurs noms (la colonne Amount de la table du haut s'aligne avec la colonne Amount de la table du bas, etc). Mais c'est là que mes connaissances limitées me trahissent.

Pourriez-vous m'aider à les aligner en fonction de leur en-tête?

D'avance merci pour votre aide.
 

Pièces jointes

  • Test.xlsx
    11.8 KB · Affichages: 40
  • Test.xlsx
    11.8 KB · Affichages: 41
  • Test.xlsx
    11.8 KB · Affichages: 43

DoubleZero

XLDnaute Barbatruc
Re : Alignement de colonnes selon leurs intitulés

Bonjour, pingouinal, le Forum,

Peut-être ainsi :

VB:
Option Explicit
Sub Aligner()
    Dim c As Range
    Application.ScreenUpdating = False
    Sheets("Arrivée").Cells.Delete
    Sheets("Départ").UsedRange.Copy Destination:=Sheets("Arrivée").Range("A1")
    Sheets("Arrivée").Activate
    Cells.Find(What:="Batch", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
                                                                   :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
               False, SearchFormat:=False).Activate
    With Range(ActiveCell, ActiveCell.End(xlDown)).Offset(, 1)
        .Delete Shift:=xlToLeft
    End With
    With [A:A]
        .Replace "CTyp", "", xlPart
        .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End With
    For Each c In Range("A2", Cells(Rows.Count, 1).End(3))
        If c = "CnTy" Then c.EntireRow.Delete
    Next
    Rows(1).SpecialCells(xlCellTypeBlanks).EntireColumn.Delete
    Cells.EntireColumn.AutoFit
    Application.ScreenUpdating = True
End Sub

A bientôt :)
 

pingouinal

XLDnaute Occasionnel
Re : Alignement de colonnes selon leurs intitulés

Bonjour DoubleZero,

Tout d'abord, merci beaucoup pour ton aide.
Si je comprends bien le code que tu as donné, la partie ci-dessous décale les colonnes de la table du bas pour les aligner à celle de la table du haut.

VB:
With Range(ActiveCell, ActiveCell.End(xlDown)).Offset(, 1)

Cela marche effectivement très bien pour le fichier que j'ai joint. Mais mon problème est que selon les extraits de SAP, les colonnes ne sont pas décalées de la même façon (parfois c'est vers la droite, parfois vers la gauche, parfois la table avec la colonne Batch est en dessous de l'autre table, etc). Et là ça ne fonctionne plus.
C'est pour cela que je cherche à reconnaître les entêtes de colonnes au sein de chaque table pour ensuite pouvoir les aligner.

D'avance merci à tous ceux qui pourront m'aider. :)
 

DoubleZero

XLDnaute Barbatruc
Re : Alignement de colonnes selon leurs intitulés

Re-bonjour,

... selon les extraits de SAP, les colonnes ne sont pas décalées de la même façon (parfois c'est vers la droite, parfois vers la gauche, parfois la table avec la colonne Batch est en dessous de l'autre table, etc). Et là ça ne fonctionne plus...

Dans ce cas :(, je donne ma langue au chat !

Attendons les spécialistes :D d'XLD.

Bon courage et à bientôt :)
 

Regueiro

XLDnaute Impliqué
Re : Alignement de colonnes selon leurs intitulés

Bonsoir Le Forum, Pigouinal
Une procédure à essayer
Après ton export sur une feuille X
Tu nommes la 1ère Tables = Tableau1
la 2ème = Tableau2
Dans le Tableau2 tu remplaces ton entête colonne3 par l'entête manquante soit
Batch

Ensuite tu vas sur la feuille extraction,
bouton Extraction
bouton RAZ pour remise à zéro
Code:
Public Derlig As Long, DerCol As Long
Sub ExtractRPP2()
Set F1 = Sheets("EXTRACTION")
'Dim Plage As Range
'Set Plage = Range("B" & [B65000].End(xlUp).Row + 1).Resize(, 10)
'MsgBox Plage.Address
    With Range("Tableau1[#All]")
    .AdvancedFilter xlFilterCopy, F1.[F2:F3], F1.[B6:K6], False
    End With
    Range("B6:K6").Select
    Temp = Selection.Address(False, False)
    'MsgBox Temp
    Selection.Copy
    Selection.End(xlDown)(2).Resize(, 10).Select
    
    temp1 = Selection.Address(False, False)
    'MsgBox temp1
    ActiveSheet.Paste
    Application.CutCopyMode = False

   With Range("Tableau2[#All]")
  .AdvancedFilter xlFilterCopy, F1.[F2:F3], F1.Range(temp1), False
End With
Range(temp1).Delete
[A1].Activate
End Sub
Bonne soirée
 

Pièces jointes

  • XLD-CONSOLIDER2TABLES.xlsm
    78.5 KB · Affichages: 27

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 361
Messages
2 087 626
Membres
103 609
dernier inscrit
AmineAB33