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

CISCO

XLDnaute Barbatruc
Bonsoir

Alors, quelques explications
Dans A91, on a =SIERREUR(SI(NB.SI(A$90:A90;A90)<ENT((NB.SI(DECALER(A$2:U$2;EQUIV(A90;A$3:A$78;0); );"><"&"")-1)/4);A90;INDEX(A$3:A$78;EQUIV(A90;A$3:A$78;0)+1));"")

Donc dans A91, NB.SI(A$90:A90;A90) compte le nombre de d'éts1 rencontrés depuis la ligne 90 (ce qui donne 1 bien sûr).
DECALER(A$2:U$2;EQUIV(A90;A$3:A$78;0); ) donne la plage de A à V correspondant à l'éts1, donc A$3:V$3.
NB.SI(DECALER(A$2:U$2;EQUIV(A90;A$3:A$78;0); );"><"&"") compte le nombre de cellules de cette ligne contenant du texte
NB.SI(DECALER(A$2:U$2;EQUIV(A90;A$3:A$78;0); );"><"&"")-1 pour éliminer la colonne A
(NB.SI(DECALER(A$2:U$2;EQUIV(A90;A$3:A$78;0); );"><"&"")-1)/4 parce que tu as 4 colonnes par participant
ENT((NB.SI(DECALER(A$2:U$2;EQUIV(A90;A$3:A$78;0); );"><"&"")-1)/4) par précaution, ENT donnant la partie entière du rapport dans les parenthèses.
Donc si NB.SI(A$90:A90;A90) est < ENT((NB.SI(DECALER(A$2:U$2;EQUIV(A90;A$3:A$78;0); );"><"&"")-1)/4), c'est qu'on a pas encore écrit assez de ligne pour l'éts1, donc on écrit
SI(NB.SI(A$90:A90;A90)<ENT((NB.SI(DECALER(A$2:U$2;EQUIV(A90;A$3:A$78;0); );"><"&"")-1)/4);A90
Sinon, on va chercher l'établissement suivant sur la liste avec INDEX(A$3:A$78;EQUIV(A90;A$3:A$78;0)+1), suivant à cause du +1.
Et le SIERREUR(.....;"") pour avoir des cellules vides en bas de la colonne A, lorsqu'on a écrit assez de ligne.

Dans B91, =SI(A90="";"";DECALER(B$2;EQUIV($A90;$A$3:$A$78;0);(NB.SI($A$90:$A90;$A90)-1)*4))
Avec DECALER, "On" se positionne dans B$2.
EQUIV($A90;$A$3:$A$78;0) va chercher la position de A90 dans la liste A3:A78, et Excel se décale à partir de B2 de autant de ligne. Pour Ets1, cela donne 1, donc "on" arrive dans B3.
(NB.SI($A$90:$A90;$A90)-1)*4 donne le nombre de colonnes du décalage à faire, 0 sur la première ligne de l'étsx (donc on obtient comme résultat le texte contenu dans B3), 4 sur la seconde (donc... le texte de la colonne F), 8 sur la troisième...

@ plus
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonjour

J'espère que tu as compris mes explications :).

A tout hasard, puisque la formule dans la colonne A compte les cellules contenant du texte, il faut que les 70, 100 etc qui sont dans ton tableau soient au format texte, comme c'est le cas actuellement (ils sont alignés automatiquement du coté gauche de la cellule, alors que les vrais nombres le sont du coté droit).
Si jamais certaines de ces valeurs étaient au format nombre, cela buguerait.
Pour voir cela, il suffit que tu changes le format d'une de ces valeurs, en le faisant passer au format nombre. Tu obtiendras dans le tableau du bas une ligne en moins pour cet établissement, ce qui ne convient pas.

@ plus
 
Dernière édition:

vivi21

XLDnaute Occasionnel
Bonjour Cisco,

Un grand merci pour ces explications je vais les reprendre à tête reposée
Merci de m'avoir suivi jusqu'au bout de mes problèmes.
J'aimerais tant avoir des connaissances sur toutes les formules excel.
Bonne journée.
Vivi
 

zebanx

XLDnaute Accro
Bonjour à tous,

Merci à Cisco / Klin89 pour les formules et codes proposés.
C'est pratique et bien fonctionnel pour un tel cas.

Bonne journée


@klin89
Cela fonctionne bien avec une petite modification (sinon la ligne 2 est dupliquée dans la restitution).
Une proposition à sauvegarder pour ma part;)

ReDim b(1 To (UBound(a, 1) - 1) * (UBound(a, 2) - 1) / 4, 1 To 5)
For i = 3 To UBound(a, 1)
For j = 2 To UBound(a, 2) Step 4
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 263
Membres
103 498
dernier inscrit
FAHDE