question tableau croisé dynamique

  • Initiateur de la discussion Initiateur de la discussion ptite_linda
  • 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 !

P

ptite_linda

Guest
Bonjour tout le monde,

J'ai une question concernant les tableaux croisés dynamiques.
Dans le fichiers ci-joint, j'ai un onglet croisé dynamique et un onglet exemple ventil.
Est-il possible de "transformer" mon tableau croisé pour qu'il soit comme celui de l'exemple ventil?

Merci d'avance pour vos réponses.
 

Pièces jointes

Dernière modification par un modérateur:
Re : question tableau croisé dynamique

Re bonjour

Voici ce que nous pouvons faire de plus approchant.
Les numéro de comptes sont inscrit dans la première colonne afin de pouvoir être trié en fin de macro. De toutes façon c'est mieux de les conserver car si par mégarde le tableau est ultérieurement trié sur une colonne différente, il sera toujours possible de retrouver à quel compte appartient quel poste.

A+
 
Re : question tableau croisé dynamique

Oui Linda,

Cela dépend de la version Excel. Supprime le paramètre 'DataOption1:=xlSortTextAsNumbers' (jusqu' à la virgule comprise qui le précède sur la ligne du dessus qui finit par ', _')

A+
 
Re : question tableau croisé dynamique

Linda,

Hello JC🙂 (Merci😛)

Voici la correction:
Code:
Sub Ventiler()
    Dim colTitres As New Collection
    Dim colComptes As New Collection
    Dim sh As Worksheet
    Dim plage As Range
    Dim DerLigne As Long
    Dim idxTitre As Long
    Dim i As Integer, j As Integer
    Dim c As Range
    Dim Adr1 As String
    
    With Sheets("données")
        'Dernière ligne des données
        DerLigne = .Range("D" & .Rows.Count).End(xlUp).Row
        'Récupère les données de la colTitresonnes D
        Set plage = .Range("D2:D" & DerLigne)
    End With
    
    'Charger la collection des titre de colonnes
    On Error Resume Next
    For i = 1 To plage.Rows.Count
        colTitres.Add plage.Cells(i, 1), plage.Cells(i, 1)
    Next i
    On Error GoTo 0
    Set plage = Sheets("données").Range("A2:A" & DerLigne)
       
    'Charger la collection des comptes
    On Error Resume Next
    For i = 1 To plage.Rows.Count
        colComptes.Add plage.Cells(i, 1), plage.Cells(i, 1)
    Next i
    On Error GoTo 0
    
    'Feuille Ventilation
    Set sh = Worksheets("Ventilation")
    sh.Activate
    'Nettoyer les données existantes
    sh.Range("A1").CurrentRegion.ClearContents
    
    With sh
        'Mettre en A1 le titre
        .Range("A1") = "COMPTE"
        
        'Reporter en entête les élements de la collection des titres
        For i = 1 To colTitres.Count
            .Range("B1").Offset(, i - 1) = colTitres.Item(i)
        Next i
        
        .Range("A1").Offset(, colTitres.Count + 1) = "Libellé 2"
        
        
        j = 0
        'Trouver les élement correspondant dans la feuilles données
        For i = 1 To colComptes.Count
            Set c = plage.Find(what:=colComptes.Item(i), LookIn:=xlValues)
            If Not c Is Nothing Then
                Adr1 = c.Address
            
                Do
                    'Incrémentation de la ligne
                    j = j + 1
                    
                    'Mettre le numéro de compte
                    .Cells(1 + j, 1) = colComptes.Item(i)
        
                    
                    'Récupère numéro d'index du titre dans la collection
                    'Le Premier titre est sur la colonne 2 de la feuille
                        
                    idxTitre = GetidxTitre(colTitres, c.Offset(, 3))
                    .Cells(1 + j, idxTitre + 1) = c.Offset(, 1)
                    
                    'Mettre le libellé 2 éventuel
                    If Not IsEmpty(c.Offset(, 2)) Then
                        .Cells(1 + j, colTitres.Count + 2) = c.Offset(, 2)
                    End If
                    
                    Set c = plage.FindNext(c)
                    
                Loop While Not c Is Nothing And c.Address <> Adr1
            
            End If
        Next i
       ' Tri du tableau sur la colonne compte
        .Range("A2").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    End With
End Sub

J'avais, lors de mes essais laissé trainer une ligne inutile🙄. Désolé😉

A+
 
Re : question tableau croisé dynamique

ha oui JCGL, vous avez raison c'est pas pareil
j'avais mis une ' devant le j=j+1
mais j'avais toujours les lignes vierges.

Et Hasco, c'est pas à vous d'être désolé, c'est moi qui vous ai embêté toute la journée. Maintenant ça fonctionne, alors encore merci.

Et bonne soirée à vous 2.
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
18
Affichages
538
Réponses
2
Affichages
248
Réponses
8
Affichages
312
Réponses
6
Affichages
333
Retour