Extraction Mise en Ordre (Crack VBA)

Bonjour le Forum,

Je vais essayer d'être clair et précis

Sur ma Feuil2 j'extrait d'un logiciel des données que je colle de: A1 à IXXX

Mais je ne prête pas attention des deux premières lignes, je travail seulement à partir de la ligne 3.

La colonne A me donne une arborescence. (J'ai retranscris exactement le rendu final à obtenir en Feuil1)

[exemple j'ai une grosse poupée russe puis à l'intérieur j'ai une moyenne et encore à l'intérieur de la moyenne la petite]

Et on recommence à chaque fois que l'on retombe sur le chiffre 1 de la colonne A.

Jusque là le logiciel d'extraction le fait dans l'ordre.

J'aurai voulu qu'à chaque 1 on saute une ligne avant.. Pour bien les séparer dans ma feuil1. (Comme je l'ai fait)

Parfois dans mon arborescence j'ai mon 1 et plusieurs 2 dans ce 1 [Donc plusieurs poupée russe moyenne ]

Elle seront sur la même colonne B de ma feuil1 du coup.. pour retranscrire l'arborescence..

(Là j'avais fait une formule:

=SI('Feuil2'!$A3=1;'Feeuil1'!$B3;"")

Mon problème c'est le saut de la ligne vierge avant chaque nouveau 1, je ne sais pas comment la prendre en compte si ce n'est en passant pour le VBA..]

De plus, j'aurai voulu que ça reclasse dans l'ordre mes sous parti 2 et 3 dans chaque nouveau 1.

[Exemple dans ma feuil2 ligne 10 et 11, la ligne 10 est le n° 29 et la ligne 11 est le n°28. Il faudrait passer le numéro le plus petit 28 avant le grand 29. Mais ne pas passer la ligne 9 qui a le grade 1 car c'est un nouveau 1 (numéro12) avant la ligne 3 grade 1 (numéro20) ]

Si réalisable ... sinon tant pis.

Autre problème, au niveau des "Point" colonne D (c'est plutôt Quantité que point)

[Pour continuer avec l'explication des poupées russe prenons la ligne 3 j'ai 2 numéro 20 et dans chaque numéro 20 j'ai 2 numéro 22 (ligne 4) il me faudra donc en réalité 4 numéro 22 ET dans chaque numéro 22 j'ai 1 numéro 25 (ligne 5) donc en réalité il me faudra 4 numéro 25 aussi. ] J'espère être clair.. :/

Avant dernier soucis, ma colonne G et H feuil2 doivent s'accoupler dans ma feuil1 avec un "x" au milieu. Sachant que parfois l'une des deux peut être vide auquel cas il ne faut pas mettre de "x".

Dernière chose double clic colonne J ou S dans la cellule pour afficher la croix X

Tout ceci en commençant en A6 sur la feuil1.

Du coup c'est un excel trop poussé pour moi..

Dans l'espoir d'avoir été clair au niveau de mes explications..

Sebyg

Bonjour

Rien compris concernant les points

Une solution via PowerQuery (add on sur 2013, intégré à partir de 2016) à revoir une fois le problème des points explicité

Bonjour,

Un essai pas complet :

Bonjour,

Je ne connais pas PowerQuery, est-ce long (nb de clic environ..) comme démarche pour créer le tableau que vous avez fait ?

Mon but première est de vraiment gagner du temps. Un coller sur la Feuil2 un clic sur le bouton et hop la Feuil1 est fait on l'imprime c'est fini.

Mais le tableau vert fait me dit déjà qu'il y a des possibilités je suis content !!

Concernant les points je vais essayer de passer par un exemple. Toujours sur la ligne 3/4/5 (Grade 1/2/3) :

Il y ligne 3 (Grade 1) 2 Verres d'eau

Ligne 4 (Grade 2) 2cl d'eau / Verre Donc au total 4cl d'eau

Ligne 5 (Grade 3) 1 dose de sirot par 2cl d'eau Donc 1*2=2 que l'on multiplie encore au deux verres d'eau DONC 2*2=4 --> Ou plus simple il y a 4cl d'eau donc 4*1=4

Bonjour,

Un essai pas complet :

Copie de Extraction Mise en Ordre.xlsm

Un très bon essai déjà !!

Le principe c'est ça oui, mais il n'a pas pris en compte les lignes 26/27/28, il n'y a pas eu de saut de ligne et n'a pas mis les bons points..

Mais excellent ça me certifie que c'est faisable via le VBA du coup !! ^^

Bonjour,

Un essai pas complet :

Copie de Extraction Mise en Ordre.xlsm

Un très bon essai déjà !!

Le principe c'est ça oui, mais il n'a pas pris en compte les lignes 26/27/28, il n'y a pas eu de saut de ligne et n'a pas mis les bons points..

Mais excellent ça me certifie que c'est faisable via le VBA du coup !! ^^

Je crois que j'ai oublié d'incrémenter la ligne de fin pour les points il faudra que je check ça...

EDIT:

Une version où j'ai suivi les valeurs pour voir si c'était cohérent:

Si ce n'est toujours pas bon il va falloir me dire en quoi les points ne sont pas bons.

Bonjour,

Je ne connais pas PowerQuery, est-ce long (nb de clic environ..) comme démarche pour créer le tableau que vous avez fait ?

Mon but première est de vraiment gagner du temps. Un coller sur la Feuil2 un clic sur le bouton et hop la Feuil1 est fait on l'imprime c'est fini.

Mais le tableau vert fait me dit déjà qu'il y a des possibilités je suis content !!

bonjour

je réponds à la place de Chris, il me pardonnera

PQuery permet de construire des sortes de macros !

et donc une fois créé, il suffit de cliquer "acutaliser" et il réexécute les lignes d'instructions

le nombre de lignes importe peu, des centaines s'il le faut

le GROS avantage : on ne tape pas le code, on utilise le GUI très complet. Gé-ni-al !

à tester d'urgence !

amitiés à tous

Je crois que j'ai oublié d'incrémenter la ligne de fin pour les points il faudra que je check ça...

EDIT:

Une version où j'ai suivi les valeurs pour voir si c'était cohérent:

Copie de Extraction Mise en Ordre.xlsm

Si ce n'est toujours pas bon il va falloir me dire en quoi les points ne sont pas bons.

Non la c'est bon les points fonctionne au top !!!

Tu as bien compris

Ça prend déjà forme j'ai l'impression que c'est presque fini

D'accord jmd perso pour l'information ça n'as pas l'air mal effectivement. Il faut que j'y fasse un tour. Merci.

Re

Ton ordre de départ n'est pas celui de ton exemple cible ce qui modifie le calcul...

Concernant PowerQuery :

Une requête utilise une logique base de données différente d'Excel et donc d'un code VBA : une fois paramétrée elle peut agir sur tout nouveau contenu dans la source (on ne modifie pas la source) d'un clic.

Il y a peu d'opérations à réaliser dans la requête que j'ai fournie.

Cependant ton calcul de points a une logique récursive qui n'est pas le plus simple à gérer dans la logique base de données d’autant que le lien ici est purement topologique et comme dit plus haut semble à géométrie variable...

De ce fait VBA en parcourant les lignes une à une de haut en bas répond plus facilement à ce problème de récursivité.

De rien!

Bonne continuation avec l'autre solution si elle t'intéresse!

Crois-tu qu'il est possible de trier la colonne B à l'aide des Grades comme l'exemple de la Feuil1 ?

Oui j'y regarderai mais plus tard, là je souhaite vraiment du VBA. Derrière j'essai de comprendre les lignes d'écriture ça m'apprend en même temps

Oui je pense que c'est possible de trier les numéros en prenant en compte les grades, le plus dur c'est de faire ça le plus rapidement, c'est à dire avec le moins de calculs possible...

Je peux essayer de te programmer ça si tu le souhaites, mais je ne te garantis pas que ça ira super vite...

Personnellement même si ça prend 1 minutes ce serra toujours plus rapide que avant tout faire à la main..

Du coup si ça ne te dérange pas je veux bien oui avec plaisir !!

Si ce n'est pas trop demander les colonnes G et H doivent ne devenir qu'une seule colonne séparé par "x" sauf que parfois l'une des deux peut être vide et du coup on ajoute pas le "x"..

Rebonjour,

Après avoir pas mal planché sur le sujet...

J'ai trouvé une solution qui je l'espère sera rapide sur de gros fichiers, ça trie bel et bien par numéro les éléments qui découlent du même grade et qui sont au même grade.

J'ai utilisé une logique de parent/enfant pour garder la structure du fichier, j'ai vérifié et ça n'a rien mélangé.

Je te laisse voir le résultat, j'ai ajouté le coup du x pour combiner les valeurs quand tu en as plusieurs, ça c'était pas trop compliqué

Merci de me faire un retour pour savoir si ça te convient

Le fichier:

J'ai utilisé deux colonnes qui ne sortent pas sur le tableau final mais qui apparaissent dans le tableau VBA qui s'appelle tableau, une colonne qui enregistre combien d'enfant possède un numéro, et une autre qui enregistre le numéro de son parent. J'ai aussi un tableau de tri qui se contente de trier par grade puis par numéro les numéros, il ne contient que 3 données, le grade, le numéro, la position dans le tableau d'origine.

J'ai également différentes collections qui contiennent les positions des parents etc...

Pour obtenir le tableau final je parcours à nouveau le tableau de tri à partir duquel je vais voir les infos des numéros, j'affecte ensuite des décalages afin de savoir où positionner les données dans la base de données. Ce n'était pas facile à développer de mon côté car première fois que je faisais quelque chose d'aussi compliqué... Mais je peux te l'expliquer plus en détail et surtout j'espère que ça permettra vraiment d'aller vite en terme de traitement, de mon côté c'est instantané mais en même temps, sur un fichier de 20 lignes...

C'est très très bien !! Même encore mieux que ce que je pensais réalisable..

En plus avec explication de l'écriture VBA Merci !

Et tout en gardant cette arborescence crois-tu qu'il est possible d'insérer deux colonnes. Ce qui permet au Grade 1 d'être Colonne A, Grade 2 d'être en colonne B et Grade 3 d'être en colonne C ? Puis supprimer la colonne Grade. Et on retrouve en colonne D; Numéro etc.. Du coup retrouver l'exemple de la Feuil1 ?

PS: J'ai besoins des 7 premières lignes dispo du coup commencer en A8. J'ai voulu modifier:

tableau = Range("a3", "k" & lig_fin)

en

tableau = Range("a8", "k" & lig_fin)

Mais ce fut un échec

Ça m'a l'air effectivement très compliqué et pourtant quelque part logique..

Je vais me pencher dessus si j'ai des questions je reviendrais vers toi.

C'est instantané également.

Je pense que le max de ligne serra de 40-50..

Ah mince....

C'est pénible ça si il faut y mettre sur des colonnes différentes...

ça peut se faire mais pénible...

Quel est l'intérêt d'y mettre sur différentes colonnes? tu ne pourras pas filtrer par grade par exemple

Qu'entends-tu par garder les 7 premières lignes disponibles?

C'est pour que ça saute au yeux sans avoir à aller chercher en face son grade.

Du coup dès qu'il se trouve décalé tu sais qu'il est de tel ou tel grade.

Lecture rapide et efficace..

Ceci dit si c'est trop pénible j'ai une idée !!!

On peu élargir la colonne et du coup Grade 1 on effectue un alignement à gauche, Grade 2 Centrer et Grade 3 Alignement à droite ce qui pose moins de soucis non ? Et c'est le top

Concernant les 7 premières lignes c'est que je vais avoir pleins de chose du genre la date, Des noms..

Dans ce cas on peut soit mettre des couleurs, soit mettre des points pour décaler par exemple

1 points pour le grade 2, 2 points pour le grade 3, 0 point pour le grade 1 par exemple...

Je modifierai tout ça quand je pourrai... (là je ne peux pas actuellement)

Je comprend, mais une lettre ou un point ou une virgule poserai soucis pour la suite de mon fichier.

L'idée de l'alignement à gauche, à droite et centrer, ce n'est pas possible ?

Oui oui pas de soucis, c'est déjà très sympas de prendre de ton temps ce projet.

Non ça peut se faire mais ce n'est pas terrible comme solution, j'aimerai trouver une solution pour même quelque chose qui ait 4-5-6 niveaux de grade

EDIT:

On peut augmenter le retrait dans la cellule sinon, ça aura le même effet mais ça ne modifiera pas la valeur de la cellule.

Rechercher des sujets similaires à "extraction mise ordre crack vba"