Excel formule inverser lignes

Bonjour a tous!

La colonne A (stoloc) contient mes emplacements dans l'ordre ABCD. Je voudrais pouvoir générer une 2eme feuille avec l'ordre ABDC (parfois il ne peut y avoir que ABC et dans ce cas, cela ne doit pas bouger).

Attention j'ai mis un filtre en colonne AW car je ne veux pas que toutes mes zones soit afféctées.

Merci pour votre aide!!

14loc-file-abcd.xlsx (1.40 Mo)

Bonjour,

Une proposition via formule O365, à entrer sur une nouvelle feuille (impossible de joindre le fichier, trop lourd?). Ca me semble difficile en utilisant uniquement les filtres "classiques" que vous avez mis en place. Autrement via PowerQuery ce serait intéressant.

=LET(myTbl;TRIMRANGE(ABCD!$A$2:$CN$6498;;0);
filtTbl;FILTRE(myTbl;NON(ESTERREUR(EQUIVX(CHOISIRCOLS(myTbl;49);ASSEMB.V("SZ-MIXED-ALL";"SZ-APTIV*";"SW-SEWS*");2))));
sortTbl;TRIERPAR(filtTbl;REGEXREMPLACER(CHOISIRCOLS(filtTbl;1);"C";"E"));
ASSEMB.V(ABCD!$A$1:$CN$1;sortTbl))

Notez que plus bas les valeurs de type "2C01.." sont placées après les "2D01…" c'est ce que vous avez demandé a priori.

Merci Saboh

Dans quelle cellule faut il placer cette formule?

Celle que vous voulez, par exemple A1, mais dans une nouvelle feuille.

Hello,

Une proposition PowerQuery

Tes données source dans le premier onglet et après tu fais clic droit puis actualiser sur le tableau du deuxième onglet.

Le petit tableau permet de trier uniquement les zones sélectionnées

@+

Bonjour ,

Une proposition via VBA.

La copie se fait chaque fois qu'on active la feuille "Result".

Le code est dans le module de la feuille "Result" :

Private Sub Worksheet_Activate()
Dim xrg As Range, derlig&, t, i&, InsCol As Boolean, c$

On Error GoTo err001
Application.ScreenUpdating = False
With Me
   Set xrg = Worksheets("ABCD").Range("a1").CurrentRegion      ' partie à copier de la feuille "ABCD"
   If .FilterMode Then .ShowAllData                            ' on affiche toutes les lignes
   If .[a1] = "TempoAuxBid" Then .Columns(1).Delete            ' si la colonne auxiliaire est là, on la supprime
   .Columns(1).Resize(, xrg.Columns.Count).Clear               ' on efface le résultat de la précédente copie
   xrg.Copy .[a1]                                              ' on copie depuis "ABCD" vers "Result"
   derlig = .Cells(Rows.Count, "a").End(xlUp).Row              ' N° dernière ligne copiée
   .Columns(1).Insert: InsCol = True: .[a1] = "TempoAuxBid"    ' insertion colonne auxiliaire (colonne A) - son titre
   t = .[a1].Resize(derlig, 2)                                 ' on transfère les données des colonnes A:B dans t
                                                               ' colonne 1 de t futur ordre de tri
                                                               ' colonne 2 de t valeurs du champ "stoloc"
   For i = 2 To UBound(t)              ' boucle sur les données de t en sautant la ligne de titre
      c = Right(t(i, 2), 1)            ' dernier caractère c du champ "stoloc"
      Select Case c                    ' indication de l'ordre de tri en fonction de c
         Case "A": t(i, 1) = 1         ' "A" -> 1, "B" -> 2, "D" -> 3, "C" -> 1 sinon 999
         Case "B": t(i, 1) = 2
         Case "D": t(i, 1) = 3
         Case "C": t(i, 1) = 4
         Case Else: t(i, 1) = 999
      End Select
   Next i
   .[a1].Resize(UBound(t)) = t         ' on transfert la 1ère colonne de t (ordre d etri) en colonne auxiliaire
   .[a1].Resize(UBound(t), xrg.Columns.Count + 1).Sort .[a1], xlAscending, Header:=xlYes  ' Tri selmon la colonne A
err001:
   If .[a1] = "TempoAuxBid" Then Columns(1).Delete    ' si la 1ère colonne a pour titre "TempoAuxBid", on la supprime
   Application.Goto .[a1], True                       ' aller en cellule A1
End With
MsgBox "Une nouvelle copie (et tri) des données de ""ABCD"" a été faite.", vbInformation   ' information
End Sub

Merci a vous tous!

Particulièrement a Baroute avec ce PQ simple a utiliser!!

Bravo!!

Rechercher des sujets similaires à "formule inverser lignes"