Réorganiser l'ordre des colonnes avec leur nom

Hello,

J'ai fait une première macro qui réorganise mes colonnes dans un certaines ordre en les coupant et en les collant ailleurs, sous cette forme.

    Columns("F:F").Select
    Selection.Cut
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight

Sur mon premier fichier, cela fonctionne.
Le problème, c'est qu'en fonction des fichiers, le contenu en question n'est pas toujours dans la colonne F.
Une colonne supplémentaire existe dans ce second fichier et décale tout.

Est-il possible de réorganiser l'ordre des colonnes, en se basant sur le nom de celles-ci ?
Leur nom est toujours le même, au contraire de leur ordre.

Merci d'avance pour votre aide.

Bonjour,

avec l'instruction Find vous pouvez chercher une valeur dans une plage et elle vous retourne un objet Range s'il y a bien une valeur à trouver.

Donc la plage correspondrait à la ligne des entêtes de vos colonnes :
Set Plage = Range("A1:Z1")

On définie Trouve comme un objet Range et il recevra le résultat de la recherche :
Dim Trouve As Range

On définie Valeur qui correspond à la valeur cherchée, le nom de l'entête de la colonne :
Dim Valeur As String

Et voilà on a à peu tout ce qu'il nous faut, ensuite une fois qu'on a trouvé la valeur cherchée, indirectement on connait la colonne grâce à Trouve.Column.

Le code complet avec une entête égale à LouReeD et une insertion entre la colonne B et C :

Sub Test()
    Dim Trouve As Range, Valeur As String, Plage As Range
    ' définition d ela plage
    Set Plage = Range("A1:Z1")
    ' définition de la valeur de l'entête 
    Valeur = "LouReeD"
    ' on attribue à Trouve le résultat de la recherche
    Set Trouve = Plage.Find(Valeur)
    ' si Trouve est différent de rien = on a trouver "LouReeD" dans la plage de recherche
    If Not Trouve Is Nothing Then
        ' on coupe la colonne de cette entête
        Columns(Trouve.Column).Cut
        ' on l'insert entre la colonne B et C en donc on prend C
        Columns("C:C").Insert Shift:=xlToRight
    End If
End Sub

@ bientôt

LouReeD

Super, merci LouReeD, je vais essayer ça !

Merci LouReed, ça fonctionne nickel avec la première colonne à déplacer.

Mais comment faire pour continuer avec une autre colonne, qui porte un autre nom, à déplacer et ainsi de suite ?

J'ai recopié depuis Valeur = "LouReeD" jusqu'au End If mais ça n'a pas l'air d'être ça.

Merci.

Bonjour

Connaissez vous la liste des noms à l'avance ?

Cette liste est-elle constante ?

Mon idée : mettre la liste dans un tableau et scanner ce tableau pour faire le déplacement...

Mais dites m'en plus, comme cela ce sera plus simple.

@ bientôt

LouReeD

Bonjour,

Oui, les noms sont constants. Il s'agit des coordonnées de points de vente.
J'aurais donc nécessairement une colonne "ADDRESS", "COMPANYNAME", "TOWN", etc.
Le fichier de base contient 73 colonnes, mais seulement une dizaine m'intéresse.
La manipulation souhaitée est donc de transférer certaines de ces 73 colonnes au début de mon fichier, dans un certain ordre.
Je supprimerai le reste des autres colonnes par la suite.

Ma macro comporte d'autres actions de formatage/renommage donc il faudrait que cette partie reste relativement légère.

Merci !

J'ai trouvé mon bonheur le script suivant !

Sub columnOrder()
Dim search As Range
Dim cnt As Integer
Dim colOrdr As Variant
Dim indx As Integer

colOrdr = Array("id", "last_name", "first_name", "gender", "email", "ip_address") 'define column order with header names here

cnt = 1

For indx = LBound(colOrdr) To UBound(colOrdr)
    Set search = Rows("1:1").Find(colOrdr(indx), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    If Not search Is Nothing Then
        If search.Column <> cnt Then
            search.EntireColumn.Cut
            Columns(cnt).Insert Shift:=xlToRight
            Application.CutCopyMode = False
        End If
    cnt = cnt + 1
    End If
Next indx
End Sub

Merci LouReeD pour votre aide !

Bonsoir,

bon ben voilà, j'arrive trop tard !
Bien joué ! Et en plus avec style : variables en anglais !

merci pour vos remerciements et votre retour !

@ bientôt

LouReeD

Rechercher des sujets similaires à "reorganiser ordre colonnes leur nom"