modification d'une base de données en masse

Maël30

XLDnaute Nouveau
bonjour à tous,
Je viens vers vous car je souhaiterais modifier "en masse" l'organisation d'une base de données afin qu'elle soit plus lisible.
En effet, en colonne je dispose des pays, et en ligne des sku. Les quantitées sont à la croisées de ces 2 arguments. Or je souhaiterais disposer d'une ligne pour un sku, un pays, une qtité.

Si je n'ai pas été assez clair..:) j'ai mis en pièce jointe un exemple avec dans le premier onglet mon tableau type origine et dans le second onglet le tableau dans la forme que je souhaterais.

bonne soirée à vous
et merci de votre aide d'avance,

M
 

Pièces jointes

  • mael_excel.xlsx
    9.4 KB · Affichages: 24

Dugenou

XLDnaute Barbatruc
Re,
Tu peux faire un TCD sur ma solution en feuille2
Si l'opération est à faire une seule fois (migration) ma methode doit convenir avec un copier coller valeurs à la fin
Si c'est à faire régulièrement : il suffit d'ajouter quelques conditions pour limiter l'affichage aux valeurs utiles.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Un essai en VBA. Cliquer sur le bouton de la feuille Feuil2.
Le code dans module1:
VB:
Sub Ventiler()

Const Source = "Feuil1", Cible = "Feuil2", Cellule = "a1"

Dim Fsource As Worksheet, Fcible As Worksheet, CelluleCible As Range
Dim Vals, derlig&, dercol&, Res(), j&, i&, n&

   Set Fsource = Worksheets(Source): Set Fcible = Worksheets(Cible)
   Set CelluleCible = Fcible.Range(Cellule)
   With Fsource
      derlig = .Cells(.Rows.Count, "a").End(xlUp).Row
      If derlig = 1 Then
         MsgBox "Pas de données en ligne -> échec !", vbCritical
         Exit Sub
      End If
      dercol = .Cells(1, Columns.Count).End(xlToLeft).Column
      If dercol < 3 Then
         MsgBox "Pas de données en colonne -> échec !", vbCritical
         Exit Sub
      End If
      Vals = .Range(.Cells(1, "a"), .Cells(derlig, dercol))
      ReDim Res(1 To (derlig - 1) * (dercol - 2), 1 To 4)
      For i = 2 To derlig
         For j = 3 To dercol
            n = n + 1
            Res(n, 1) = Vals(1, j): Res(n, 2) = Vals(i, 1)
            Res(n, 3) = Vals(i, 2): Res(n, 4) = Vals(i, j)
         Next j
      Next i
   End With
   CelluleCible.CurrentRegion.ClearContents
   CelluleCible.Resize(UBound(Res), UBound(Res, 2)) = Res
   Application.Goto CelluleCible, True
End Sub
 

Pièces jointes

  • Maël30-Ventiler- v1.xlsm
    19.8 KB · Affichages: 27
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 113
Messages
2 085 422
Membres
102 886
dernier inscrit
eurlece