Organiser données dans colonne Excel avec VBA

Bonjour à tous les membres,

Dans un précédent sujet, des membres m'ont permis de pouvoir organiser mes données de la même manière qu'on peut le faire avec un ordre de tabulation, ça fonctionne à merveille !

Par contre je n'avais fait l'essai qu'avec une colonne (colonne A). Aujourd'hui j'ai des données en colonnes B,C et D. J'aimerais pouvoir réaliser la même opération avec ces colonnes.

Par exemple:

Si je clique sur le bouton "TRI" à côté de "Ville" je voudrais voir apparaitre les données de la colonne B en listbox1 du Userform1

Si je clique sur le bouton "TRI" à côté de "Temps" je voudrais voir apparaitre les données de la colonne C en listbox1 du Userform1

Si je clique sur le bouton "TRI" à côté de "Mois" je voudrais voir apparaitre les données de la colonne D en listbox1 du Userform1

Dois-je créer un USF par colonne ou est-ce possible d'utiliser ce même USF avec les données de chaque colonne ?

Un grand merci :)

JB

15tri-tabulation.xlsm (23.04 Ko)

Bonjour JeanBaptisteP

Non il n'est pas nécessaire de créer plusieurs USF

Un variable public, l'identification du bouton appelant la macro et hop

A+

Bonjour BrunoM45,

C'est parfait pour le tri en listbox1 merci beaucoup ! Par contre, lorsque je clique sur OK, le tri effectué précédemment apparait en colonne A et non dans sa colonne respective. Je suppose qu'il faut modifier la macro ci-dessous en remplaçant A2:A11 par les bonnes colonnes mais comment procéder ?

' Code associé au bouton OK
Private Sub CommandButton1_Click()
Dim nILst As Long
Dim nLigRg As Long
   ' Ne faire la mise à jour que si présomption de déplacement il y a eu
   If (pfMajListe = True) Then
      With ActiveSheet.Range("A2:A11")
         nLigRg = .Row
         For nILst = 0 To ListBox1.ListCount - 1
            .Cells(nLigRg, 1).Value = ListBox1.List(nILst)
            nLigRg = nLigRg + 1
         Next
      End With
   End If
   ' On libère l'UF
   Unload Me
End Sub

Merci encre pour votre contribution !

JB

Re,

Effectivement, je pensais que vous alliez reprendre le principe du tri

Voici le code, on peut déplacer les variables de la sub tout en haut du code de l'USF,
comme cela elle servent pour toutes les sub

Option Explicit

' Variable pour détecter qu'il y a une mise à jour (bien sûr l'élément peut avoir été déplacé
' et remis à sa position d'origine et on croira qu'il y a eu mise à jour ...)
Dim pfMajListe As Boolean
Dim Col As Long, Dl As Long

' Code associé au bouton OK
Private Sub CommandButton1_Click()
  Dim nILst As Long
  Dim nLigRg As Long
  ' Ne faire la mise à jour que si présomption de déplacement il y a eu
  If (pfMajListe = True) Then
    With ActiveSheet
      nLigRg = 2
      For nILst = 0 To ListBox1.ListCount - 1
        .Cells(nLigRg, Col).Value = ListBox1.List(nILst)
        nLigRg = nLigRg + 1
      Next
    End With
  End If
  ' On libère l'UF
  Unload Me
End Sub

Voici le fichier

A+

Bonsoir BrunoM45,

Merci pour votre retour tout est parfait pour moi !

Je vous sollicite une dernière fois sur une problématique, j'ai des données dans plusieurs onglets, je voudrais les placer dans un tableau structuré, j'y suis parvenu.

Seulement je voudrais placer une en-tête dans ce tableau structuré avec les valeurs ci-dessous:

   .HeaderRowRange(1) = "Equipement"
   .HeaderRowRange(2) = "Valeur"
   .HeaderRowRange(3) = "Autre"
   .HeaderRowRange(4) = "Depot"

Je n'ai pas réussi à insérer une ligne dans le TS, avec la ligne de code: .ListRows.Add 1

Comment dois-je procéder s'il vous plait?

Voici mon code:

Sub TS()
Dim rg As Range
Dim table As ListObject

Set rg = Cells(1, 1).CurrentRegion
Set table = ActiveSheet.ListObjects.Add(SourceType:=xlSrcRange, Source:=rg, XlListObjectHasHeaders:=xlYes)

With table
   .Range.HorizontalAlignment = xlCenter  ' Alignement horizontal du contenu des cellules
   .ShowTableStyleRowStripes = True ' Lignes sur couleurs de fond alternées
   .ShowAutoFilterDropDown = True ' Affichage des boutons de filtres automatiques sur les en-têtes
   .TableStyle = "TableStyleLight9" ' Style général (parmi la liste des styles prédéfinis fournis par Excel)

  .HeaderRowRange(1) = "Equipement"
  .HeaderRowRange(2) = "Valeur"
  .HeaderRowRange(3) = "Autre"
  .HeaderRowRange(4) = "Dépôt"

End With
End Sub

Bonne soirée

JB

Rechercher des sujets similaires à "organiser donnees colonne vba"