Inversé les données d'un tableau sous VBA

Angelista

XLDnaute Occasionnel
Bonjour le Forum,

Je sollicite votre aide pour le soucis souvent.
Dans le fichier joint ma macro crée 2 onglet dont 1 avec 1 graphique.
Le soucis vient du fait que si je dépasse 256 occurrence en colonne (Limité à IV) bien la macro plante du fait du manque du colonne.
Il faudrait donc que j'inverse les données afin de profiter d'un million de ligne et plus être embêté mais je n'y arrive point.

En résumé les valeurs :

Indicateur 1
Indicateur 2
Indicateur 3
Indicateur 4
Indicateur 5
Indicateur 6
Indicateur 7
Indicateur 8
Indicateur 9

ne devrait plus être en A2 A3 A4 A5 mais sur B1 C1 D1.
Les valeurs

Start Time Used Not Used Used Not Used Used

Passeront donc en A2 A3 A4 A5.

Merci à tous par avance.
 

Pièces jointes

  • Test.zip
    94.2 KB · Affichages: 34
  • Test.zip
    94.2 KB · Affichages: 34
  • Test.zip
    94.2 KB · Affichages: 36

vgendron

XLDnaute Barbatruc
Re : Inversé les données d'un tableau sous VBA

Salut,

et si il suffisait d''inserer un bout de code qui fait un copier coller transposer?

Code:
Sub CreateTimeChartData()

    Dim vTimeData As Variant
    Dim i As Integer
    Dim sRoom As String
    Dim vLastEndTime As Variant
    Dim oSeries As Series
    '\ set up
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    '\ create chart data worksheet
    With Worksheets("TimeData").Range("TimeList").CurrentRegion
        .Sort Key1:="Room", Key2:="Start Time", Header:=xlYes
        vTimeData = .Value
        Worksheets.Add
        On Error Resume Next
            Worksheets("ChartData").Delete
            Charts("TimeChart").Delete
        On Error GoTo 0
        ActiveSheet.Name = "ChartData"
        .Columns(1).AdvancedFilter Action:=xlFilterCopy, _
            CopyToRange:=Range("A1"), Unique:=True
    End With
    Range("a1").Select
    For i = 2 To UBound(vTimeData)
        If vTimeData(i, 1) <> Selection.EntireRow.Cells(1) Then
            Selection.Offset(1).EntireRow.Cells(1).Select
            Selection.Value = vTimeData(i, 1)
            vLastEndTime = 0
        End If
        Selection.Offset(0, 1).Select
        Selection.Value = vTimeData(i, 2) - vLastEndTime
        Selection.Offset(0, 1).Select
        Selection.Value = vTimeData(i, 3) - vTimeData(i, 2)
        vLastEndTime = vTimeData(i, 3)
    Next i
    With Selection.CurrentRegion
        .Offset(0, 1).NumberFormat = "h:mm"
        .Columns(2).Cells(1) = "Start Time"
        For i = 3 To .Columns.Count
            If i Mod 2 <> 0 Then
                .Columns(i).Cells(1) = "Used"
            Else
                .Columns(i).Cells(1) = "Not Used"
            End If
        Next i
    End With

'*******************************************
    Range("A1").CurrentRegion.Select
    Selection.Copy
    Range("A12").Select
    
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Application.CutCopyMode = False
    Rows("1:11").Delete
'*******************************************
    'création des graphiques à revoir pour la partie source de données..
    Charts.Add
    ActiveChart.Name = "TimeChart"
    ActiveChart.ChartWizard Source:=Sheets("ChartData").Range("A1").CurrentRegion, _
        Gallery:=xlBar, Format:=3, PlotBy:=xlColumns, CategoryLabels _
        :=1, SeriesLabels:=1, HasLegend:=2

    For Each oSeries In ActiveChart.SeriesCollection
        If oSeries.PlotOrder Mod 2 <> 0 Then
            oSeries.Border.LineStyle = xlNone
            oSeries.Interior.ColorIndex = xlNone
        Else
        oSeries.Fill.Visible = True
        oSeries.Fill.ForeColor.SchemeColor = 5
       oSeries.Fill.BackColor.SchemeColor = 5
        
           ' oSeries.Interior.ColorIndex = 5
            oSeries.Border.LineStyle = xlNone
        End If
    Next oSeries
    
   With ActiveChart.Axes(xlValue)
        .MajorUnit = 0.0416666666
        .TickLabels.NumberFormat = "h"
        .HasMajorGridlines = True
   End With
   
    With ActiveChart.Axes(xlCategory)
       .ReversePlotOrder = True
    End With
    
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "Activité timers"
    End With
    ActiveChart.PlotArea.Select
    With Selection.Border
        .Weight = xlHairline
        .LineStyle = xlAutomatic
    End With
    Selection.Interior.ColorIndex = xlNone
    
    ActiveChart.Axes(xlValue).Select
    With ActiveChart.Axes(xlValue)
        .MinimumScale = 0
        .MaximumScaleIsAuto = True
        .MinorUnitIsAuto = True
        .MajorUnit = 0.0416666666
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
    End With
    
End Sub
 

job75

XLDnaute Barbatruc
Re : Inversé les données d'un tableau sous VBA

Bonjour Angelista, vgendron,

Je sollicite votre aide pour le soucis souvent.
Dans le fichier joint ma macro crée 2 onglet dont 1 avec 1 graphique.

Si c'est bien la vôtre vous devriez parvenir à la modifier facilement.

Il suffit d'intervertir les lignes et colonnes.

Sinon demandez à l'auteur de la macro de le faire, XLD assure généralement le SAV.

A+
 

Angelista

XLDnaute Occasionnel
Re : Inversé les données d'un tableau sous VBA

Bonjour job75,

Effectivement ce n'est pas "ma" macro à 100%, j'ai pris des morceaux à droite à gauche mais le fond je m'en suis occupé, mais là n'est pas ma question.
J'ai un soucis dans les boucles, le "i" pour moi effectue une boucle en descendant de ligne et pas en allant de colonne en colonne, d'où m'on soucis de retravailler la macro.

Encore merci d'avance.
 

job75

XLDnaute Barbatruc
Re : Inversé les données d'un tableau sous VBA

Re,

Dans le fichier joint j'ai juste interverti les lignes et les colonnes, voyez la feuille "ChartData" créée.

Je n'ai pas du tout modifié la méthode qui devrait être revue car les Select ralentissent beaucoup la macro.

A+
 

Pièces jointes

  • Test transposition(1).xlsm
    338.8 KB · Affichages: 39

job75

XLDnaute Barbatruc
Re : Inversé les données d'un tableau sous VBA

Bonjou Angelista, le forum,

Dans ce fichier (2) pas de Select mais des tableaux VBA (très rapides).

Le gain de temps n'est ici guère sensible car il y a peu de données.

PS : la Dernière cellule était en D58560 :rolleyes: j'ai allégé le fichier...

Bonne journée.
 

Pièces jointes

  • Test transposition(2).xlsm
    37.3 KB · Affichages: 25

job75

XLDnaute Barbatruc
Re : Inversé les données d'un tableau sous VBA

Re,

Dans ce fichier (3) j'ai ajouté la variable h qui détermine la hauteur maximum du tableau rest.

A+
 

Pièces jointes

  • Test transposition(3).xlsm
    32.6 KB · Affichages: 35

Angelista

XLDnaute Occasionnel
Re : Inversé les données d'un tableau sous VBA

Bonjour Job75,

Je n'avais point vu ton retour :), la différence est édifiante, je prend ta façon de faire, mais je suis pas encore au niveau de me passer de select dans toute la macro mais ça va venir :).
Un grand merci.

@ +
 

Discussions similaires

Statistiques des forums

Discussions
312 347
Messages
2 087 504
Membres
103 565
dernier inscrit
Fabien78