modification d'une base de données en masse

  • Initiateur de la discussion Initiateur de la discussion Maël30
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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.
 
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

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
2 K
Retour