XL 2010 formule tableau excel

STEPH63000

XLDnaute Nouveau
bonjour je cherche une solution pour un tableau de stats excel. ci joint le fichier .
en page 1 j'ai des donnée dans un fichier excel que je recupère via un logiciel d'analyse video et je voudrais les exploiter avec formule comme indiquer en page 2
 

Pièces jointes

  • TABLEAU POUR FORUM.xlsx
    14.1 KB · Affichages: 26

djidji59430

XLDnaute Barbatruc
Re

(tuto.gif


Crdlmt
 

job75

XLDnaute Barbatruc
Bonjour STEPH63000, djidji59430,

Voyez le fichier joint et cette macro affectée au bouton :
VB:
Sub Nouveau_tableau()
Dim tablo, d As Object, d1 As Object, d2 As Object, i&, s, x$, maxi%
'---analyse du tableau source---
tablo = Feuil1.UsedRange.Resize(, 10) 'matrice, plus rapide, à adapter
Set d = CreateObject("Scripting.Dictionary")
Set d1 = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
For i = 4 To UBound(tablo)
    s = Split(tablo(i, 1))
    If UBound(s) > 0 Then
        x = s(0) & " " & s(1)
        d(x) = IIf(d.exists(x), d(x), x) & Chr(1) & tablo(i, 6) & Chr(1) & tablo(i, 7) 'concaténation
        d1(x) = d1(x) + 1 'comptage
        d2(x) = tablo(i, 10) 'valeur en dernière ligne
    End If
Next
'---tableau des résultats---
Application.ScreenUpdating = False
With Feuil2 'CodeName de la feuille
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    With .[A1].CurrentRegion.Offset(1)
        .ClearContents 'RAZ
        If .Columns.Count > 3 Then .Columns(3).EntireColumn.Resize(, .Columns.Count - 3).Delete 'racourcissement à 3 colonnes
        If d.Count Then
            maxi = Application.Max(d1.items)
            .Columns(2).EntireColumn.Resize(, 2 * maxi - 1).Insert 'insertion des colonnes nécessaire
            .Columns(1).Resize(d.Count) = Application.Transpose(d.items) 'Transpose est limitée à 65536 lignes
            .Columns(1).Resize(d.Count).TextToColumns .Cells(1), xlDelimited, Other:=True, OtherChar:=Chr(1) 'commande Convertir
            .Columns(2 * maxi + 2).Resize(d.Count) = Application.Transpose(d2.items)
            For i = 2 To 2 * maxi Step 2: .Columns(i).EntireColumn.HorizontalAlignment = xlCenter: Next 'centrage
        End If
    End With
    .Columns.AutoFit 'ajustement largeur
    With .UsedRange: End With 'actualise les barres de défilement
    .Activate 'facultatif
End With
End Sub
Utilisant 3 Dictionary et un tableau VBA la macro est rapide même sur de grands tableaux.

A+
 

Pièces jointes

  • TABLEAU POUR FORUM(1).xlsm
    26.5 KB · Affichages: 7

job75

XLDnaute Barbatruc
On ne peut pas utiliser la fonction Transpose s'il y a plus de 65536 lignes restituées.

Et l'on ne peut pas utiliser la commande Convertir s'il faut entrer plus de 32767 caractères dans une cellule.

On utilisera alors cette macro :
VB:
Sub Nouveau_tableau()
Dim tablo, d As Object, d1 As Object, d2 As Object, i&, s, x$, maxi%, a, b, ubc%, c(), j%
'---analyse du tableau source---
tablo = Feuil1.UsedRange.Resize(, 10) 'matrice, plus rapide, à adapter
Set d = CreateObject("Scripting.Dictionary")
Set d1 = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
For i = 4 To UBound(tablo)
    s = Split(tablo(i, 1))
    If UBound(s) > 0 Then
        x = s(0) & " " & s(1)
        d(x) = IIf(d.exists(x), d(x), x) & Chr(1) & tablo(i, 6) & Chr(1) & tablo(i, 7) 'concaténation
        d1(x) = d1(x) + 1 'comptage
        d2(x) = tablo(i, 10) 'valeur en dernière ligne
    End If
Next i
'---tableau des résultats---
Application.ScreenUpdating = False
With Feuil2 'CodeName de la feuille
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    With .[A1].CurrentRegion.Offset(1)
        .ClearContents 'RAZ
        If .Columns.Count > 3 Then .Columns(3).EntireColumn.Resize(, .Columns.Count - 3).Delete 'racourcissement à 3 colonnes
        If d.Count Then
            maxi = Application.Max(d1.items)
            .Columns(2).EntireColumn.Resize(, 2 * maxi - 1).Insert 'insertion des colonnes nécessaires
            a = d.items: b = d2.items
            ubc = 2 * maxi + 1
            ReDim c(d.Count - 1, ubc) 'base 0
            For i = 0 To UBound(b)
                c(i, ubc) = b(i) 'dernière colonne
                s = Split(a(i), Chr(1))
                For j = 0 To UBound(s)
                    c(i, j) = s(j)
            Next j, i
            .Columns(1).Resize(d.Count, ubc + 1) = c
            For i = 2 To 2 * maxi Step 2: .Columns(i).EntireColumn.HorizontalAlignment = xlCenter: Next 'centrage
        End If
    End With
    .Columns.AutoFit 'ajustement largeur
    With .UsedRange: End With 'actualise les barres de défilement
    .Activate 'facultatif
End With
End Sub
Fichier (2).

A+
 

Pièces jointes

  • TABLEAU POUR FORUM(2).xlsm
    25.7 KB · Affichages: 5
Dernière édition:

job75

XLDnaute Barbatruc
Par formule cela paraît difficile, mais en VBA on peut éviter le bouton en utilisant cette macro dans la 2ème feuille :
VB:
Private Sub Worksheet_Activate()
Nouveau_tableau 'lance la macro
End Sub
Elle se déclenche automatiquement quand on active la feuille.

Fichier (3).
 

Pièces jointes

  • TABLEAU POUR FORUM(3).xlsm
    25.6 KB · Affichages: 14

STEPH63000

XLDnaute Nouveau
en fait je me suis peut etre mal exprimé. j'ai besoin à partir du tableau en feuille 1 . j'ai différentes lignes de SEQ (ex: SEQ 1,SEQ 2,SEQ 2 (1)......) aux quelles correspondent des valeurs tel que : zone terrain (ex: 1R,2O.....),rucks gagnés (ex: LIBERATION RAPIDE .......) et fin de séquence (ex: ESSAI ........) et donc par le biais de formules si cela est possible d'avoir une mise en page comme en feuille 2 par rapport aux résultats entrés en feuille 1.
cela est pour me permettre au rugby de trier des informations que je recupère avec un logiciel d'analyse video.
 

Dugenou

XLDnaute Barbatruc
Bonsoir à tous,
Un essai en pj : ce n'est pas garanti pour tous les cas possibles : pour le moment seulement 3 sous parties prévues au max sur une séquence, il faudra adapter si plus.
Et une colonne est à insérer dans le tableau de la feuille 1 : il semble que les espaces entre seq et (x) changent quand on dépasse 9 : je les ai donc supprimés par formule.
La formule de la première colonne feuil2 est matricielle (valider par ctrl+maj+enter)
à votre écoute pour explications et adaptation si besoin
Cordialement
PS pour Job, je n'avais pas lu ton dernier message avant de me colleter avec ce fichier. Il est certain qu'on ne peut pas traiter aussi bien qu'avec ta macro, ce n'est qu'une tentative par formule pour tenter de rester proche de la demande.
Steph : les formules utilisées sont parfois complexes : faites confiance à Job qui vous supportera en cas de problème avec son outil
 

Pièces jointes

  • steph63000.xlsx
    17.1 KB · Affichages: 5

job75

XLDnaute Barbatruc
Bonjour Dugenou, heureux de te croiser,

Belle solution, l'ennui c'est que l'on ne connaît pas à l'avance le nombre de colonnes du tableau des résultats.

Et si ce tableau comporte plusieurs dizaines de colonnes il faut trouver une autre formule pour la dernière.

Bonne journée.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous :),

J’avais commencé par formule donc je publie.

Feuil1:
Trois colonnes auxiliaires ont été insérées sur la feuille Feuil1: colonnes A à C.

Des noms dynamiques ont été définis:
Rucks=DECALER(Feuil1!$D$4:$D$99999;0;0;NBVAL(Feuil1!$D$4:$D$99999);1)
Nseq=DECALER(Rucks;0;-1)
Numseq=DECALER(NumSeqTri;0;-1)
NumSeqTri=DECALER(Nseq;0;-1)

On a retiré la fusion des cellules fusionnées des titres (pas bon :( les cellules fusionnées dans une base de données)

Recopier les formules de la plage A4:C4 vers le bas jusqu'à obtenir des lignes dont le résultat est vide.


Feuil2:
Les titres doivent être identiques à ceux de la ligne 3 de Feuil1.
Une MFC rend invisible les cellules dont le résultat est 0.

Recopier la formule en A2 vers la droite et vers le bas jusqu'à obtenir des lignes dont le résultat est vide.
 

Pièces jointes

  • steph63000- ranger- v1.xlsx
    15.3 KB · Affichages: 8
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour à tous,

Avec le fichier joint j'y vais moi aussi de ma solution par formules.

Il faut 2 colonnes auxiliaires A et B dans la 1ère feuille.

Les cellules fusionnées ne posent vraiment aucun problème.

C'est bien plus compliqué à mettre en œuvre que la solution VBA mais c'est jouable s'il n'y a pas trop de colonnes à restituer en 2ème feuille.

A+
 

Pièces jointes

  • TABLEAU PAR FORMULES(1).xlsx
    17.8 KB · Affichages: 5

Discussions similaires

Réponses
7
Affichages
216

Statistiques des forums

Discussions
312 103
Messages
2 085 312
Membres
102 860
dernier inscrit
fredo67