Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 VBA Grouper valeur

Kidcarotte

XLDnaute Junior
Bonjour a tous et a toutes

Je souhaiterai mentionne par avance que cela fait deux heures que je tourne en rond sur les forums et que je ne trouve rien de concluant, c'est donc pour cela que je m'adresse ici. J'ai vu le nombre de sujet ouvert, mais les codes proposes ne fonctionne pas et mes connaissances VBA sont tres limites.

J'ai une colonne B de plusieurs noms ( il y en a un peu pres une trentaine et le fichier fais 5000 lignes.)
CK Underwear
CK Underwear
CK Underwear
TH Accessories
CK Underwear
CK Underwear
CK Underwear
CK Underwear
CK Underwear
CK Underwear
CK Underwear
TH Accessories
TH Accessories
TH Accessories
TH Accessories
TH Accessories
TH Accessories
TH Accessories
CK Jeans

Je voudrais les regrouper par similirate
Donc CK Underwear, TH Accessories etc.
Je sais qu'il y a des formules pour cela, cependant je creer un tableau analytique a partir d une enorme base de donnees.
Donc l'idee est: Lorsque l'utilisateur appuie sur le bouton "Create report" au lieu d'avoir les 1500000 lignes, les 25 grands groupes sont regroupes

Des suggestions ?

Cordialement
 

Kidcarotte

XLDnaute Junior
Hello Daniel

Je sais pas si vous avez la reponse a ca egalement. Au lieu de la feuille Database comme on avait en feuille 1, je voudrais prendre la database qui se trouve dans un autre classeur excel. Le chemin est le suivant

Dim Chemin As String, Fichier As String
Chemin = "H:\Central Sourcing & production\Divisional Check\Div. Checks"
Fichier = "Divisional Checks - Refresh Data.xlsx"
With Sheets("MISSING PRIO")

Et j'aimerais selectionnee uniquement un nombre specifique de colonne comme donnee. Exemple colonne A, D, J

Auriez vous une formulation VBA ?
 

danielco

XLDnaute Accro
Bonjour,

Avec des divisions en colonne A :

VB:
Sub TCD_Good_Macro()

  Dim C As Range, Plage As Range, Ligne As Variant, Col As Long
  Dim Wbk As Workbook, Sh As Worksheet
  Set Wbk = Workbooks.Open("H:\Central Sourcing & production\Divisional Check\Div. Checks\" & _
    "Divisional Checks - Refresh Data.xlsx")
  Set Sh = Sheets("MISSING PRIO")
  With Sh
    Set Plage = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
  End With
  With Sheets("Expected (2)")
    Set C = .Cells(1, .Columns.Count).End(xlToLeft).Offset(, 1)
    If C.Column = 2 Then
        C.Value = Date
    Else
        C.Value = DateAdd("ww", 1, Date)
    End If
    C.NumberFormat = "d/mm/yy"
    Col = C.Column
    For Each C In Plage
        Ligne = Application.Match(C.Value, .[A:A], 0)
        If IsNumeric(Ligne) Then
        .Cells(Ligne, Col) = .Cells(Ligne, Col) + 1
        End If
    Next C
    Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    .Cells(Ligne, Col) = Application.Sum(.Range(.Cells(2, Col), .Cells(Ligne - 1, Col)))
  End With
  Wbk.Close False
End Sub

S'il y a des divisions en colonnes D ou J aussi, dis-le.

Daniel
 

Kidcarotte

XLDnaute Junior
Egalement vu que Worksheet a ete defini comme Sh, cela change le code pour le reste, J'ai donc changer comme ceci mais cela ne marche pas non plus

Sub TCD_Good_Macro()
Dim C As Range, Plage As Range, Ligne As Variant, Col As Long
Dim Wbk As Workbook, Sh As Worksheet
Set Wbk = Workbooks.Open("H:\Central Sourcing & production\Divisional Check\Div. Checks\" & _
"Divisional Checks - Refreshed Data.xlsx")
Set Sh = Sheets("MISSING PRIO")
With Sh
Set Plage = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
End With
Set Sh = Sheets("Expected (2)")
With Sh
Set C = .Cells(1, .Columns.Count).End(xlToLeft).Offset(, 1)
If C.Column = 5 Then
[...]
 

danielco

XLDnaute Accro
Qu'est-ce quiu ne marche pas ? Une erreur ? Si oui, laquelle ?

Daniel
 

Kidcarotte

XLDnaute Junior
Ben si toujours .... C'est toujours la meme finalite. C'est juste que au lieu de prendre la database en sheet 1 du meme fichier excel, on l'a prend d'un autre dossier excel
 

Pièces jointes

  • Tryout Macro Paul.xlsm
    27.6 KB · Affichages: 7

danielco

XLDnaute Accro
Effectivement, autant pour moi.
VB:
With Sheets("Expected (2)")
se réfère au classeur actif. Et le classeur actif est le classeur qu'on vient d'ouvrir.
Code:
Sub TCD_Good_Macro()

  Dim C As Range, Plage As Range, Ligne As Variant, Col As Long
  Dim Wbk As Workbook, Sh As Worksheet
  Set Wbk = Workbooks.Open("H:\Central Sourcing & production\Divisional Check\Div. Checks\" & _
    "Divisional Checks - Refresh Data.xlsx")
  Set Sh = Sheets("MISSING PRIO")
  With Sh
    Set Plage = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
  End With
  With ThisWorkbook.Sheets("Expected (2)")
    Set C = .Cells(1, .Columns.Count).End(xlToLeft).Offset(, 1)
    If C.Column = 2 Then
        C.Value = Date
    Else
        C.Value = DateAdd("ww", 1, Date)
    End If
    C.NumberFormat = "d/mm/yy"
    Col = C.Column
    For Each C In Plage
        Ligne = Application.Match(C.Value, .[A:A], 0)
        If IsNumeric(Ligne) Then
        .Cells(Ligne, Col) = .Cells(Ligne, Col) + 1
        End If
    Next C
    Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    .Cells(Ligne, Col) = Application.Sum(.Range(.Cells(2, Col), .Cells(Ligne - 1, Col)))
  End With
  Wbk.Close False
End Sub
 

Kidcarotte

XLDnaute Junior
Super merci beaucoup !

Maintenant je crois que j'ai une ultime question, car je touche la fin.

Dans le worksheet
"H:\Central Sourcing & production\Divisional Check\Div. Checks\" & _
"Divisional Checks - Refreshed Data.xlsx")

La colonne A et J m'interesse (seulement)
 

Discussions similaires

Réponses
6
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…