Transformation d'un tableau

UJAP

XLDnaute Occasionnel
Bonjour,
Dans le cadre de mon travail, je dois transmettre un tableau de données variables pour le service des Ressources Humaines afin que les informations contenues dans ce tableau soient injectées directement dans le logiciel RH au niveau des données variables d’un agent pour constituer sa paie.

Le tableau que j’ai transmis ne peut être exploité car celui ne correspond pas au modèle exigé par le logiciel RH.

Le service RH me demande de refaire mon tableau en suivant le modèle (tableau 2 en pièce jointe).

Ma question : Peut-on transformer le tableau 1 sous le format du tableau 2 en pièce jointe ? Merci d’avance et quelle est la procédure ?

Je vous transmets un exemple en pièce jointe, car l'original contient de nombreuses lignes,

Merci pour vos réponses,

Christophe
 

Pièces jointes

  • Tableau.xlsx
    9.5 KB · Affichages: 48
  • Tableau.xlsx
    9.5 KB · Affichages: 56
  • Tableau.xlsx
    9.5 KB · Affichages: 53

UJAP

XLDnaute Occasionnel
Re : Transformation d'un tableau

Oui, tu as entièrement raison, sauf que je viens d'avoir cette information après la réalisation,

Et au lieu de recommencer mon tableau (qui est lourd) je préfère d'abord poser cette question,

Merci,
 

chris

XLDnaute Barbatruc
Re : Transformation d'un tableau

Bonjour
Bise à JCGL :)

Tu ne précises pas si ce besoin est ponctuel ou si tu devras le faire régulièrement.

Je vois 3 possibilités :
  • si ponctuel :
    • utiliser l'astuce décrite ici Ce lien n'existe plus en sélectionnant la plage des 3 colonnes Matricule, Heures Ménage, Heures garderie
    • une fois l'extraction réussie, utiliser INDEX + EQUIV pour remettre les noms
  • si ponctuel ou régulier : on peut
    • soit faire une requête union avec MSQuery
    • soit créer une procédure VBA

A noter que, de façon générale, la disposition du tableau 2, conforme à la logique base de données, est meilleure et peut être exploitée par Tableau et graphique croisés dynamiques pour les synthèses alors que la première entraîne des limites d'exploitation et est moins évolutive.
 
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Transformation d'un tableau

Bonjour,

cf PJ

Code:
Sub TransformeBD()
  a = Sheets("Feuil1").Range("A3:D" & [A65000].End(xlUp).Row)
  Set f1 = Sheets("feuil1")
  ligBD = 2
  colBD = 8
  For ligne = 2 To UBound(a, 1)
    For col = 3 To UBound(a, 2)
        f1.Cells(ligBD, colBD) = a(ligne, 1)
        f1.Cells(ligBD, colBD + 1) = a(ligne, 2)
        f1.Cells(ligBD, colBD + 2) = a(1, col)
        f1.Cells(ligBD, colBD + 3) = a(ligne, col)
        ligBD = ligBD + 1
    Next col
  Next ligne
End Sub

ou

Code:
Sub TransformeBD2()
  a = Sheets("Feuil1").Range("A3:D" & [A65000].End(xlUp).Row)
  Dim b()
  ReDim b(1 To UBound(a) * 2, 1 To UBound(a, 2))
  Set f1 = Sheets("feuil1")
  ligBD = 1
  colBD = 1
  For ligne = 2 To UBound(a, 1)
    For col = 3 To UBound(a, 2)
        b(ligBD, colBD) = a(ligne, 1)
        b(ligBD, colBD + 1) = a(ligne, 2)
        b(ligBD, colBD + 2) = a(1, col)
        b(ligBD, colBD + 3) = a(ligne, col)
        ligBD = ligBD + 1
    Next col
  Next ligne
  [H2].Resize(UBound(b), UBound(b, 2)) = b
End Sub

JB
 

Pièces jointes

  • Tableau-1.xls
    35.5 KB · Affichages: 41
  • Tableau-1.xls
    35.5 KB · Affichages: 44
  • Tableau-1.xls
    35.5 KB · Affichages: 44
Dernière édition:

klin89

XLDnaute Accro
Re : Transformation d'un tableau

Bonsoir le forum,

Comme j'avais potassé, je poste.
VB:
Sub Transpose()
Dim a, b(), i As Long, j As Byte, x As Long, y As Byte
    Application.ScreenUpdating = False
    With Range("A2").CurrentRegion
        a = .Value
        For i = 2 To UBound(a, 1)
            For j = 1 To 2
                x = x + 1
                ReDim Preserve b(1 To 4, 1 To x)
                For y = 1 To 4
                    Select Case y
                        Case 1, 2
                            b(y, x) = a(i, y)
                        Case 3
                            b(y, x) = a(1, j + 2)
                        Case 4
                            b(y, x) = a(i, j + 2)
                    End Select
                Next
            Next
        Next
        With .Offset(, .Columns.Count + 2)
            .CurrentRegion.Clear
            .Resize(, 4) = [{"Nom - Prénom", "Mat", "Type","Total"}]
            .Offset(1).Resize(UBound(b, 2), UBound(b, 1)) = _
            Application.Transpose(b)
            With .CurrentRegion
                .Offset(, 1).Resize(.Rows.Count, .Columns.Count - 1).HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .BorderAround ColorIndex:=1, Weight:=xlThin
                .Borders(xlInsideVertical).Weight = xlThin
                .Interior.ColorIndex = 36
                .Columns(1).Interior.ColorIndex = 6
                .Columns.AutoFit
                With .Rows(1)
                    .RowHeight = 20
                    .BorderAround ColorIndex:=1, Weight:=xlThin
                    .Interior.ColorIndex = 44
                    .Font.Underline = xlUnderlineStyleSingle
                    .WrapText = True
                End With
            End With
        End With
    End With
    Application.ScreenUpdating = True
End Sub
 

Pièces jointes

  • UJAP.xls
    41.5 KB · Affichages: 26
  • UJAP.xls
    41.5 KB · Affichages: 32
  • UJAP.xls
    41.5 KB · Affichages: 31

laetitia90

XLDnaute Barbatruc
Re : Transformation d'un tableau

bonsoir toutes :), tous :)
une autre facon d'ecrire egalement

Code:
Sub es()
  Dim t(), t1(), x As Long, i As Long, k As Long, z As Byte, b, c
  t = Range("a4:d" & Cells(Rows.Count, 1).End(3).Row)
  For i = 1 To UBound(t)
  For z = 1 To 2
  If z = 1 Then c = t(i, 4): b = t(i, 3): t(i, 3) = "Heures ménage" _
  : t(i, 4) = b Else t(i, 3) = "Heures Garderie": t(i, 4) = c
  x = x + 1
  ReDim Preserve t1(1 To 4, 1 To x)
  For k = 1 To 4
  t1(k, x) = t(i, k)
  Next k:  Next z: Next i
  [m2].Resize(x, 4) = Application.Transpose(t1)
 End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 104
dernier inscrit
JEMADA