Microsoft 365 Tri de colonnes avec 3 critères, remplissage de lignes vides avec formule + ventilation vers autre onglet

marinehaye

XLDnaute Nouveau
Bonjour à tous,

Je suis toute nouvelle sur le site, encore merci pour l'acceptation!

Je travaille actuellement sur mon premier projet avec des macros et je rencontre plusieurs difficultés. Si vous avez un peu de temps pour m'aider, je vous en remercie vivement.

Je suis en train de créer un module de macro pour transformer un tableau en un autre

- Je souhaite faire un tri selon 3 critères :
1. Tri par ordre alphabétique de la la colonne B (département)
2. Puis tri du plus petit au plus grand de la colonne A (Centre de coût)
3. Enfin, tri par ordre alphabétique de la colonne C (Nom de Famille).

J'utilise cette macro enregistrée, cependant le premier tri n'est pas exécuté :

ActiveWorkbook.Worksheets("Navette ").ListObjects("Tableau1").Sort. _
SortFields.Clear
ActiveWorkbook.Worksheets("Navette ").ListObjects("Tableau1").Sort. _
SortFields.Add2 Key:=Range("B4:B65536"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Navette ").ListObjects("Tableau1").Sort. _
SortFields.Add2 Key:=Range("A4:A65536"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Navette ").ListObjects("Tableau1").Sort. _
SortFields.Add2 Key:=Range("D4:D65536"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Navette ").ListObjects("Tableau1"). _
Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

Sauriez-vous d'où vient le problème s'il vous plait?

- Dans mon module j'ai réussi à insérer une ligne vide dès lors que la valeur de la colonne A (Centre de coût) change.
Cependant, j'aimerai que certaines des cellules de la ligne se remplissent. J'y arrive bien dès lors qu'il faut copier/coller la cellule du dessus ou encore insérer du texte, mais je rencontre un problème dès lors qu'il y a un calcul à faire :
* En colonne D, j'aimerais qu'apparaisse le nombre de ligne pleine avant la ligne vide, jusqu'à la fin du tableau (le nombre de ligne peut varier) ;
* En colonne H, j'aimerais qu'apparaisse l'addition des lignes pleines avant la ligne vide, jusqu'à la fin du tableau (le nombre de ligne peut varier)
* J'aimerai que la police de cette ligne se mette en rouge

- Dans mon module, après avoir inséré une ligne vide et l'avoir remplie, j'insère une seconde ligne vide à la suite de la première.
J'aimerai qu'elle se remplisse de rouge, je n'y arrive pas.

- Pour finir, j'ai réussi à créer autant d'onglet que de Département (colonne B). Cependant, j'aimerai que les données du tableau 1 soient ventilées par centre de coût dans le bon onglet de son département. En clair, j'aimerai que des colonnes Centre de Coût (Colonne A) soient créées dans l'onglet du bon département et que les Noms (colonne C) soient listés sous le bon centre de coût dans l'onglet de son département.

Je vous joins à ce message :

1. mon tableau, avec ma macro actuelle (TEST)
2. le tableau de départ (NAVETTE)

J'espère être assez claire, n'hésitez pas si besoin!

Un grand merci d'avance pour votre aide.
Belle journée
 

Pièces jointes

  • TEST.xls
    204.5 KB · Affichages: 15
  • Navette.xls
    240.5 KB · Affichages: 8

BrunoM45

XLDnaute Barbatruc
Bonjour Marine,

Pour le tri, ce serait plutôt
VB:
 With ActiveWorkbook.Worksheets("Navette PANASONIC")
    .Columns("AA:AQ").EntireColumn.Hidden = False
    .Columns("AT:AW").EntireColumn.Hidden = False
    .Columns("BB:BK").EntireColumn.Hidden = False
    '.Rows("2:2").Delete Shift:=xlUp
    With .ListObjects("Tableau1")
      dLig = .Rows.Count
      With .Sort
        With .SortFields
          .Clear
          .Add2 Key:=Range("B4:B" & Rows.Count), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
          .Add2 Key:=Range("A4:A" & Rows.Count), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
          .Add2 Key:=Range("D4:D" & Rows.Count), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        End With
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
       End With
    End With
End With
 

marinehaye

XLDnaute Nouveau
Bonjour Marine,

Pour le tri, ce serait plutôt
VB:
 With ActiveWorkbook.Worksheets("Navette PANASONIC")
    .Columns("AA:AQ").EntireColumn.Hidden = False
    .Columns("AT:AW").EntireColumn.Hidden = False
    .Columns("BB:BK").EntireColumn.Hidden = False
    '.Rows("2:2").Delete Shift:=xlUp
    With .ListObjects("Tableau1")
      dLig = .Rows.Count
      With .Sort
        With .SortFields
          .Clear
          .Add2 Key:=Range("B4:B" & Rows.Count), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
          .Add2 Key:=Range("A4:A" & Rows.Count), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
          .Add2 Key:=Range("D4:D" & Rows.Count), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        End With
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
       End With
    End With
End With
Bonjour Bruno, je te remercie ! J'ai toujours le même problème, le tri de la colonne A (le deuxième critère) prend toujours le dessus sur le premier tri (Colonne B)...
 

marinehaye

XLDnaute Nouveau
Bruno,
Merci pour ton retour et ton aide.. Je ne comprends, chez moi je constate que c'est la colonne A qui prend le dessus.
Ci-après capture écran, en fin de tableau, j'ai du CONSUMER (Cost Center plus grand que plusieurs RDO) :

1630601118373.png

Merci encore!
 

BrunoM45

XLDnaute Barbatruc
Re,

Marine, le tri n'est même pas fait, il ne devrait pas y avoir de ligne vide 🤔

Sur quelle version d'office travaillez-vous ?
il serait bien de le mettre dans votre profil ;)

J'ai modifié le code
VB:
Sub Tri()
  Dim dLig As Long
  Dim LObj As ListObject
  With ActiveWorkbook.Worksheets("Navette PANASONIC")
    Set LObj = .ListObjects("Tableau1")
    dLig = LObj.DataBodyRange.Rows.Count
    .Columns("AA:AQ").EntireColumn.Hidden = False
    .Columns("AT:AW").EntireColumn.Hidden = False
    .Columns("BB:BK").EntireColumn.Hidden = False
    '.Rows("2:2").Delete Shift:=xlUp
    With LObj
      With .Sort
        With .SortFields
          .Clear
          .Add2 Key:=Range("B4:B" & dLig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
          .Add2 Key:=Range("A4:A" & dLig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
          .Add2 Key:=Range("D4:D" & dLig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        End With
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
      End With
    End With
  End With
End Sub

@+
 

marinehaye

XLDnaute Nouveau
Bruno,
J'ai compris d'où cela venait... J'ai appliqué ta macro en début de module (3ème macro), et je n'avais pas vu que je demandais plus loin de trier la colonne A (j'avoue qu'il y a beaucoup dans mon module, et je suis passée à côté)!
Merci beaucoup encore pour ton aide, je vais modifier!
Je dois bien avoir des lignes vides, par contre (que je souhaite remplir de rouge...) que j'insère vers la fin du module.
 

Membres actuellement en ligne

Statistiques des forums

Discussions
292 869
Messages
1 926 873
Membres
183 295
dernier inscrit
nikodème