Calculer la position des débuts de mots dans une structure

Bonjour,

J'ai une feuille excel assez complexe me permettant de décrire des structures de bits.

La colonne B indique le niveau d'imbrication (le niveau 1 étant la racine)

La colonne C donne le nom d'une série de bits (un paramètre)

La colonne D donne le type de la ligne (PK = nouvelle structure, PAR = série de bits)

La colonne E donne la longueur de la série de bits

La colonne F donne la position (le début, en commençant par 0) de cette série de bits dans son parent (il faut alors se référer à la colonne B pour connaitre le parent)

Et enfin, la colonne G donne la position du début des "mots" (= série de 16 bits) dans la structure. C'est à dire sur chaque paramètre se trouvant à cheval sur le premier bit d'un mot, on y indique le numéro de ce mot (en commençant par 1). Pour les lignes ne correspondant pas à un début de mot, il faut laisser vide.
C'est cette dernière colonne que je voudrais calculer à partir des autres...

J'essaye de jouer avec la méthode DECALER, mais je galère un peu, d'autant qu'il faut que ça reprenne à 1 à chaque fois qu'on passe à une nouvelle structure !

Est-ce qu'un monstre d'Excel saurait m'aider ?

ABCDEFG
StructureLevelNameTypelengthfirst bit in levelWord N°
PACKET_1PK32
>1PAR1PAR1601
|>2PAR2PAR120
|>2PAR3PAR112
|>2PAR4PAR113
|>2PAR5PAR214
>1PAR6PAR1616
>1PAR7PAR16322
|>2PAR8PAR120
|>2PAR9PAR112
|>2PAR10PAR113
|>2PAR11PAR214
PACKET_2PK32
>1PAR12PAR1601
>1PAR13PAR16162

Merci !

PS: je ne peux pas utiliser de macro car interdit dans certaines situations.

bonsoir,

j'ai du mal à comprendre le tableau (longueur de packet_1 32 alors que je m'attendais à 48), PAR6 sans numéro (je m'attendais à un numéro 2), PAR7 (je m'attendais à un numéro 3). Peux-tu réexpliquer comment le tableau est construit ?

C'est vrai que ce n'est pas forcément évident.

la taille du paquet n'est pas simplement la somme e tous ses paramètres, parce que:
- lorsque qu'on passe du niveau 1 au niveau 2 (ou du deux au 3...), le paramètre de niveau 1 placé juste avant le début du niveau 2 est celui qui contient les paramètres du niveau 2 (dans l'exemple ci-dessus, PAR1 contient donc PAR2/3/4/5). Donc si on compte tout, on compte certaines choses en double.
- il peut y avoir des trous. Par exemple, PAR1 fait 16 bits, mais pourrait ne contenir qu'un paramètre de 12 bits. Il y aurait alors 4 bits inutilisés (mais bien présents)

Pour trouver la position du paramètre dans le paquet, il faut donc prendre sa position dans son parent, y ajouter la position du parent dans son parent, et ainsi de suite jusqu'au niveau 1. C'est là que c'est compliqué.
une fois cette info récupérée, on peut assez facilement déterminer si le paramètre est au début d'un mot.

rebonsoir,

je ne comprends pas plus. peux-tu m'expliquer pourquoi tu ne mets pas de numéro de mot pour PAR6 ?

Ha mais oui, tu as raison ! Je me suis planté !

Le paquet fait bien 48 et on doit avoir un numéro de mot pour PAR6 !

Comme quoi il faut vraiment que cette colonne soit calculée...

Je corrige le post initial.

[EDIT] ha je ne peux pas le modifier, bizarre.

Bonjour à tous,

2 est le niveau maxi ?
eric

Non, ce n'est pas limité. On peut avoir autant de niveaux que souhaité.

bonjour,

une proposition. Sur base de ton exemple et de tes explications, j'en ai déduit que cela revenait à numéroter en séquence tous les niveaux 1.

Merci, mais en fait non, car la taille d'un paramètre n'est pas limité à 16 bits. On peut très bien avoir un paramètre de niveau 1 de 32 bits contenant deux paramètres (de niveau 2 donc) de 16 bits. Ou pire: contenant 3 paramètres (de niveau 2) de 16, 8 et 8).

Dans ce cas là, le no de word changerait au niveau 2 (et on peu ainsi aller dans plus de sous-niveaux.

J'arrive à quelque chose (pas encore satisfaisant) en mixant SOMMEPROD et DÉCALER, afin de prendre toutes les lignes, et d'appliquer des contraintes pour savoir additionner les positions seulement pour:

- les lignes se trouvant au dessus de la ligne courrante --> OK
- les lignes se trouvant à un niveau supérieur à la ligne suivante --> OK
- les lignes se trouvant à un à un niveau supérieur à la ligne courrante --> je galère: la fonction LIGNE sur une cellule précise, utilisée dans DECALER, utilisée dans SOMMEPROD me retourne un tableau (d'une seule cellule) et pas une valeur, et génère une erreur ensuite.
- les lignes ne contenant pas de type "PK" entre celle-ci et la ligne courrante --> même problème que ci-dessus

Il me faudrait un moyen de forcer la non conversion en tableau de certaines méthodes dans un SOMMEPROD.

Tu pourrais fournir un exemple avec tous les cas à traiter ?
Ca sera sans doute plus complet que ce qu'on imagine.
eric

voilà un autre exemple, un peu plus complexe.

Dans l'idéal, il faudrait que je puisse me passer de la première colonne.

J'ai mis à la fin ma tentative, suivie du résultat attendu (pour l'instant je me suis concentré sur récupérer la position en bits dans le packet. Pour avoir le mot, il suffira alors de faire ENT(x/16) ou x est la position en bits.

6nbwords.xlsx (10.05 Ko)
Rechercher des sujets similaires à "calculer position debuts mots structure"