Imposer positionnement colonne

Bonjour le forum,

Je souhaite imposer un classement des colonnes en fonction de la valeur présente dans la première ligne de chaque colonne.

voici mon code :

Dim valeur1, valeur2, valeur3, valeur4, valeur5, valeur6, valeur7, valeur8
Dim valeur9, valeur10, valeur11

valeur1 = "Famille"
valeur2 = "PLU"
valeur3 = "Gencod"
valeur4 = "Article"
valeur5 = "Libellé"
valeur6 = "Qté hp"
valeur7 = "Qté p"
valeur8 = "CA HT hp"
valeur9 = "CA HT p"
valeur10 = "Nb. articles"
valeur11 = "CA TTC"

Dim x
For x = 1 To derncolonne
Set a = Range(Cells(1, 1), Cells(1, derncolonne)).Find(valeurx)
If Not a Is Nothing Then
colonne = a.Column
If colonne <> x Then
    If colonne - x < 0 Then
Do While colonne = x
Selection.Insert Shift:=xlToLeft
Loop
End If
    If colonne - x > 0 Then
Do While colonne = x
Selection.Insert Shift:=xlToRight
Loop
End If
End If
End If
Next x

Ce que je cherche à faire c'est mettre en place une variable "valeurx" dans find (à l'heure actuelle, avec ce code, ça ne marche pas)

Je veux imposer que la valeur1 (famille) se retrouve en colonne 1 donc si famille est actuellement en colonne 4 alors déplacer la colonne en colonne 1.

Ensuite faire de même avec la valeur2 et faire en sorte qu'elle se retrouve en colonne 2 et ainsi de suite pour l'ensemble des valeurs.

Merci à tous ceux qui m'aideront à compléter ce code.

Cordialement

Bonjour le forum,

Je souhaite imposer un classement des colonnes en fonction de la valeur présente dans la première ligne de chaque colonne.

voici mon code :

Dim valeur1, valeur2, valeur3, valeur4, valeur5, valeur6, valeur7, valeur8
Dim valeur9, valeur10, valeur11

valeur1 = "Famille"
valeur2 = "PLU"
valeur3 = "Gencod"
valeur4 = "Article"
valeur5 = "Libellé"
valeur6 = "Qté hp"
valeur7 = "Qté p"
valeur8 = "CA HT hp"
valeur9 = "CA HT p"
valeur10 = "Nb. articles"
valeur11 = "CA TTC"

Dim x
For x = 1 To derncolonne
Set a = Range(Cells(1, 1), Cells(1, derncolonne)).Find(valeurx)
If Not a Is Nothing Then
colonne = a.Column
If colonne <> x Then
    If colonne - x < 0 Then
Do While colonne = x
Selection.Insert Shift:=xlToLeft
Loop
End If
    If colonne - x > 0 Then
Do While colonne = x
Selection.Insert Shift:=xlToRight
Loop
End If
End If
End If
Next x

Ce que je cherche à faire c'est mettre en place une variable "valeurx" dans find (à l'heure actuelle, avec ce code, ça ne marche pas)

Je veux imposer que la valeur1 (famille) se retrouve en colonne 1 donc si famille est actuellement en colonne 4 alors déplacer la colonne en colonne 1.

Ensuite faire de même avec la valeur2 et faire en sorte qu'elle se retrouve en colonne 2 et ainsi de suite pour l'ensemble des valeurs.

Merci à tous ceux qui m'aideront à compléter ce code.

Cordialement

Bonjour,

Le code comporte beaucoup d'aberrations.... Je te renvoie quelque chose de plus cohérent.

Il y a sans doute mieux, mais ça devrait fonctionner:

Sub OrdonnerColonnes()

Dim valeur(11) As String, X As Byte, ColMax As Byte, LigMax As Long, Ordre As Byte

valeur(1) = "Famille"
valeur(2) = "PLU"
valeur(3) = "Gencod"
valeur(4) = "Article"
valeur(5) = "Libellé"
valeur(6) = "Qté hp"
valeur(7) = "Qté p"
valeur(8) = "CA HT hp"
valeur(9) = "CA HT p"
valeur(10) = "Nb. articles"
valeur(11) = "CA TTC"

With Sheets("TaFeuille")
    ColMax = .Cells(1, Columns.Count).End(xlToLeft).Column
    LigMax = .Cells(Rows.Count, 1).End(xlUp).Row
    .Range(.Cells(1, 1), .Cells(LigMax, ColMax)).Copy
    .Cells(1, ColMax + 1).Select
    ActiveSheet.Paste
    For X = 1 To ColMax
        For Ordre = 1 To 11
            If .Cells(1, ColMax + X).Value = valeur(Ordre) Then
                .Columns(ColMax + X).Copy
                .Columns(Ordre).Select
                ActiveSheet.Paste
            End If
        Next Ordre
    Next X
    .Range(.Cells(1, ColMax + 1), .Cells(LigMax, 2 * ColMax)).ClearContents
End With

End Sub

Pour expliquer, je duplique ton tableau à ordonner, et chaque fois que je retrouve une en-tête à ordonner, je colle la colonne entière à la bonne place dans le 1er tableau. Une fois terminé, je supprime le tableau dupliqué.

Bonjour Pedro22,

Merci pour ton aide et ta réponse.

J'ai essayé ton code et il y a une étape qui bloque apparemment :

Je reçois ce message "erreur d'exécution 438 : propriété ou méthode non gérée par cet objet".

.Row(ColMax + X).Copy

C'est cette ligne qui bloque.

Par contre j'avoue que je ne sais pas comment la corriger du coup.

Merci encore pour ton aide.

Cordialement

J'ai modifié, c'étais une double erreur puisque je travaille sur des colonnes et pas des lignes, et j'avais oublié un "s"

Bonjour, Salut Pedro !

Une autre méthode, sans copier-coller...

Sub ReclasserCol()
    Dim Tbl(), Col, aa, et, i%, k%
    Col = Split("Famille;PLU;Gencod;Article;Libellé;Qté hp;Qté p;" _
     & "CA HT hp;CA HT p;Nb. articles;CA TTC", ";")
    With ActiveSheet.Range("A1").CurrentRegion
        aa = .Value
        et = .Rows(1).Value
    End With
    ReDim Tbl(UBound(Col))
    For i = 0 To UBound(Col)
        k = WorksheetFunction.Match(Col(i), et, 0)
        Tbl(i) = WorksheetFunction.Index(aa, 0, k)
    Next i
    Application.ScreenUpdating = False
    With ActiveSheet.Range("A1").CurrentRegion.Resize(, 1)
        For i = 0 To UBound(Col)
            .Offset(, i).Value = Tbl(i)
        Next i
    End With
End Sub

Cordialement.

Ca dépasse mes compétences, je m'incline !

Salut Pedro !

Ca dépasse mes compétences

Une petite analyse du code, et tu t'y retrouveras... Un point peut t'interroger, c'est l'utilisation d'INDEX.

Cette fonction Excel, est utile en VBA pour affecter à un tableau unidimensionnel une ligne entière ou une colonne entière d'un tableau de données (la plage de référence qu'on a mis en tableau aa, et ici on affecte des colonnes de cette plage).

Lorsqu'il s'agit de lignes, lors de l'affectation finale, une double-transposition permet de la faire en un fois en bloc.

Je n'ai pas trouvé comment affecter globalement lorsqu'il s'agit de colonnes, d'où l'affectation en boucle colonne par colonne. J'ai fait divers essais, avec transposition simple ou double et en verticalisant le tableau final, mais j'obtiens une erreur 13... Je n'ai peut-être pas fait tous les essais possibles (?), je pense que ça doit être possible, mais en attendant...

Cordialement.

Bonjour Mferrand et Pedro,

Merci encore pour vos réponses.

Les deux solutions proposées fonctionnent!

Bonne journée

Rechercher des sujets similaires à "imposer positionnement colonne"