Ordre personnalisé des colonnes

Bonjour,

Je ne sais pas si le sujet à déjà été posté mais si oui navré pour le doublon.

Voici ma question :

Dans le fichier excel ci-joint ,je voudrais savoir s'il est possible avec macro ou autre de changer l'ordre des colonnes en fonction de l'utilisateur qui ouvre le fichier. En gros, la personne 1 veut la colonne "modalités" en A et la personne 2 veut la colonne "réception produit en colonne A.

Je ne sais pas si c'est compréhensible mais en gros avoir un ordre personnalisé en cliquant sur un simple bouton. Est-ce possible de faire ça sous Excel ?

Merci d'avance pour votre aide.

Bonne journée

7suivi-ue-ne.xlsx (11.20 Ko)

Bonjour,

À ton niveau, tu préfères la personne 1, ou la personne 2 ?

C'était juste pour l'exemple! Mais je ne sais pas si j'ai bien été claire dans ma question?

Si, si.

tu peux regarder du côté de ces commandes.

Avec le risque que ce soit vite le bordel dans l'ordre de tes colonnes quand même.

    Columns("E:E").Cut
    Columns("A:A").Insert Shift:=xlToRight

Désolé je sais faire des macros simples mais est-ce que ça me permet de passer d'une vue à l'autre ?

Ca va déplacer tes colonnes. À toi de voir ce que tu veux exactement et dans quel contexte.

A une époque je faisais quelque chose comme cela aussi, il existe une api qui permet de récupérer l'userName de l'utilisateur, ensuite tu n'as pas qu'à faire lors de l'ouverture de ton fichier:

Si userName = "Personne 1" alors

copier colonne B:B en première

Si username = "Personne 2" alors

copier colonne C:C en première

Voici l'API que j'utilisais en version 32 bits, que tu peux convertir si tu es en 64bits.

Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Ma fonction qui me retournais le nom en string avec cette api :

Public Function ApiGetUserName() As String
    Dim strReturn As String
    strReturn = Space(250)
    Call GetUserName(strReturn, Len(strReturn) + 1)
    strReturn = ApiBufferToString(strReturn)
    ApiGetUserName = strReturn
End Function

Autrement tu peux récupérer le nom de l'ordinateur, si tu veux faire selon l'ordinateur (Production ,bureaux) avec l'API :

Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Exemple de code à mettre dans ThisWorkbook :

Private Sub Workbook_Open()
    Select Case ApiGetUserName()
           Case "Personne 1" :
                 'Met colonne B en première
                 ThisWorkbook.Worksheet("Feuil1").Range("B:B").cut
                 ThisWorkbook.Worksheet("Feuil1").Range("A:A").Insert Shift:=xlToRight
          Case "Personne 2":
                 .....
  end select
end sub

Après, faut pas oublier de préciser où va la colonne qui était en colonne A. C'est là où ça peut vite devenir pénible et fastidieux. M'enfin bon...

Et ne pas oublier de remettre les colonnes dans l'ordre initial :

> avant de fermer le fichier

> en cas de plantage

> en cas de refus d'ouvrir les macros

> etc

En fait je ne sais pas si j'ai bien expliquer. En gros je voudrais une macro qui me donne cette ordre de colonne :

Internal trial ADExterne trial IDARM completConclusionModalitésRépétitionsRéception produitPiquetageSponsorTraçage AlléesDépiquetageDestruction récolte

Et une autre macro qui me donne cet ordre de colonne

SponsorTraçage AlléesDépiquetageDestruction récolteInternal trial ADExterne trial IDARM completConclusionModalitésRépétitionsRéception produitPiquetage

En fait juste changer l'ordre d'apparition des colonnes en fonction des besoins d'informations de la personne qui utilise le fichier. J'ai donné un nom à mes colonnes mais je n'arrive pas leur donner un ordre avec le tri personnalisé. Il y a trop de colonne. Pas évident d'expliquer!!

Rechercher des sujets similaires à "ordre personnalise colonnes"