Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 réorganiser un tableau

vivi21

XLDnaute Occasionnel
Bonsoir,

Je souhaite réorganiser des données d'un tableau excel. Voici un exemple en pièce jointe.

Au lieu d'avoir tous les participants d'une même structure sur une meme ligne, je souhaite avec pour une même structure plus lignes pour les données des participants.

Merci pour vos réponses.

cordialement
vivi
 

Pièces jointes

  • test.xlsx
    23.3 KB · Affichages: 19

vivi21

XLDnaute Occasionnel
Merci pouvez vous reprendre mon fichier que j'ai modifié car il y a des données que j'ai oublié d'enlever merci.
Pouvez m'expliquer les lignes de fonctions que vous utilisez car je ne comprends pas tout.
Merci.
 

vivi21

XLDnaute Occasionnel
De nouveau une question car dans certains cas j'ai 3 participants et dans d'autres juste 1. comment éviter les lignes vides.
Voici mon exemple ci-joint.
Merci beaucoup de votre aide.
Bonne journée.
Vivi21
 

Pièces jointes

  • test2.xlsx
    10.3 KB · Affichages: 24

CISCO

XLDnaute Barbatruc
Bonjour
...
De nouveau une question car dans certains cas j'ai 3 participants et dans d'autres juste 1. comment éviter les lignes vides.
....
Vivi21

A voir la simplicité de ton premier fichier, je me disais bien qu'il ne devait pas être assez polyvalent pour représenter toutes les situations possibles...

Dans la pièce jointe, il y a trois formules principales :
* une dans A11,
* une autre dans A12, cette dernière pouvant être tirée vers le bas,
* et une dernière dans B11, que l'on peut copier-coller vers la droite et vers le bas.

@ plus

P.S : S'il manque une cellule à la fin des lignes (U3 vide par exemple), cela buguera. Si tu penses que cela peut être le cas, dis le moi, je modifierais les formules en conséquence.
 

Pièces jointes

  • test2.xlsx
    11.3 KB · Affichages: 30

vivi21

XLDnaute Occasionnel
Bonjour Cisco,

Effectivement pour le premier je n'ai pas 5 participants donc cela bug je pense.
Pouvez vous m'expliquer un peu les formules que vous utilisez.
Merci de votre aide précieuse.
Vivi21
 

CISCO

XLDnaute Barbatruc
Bonjour

Dans l'exemple traité, il y a bien 5 participants pour le premier établissement. Et le nouveau tableau comporte 5 lignes pour cet établissement. Où est le problème ?

@ plus
 

vivi21

XLDnaute Occasionnel
oui effectivement.
Sauf que dans mes données réelles ma première ligne ne comporte que 1 participant.
Voici les données réelles masquées.
Merci à vous.
vivi
 

Pièces jointes

  • test3.xlsx
    27.3 KB · Affichages: 17

CISCO

XLDnaute Barbatruc
Bonjour

Cela ne fonctionnait pas correctement parce que les cellules "vides" de ton tableau initial ne sont pas réellement vides. Donc le EQUIV("zz";...1) qui donne la position de la première colonne vide donnait toujours le n° de la colonne V, soit 22.

J'ai remplacé par un EQUIV("";...0) qui recherche la position de la première colonne contenant "" sur la ligne en cours.

@ plus

P.S : Attention, il ne faut surtout pas écrire quelque chose, même juste un "Entrer" dans ces cellules pseudovides, car sinon, la formule de la colonne A ne fonctionne plus.
 

Pièces jointes

  • test3.xlsx
    29.8 KB · Affichages: 22

CISCO

XLDnaute Barbatruc
Bonsoir

Voui, je n'avais pas fait attention. Dans B90, il faut dans la formule NB.SI($A$90:$A90;$A90) au lieu de NB.SI($A$12:$A90;$A90) puisque ton second tableau commence en ligne 90. Il faut ensuite tirer cette formule, une fois corrigée, vers la droite et vers le bas.

@ plus

P.S : Je t'expliquerai les formules un peu plus tard dans la soirée.
 

vivi21

XLDnaute Occasionnel
J'ai encore un souci dans ton exemple je ne peux pas aller au delà de l'ets19 hors j'en ai 76.
J'ai beau regardé je suis vraiment nul sur ces formules complexes.
Je suis preneuse pour les explications.
 

klin89

XLDnaute Accro
Bonsoir à tous,

A tester :
VB:
Option Explicit
Sub test()
Dim a, b(), i As Long, j As Long, n As Long
    'attention au nom de la feuille
    With Sheets("DATA_CONCAT").Range("a2").CurrentRegion
        a = .Value
        ReDim b(1 To (UBound(a, 1) - 1) * (UBound(a, 2) - 1) / 4, 1 To 5)
        For i = 2 To UBound(a, 1)
            For j = 2 To UBound(a, 2) Step 4
                If Trim(a(i, j)) <> "" Then
                    n = n + 1
                    b(n, 1) = a(i, 1)
                    b(n, 2) = a(i, j): b(n, 3) = a(i, j + 1)
                    b(n, 4) = a(i, j + 2): b(n, 5) = a(i, j + 3)
                End If
            Next
        Next
        With .Offset(.Rows.Count + 1)
            .CurrentRegion.ClearContents
            .Resize(1, 5).Value = [{"structure","participant","fonction","cout","AT"}]
            .Offset(1).Resize(n, 5).Value = b
        End With
    End With
End Sub
klin89
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonsoir à tous, bonsoir klin89

Ce nouveau défaut vient indirectement du précédent. La dernière formule dans la colonne A, dans mon précédent fichier, va chercher la position du premier "" dans la ligne de l'établissement en cours. Et en fait, il y a deux problèmes :
1) Lorsque tu as 5 participants, la première cellule vide est dans la colonne V, mais ne contient pas de "" (Cette cellule est vraiment vide). La première formule que je t'avais donnée, en EQUIV("zz";....;1) fonctionne dans ce cas là. Il faudrait donc combiner mes deux précédentes propositions. C'est faisable, mais cela donne une formule à rallonge et, de plus, cela ne convient pas à cause du second problème...
2) Toutes les cellules "vides" de ton tableau initial ne contiennent pas la même chose. Pour preuve, écrit =CODE(F3) dans F1 et tire cette formule vers la droite. On devrait avoir le même résultat dans toutes les cellules, et ce n'est pas le cas à cause de N3. Autre exemple, écris = code(F6) et = code(R7). Là aussi on devrait avoir la même chose, et ce n'est pas le cas (ce qui fait que la ligne 100, correspondant à l'établissement 5, ne convient pas, à cause du contenu de R7).

Pour contourner cette difficulté, à la place d'aller chercher la position de la première cellule sur la ligne en cours contenant telle ou telle chose, je fais compter à la formule les cellules contenant du texte sur cette ligne avec NB.SI(..................;"><"&""). Et ça fonctionne, il me semble.

@ plus
 

Pièces jointes

  • test4.xlsx
    33.4 KB · Affichages: 18

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…