Macro pour convertir un tableau en transposition + adaptation

bonjour, depuis plusieurs jours, j essaye d'apprendre avec chatgpt pour faire cette macro, mais il m enerve et j'ai fini par lui dire qu'il etait nul ^^, en gros des que le code devient un peu long, il le fini jamais, et je n'arrive pas toujours à suivre ou il en est, car.... j y connais rien

en gros voici la macro que j'essaye de lui faire ecrire.

faire un clean des feuilles qui s appellent (format tarif remisé voulu) et (format voulu remise)

Sur une feuille dont le nom est TARIFS

selectionner les colonnes depuis la premieres (Article_id), jusque celle qu s'appelle: Plage_quantitative, je ne donne volontairement pas de numero de colonne, car le nombre de colonne peut être amener à bouger mais pas celle ci.

ensuite collé les valeurs dans les feuilles (format tarif remisé voulu) et (format voulu remise) et filter les doublons , en gardant l'entête, depuis la colonne qui s'appel Article ID.

Puis, c est là que ça se complique niveau comprehension.

toujours dans la feuilles TARIFS, allez à la colonne qui s'appel Famille_client, mémoriser les valeurs sans doublons et sans retenir l'entête (puique l'entête est Famille_client)

coller ses valeurs en transposition dans les feuilles (format tarif remisé voulu) et (format voulu remise), apres la colonne dont l'entête est Plage_quantitative.

ensuite, j en etais pas arrivé là:

dans la feuille "format voulu remise"

dans la colonne qui suit Plage_quantitative, coller la formule suivante en ligne numero 2: =SI($H2<>0;(1-('format tarif remisé voulu'!M2/'format tarif remisé voulu'!$H2))*100;""), en ayant pris soin de remplacer H2 par la colonne dont l'entête est : PUHT et m2 par la colonne dans la quelle il vient de copier la formule, puis tirer la formule jusque la derniere colonne, et la derniere ligne

dans la feuille format tarif remisé voulu copier toute les valeur trouver dans la colonne dont l entete est PUHT, dans la colonne dont l'entete est KIN

pour les deux dernieres demandes, c etait pas les plus complexe car j'aurais pu copier la formule et la glisser, mais vu qu a la base on demande un clean, ça va m effacer ma formule.

donc ensuite je fais mes petites affaires, et apres je dois remettre en forme, comme la feuille TARIFS

donc:

dans la feuille "tarifs pret à l import"

faire un clean de la feuille

copier et coller, l'ensemble des valeurs de la feuille TARIFS, vider les valeurs des colonnes dont l'entete est Taux_remise et PUHT_remise , sans effacer l entete.

dans la ligne numero deux de la colonne dont l entete est Taux_remise, coller la formule suivante: =SIERREUR(INDEX('format voulu remise'!$A$1:$ZZ$9999;EQUIV($A2;'format voulu remise'!$A$1:$A$9999;0);EQUIV($M2;'format voulu remise'!$A$1:$ZZ$1;0));"")

en prenant soins de de remplacer la colonne M, par la lettre de colonne qui contient l entete Famille_client

et dans la cellule PUHT_remise : =SIERREUR(INDEX('format tarif remisé voulu'!$A$1:$ZZ$9999;EQUIV($A2;'format tarif remisé voulu'!$A$1:$A$9999;0);EQUIV($M2;'format tarif remisé voulu'!$A$1:$ZZ$1;0));"")

idem on ecrit pas M2

voila ce que j ai essayer de lui faire faire, mais je galerer deja a lui faire la mise en forme du tableau, et de remplir avec les valeurs sources...

Bonjour,

Pour commencer, un fichier joint (allégé et dépourvu de données confidentielles) serait le bienvenu, parce que malgré toutes vos explications, on ne sait pas comment ce dernier est construit.

Et parce que, déjà là, je me pose les questions suivantes:

Les données sont -elles dans un tableau structuré?

-si OUI , Quel est sont nom?

-si NON, est-ce la ligne 1 qui comportent les entêtes?

Sans ces précisions, difficile d'aller plus loin sans faire quoi que ce soit de correct et qui réponde du premier coup à vos attentes.

donc, un fichier joint est l'idéal pour commencer sur de bonnes bases.

Cdlt

oui tableau structuré avec entête, car elle provienne d un export logiciel, mais la façon dont c est exporter, rend la modification en masse très difficile

Le but est de pouvoir appliquer des formules avec cliquer glisser dans les feuilles intermédiaires

5tarifsgpt.zip (969.71 Ko)

C'est juste un petit exemple car le tableau original fait 26000 lignes

Voici un premier jet, je dois m'absenter un moment, je terminerai à mon retour. Il me manque les formules, mais je n'ai pas très bien compris dans quelles colonnes (titres de colonnes) elles devaient aller, si vous pouviez en direz plus.

Cdlt

merci je regarde ça, et je vous redonne un exemple avec les formules dans les bonne cellules ça sera plus simple

je dos etre couille, car le bouton a cliquer ne clique pas...

j'ai affecter la macro au bout

premier essai, il est ok, par contre j ai raouter une colonne en plein milieu de la feuille tarifs

nouvelle essai, il n efait plus la copie transposé

Oui, avant d'envoyer le fichier, je l'ai allégé et en ai oublié d'affecter le bouton à la macro, voilà qui est fait.

J'avais bien précisé que c'était un premier jet, voici les corrections apportées

aucun soucis c est juste que je comprenais pas ce que j avais mal fait

ça marche nickel pour la mise en forme et ça d asapte si on rajoute une colonne, sauf que on a pas besoin de la colonne Famille_client, elle ne sert a rien dans les feuilles intermediaire puisqu on transpose les valeurs



je t ai mis differente couleur pour que tu repere ce qui est des formules rattachés au autre donnée.

j'ai rajouter à la main la colonne, TVA, car elle ne faisait pas parti de l export et je viens de le demander, je ne connais pas précisement l'entête de cette futur colonne, mais je saurais allez fouiné dans la macro pour la trouver et la renommer

Problème; quelle est la formule pour "PART" dans format tarif remisé voulu et les formules après 'REV"

En attendant, voici le fichier pour une première analyse de votre côté.

Cdlt

alors, pour le moment aucune, j attendais la bonne mise en forme pour decider d'une formule que je dois reflechir, je mettrais les base sur une autre feuille

et bien ecoute, je trouve qu on est vraiment pas mal, merci beaucoup, lorsque je vais avoir la version definitive de mon export, je vais essayer de lire et mieux comprendre ton code, meme cette partie n est pas le probleme, l'adapter en fonction des nouveaux elements, j y arrive, mais partir d'une page blanche... c'est impossible

du coup il n y a plus que la feuille tarifs pret à l import a terminer et je vais pouvoir me mettre sur les formules

sur cette page c est pas compliquer, on fait un copier coller de la page tarifs, on vide les valeur des colonnes puht remise et taux remise et on copie coller les formules qui sont deja dedans

Bonjour,

Voici la suite, cela vous semble-t-il correct?

Cdlt

alors je vais rajouter une petite precision

tu a mis une formule dans la colonne dont l entete = REV : =$G2/2 je vais rajouter une condition si la cellule dans la colonne (entete = Model_tarif) = TARIF ALORS $G2/2 sinon rien

sinon dans la derniere feuille, j ai pas l'impression que X2 soit defini en fonction de la colonne dont l'entete est Famille_client

=SIERREUR(INDEX('format voulu remise'!$A$1:$BP$37487;EQUIV($A2;'format voulu remise'!$A$1:$A$37487;0);EQUIV($X2;'format voulu remise'!$A$1:$BP$1;0));"")

et idem pour PUHT_remise

Ba écoute ça a l'air vraiment pas mal

si je peux abuser je rajouter un dernier truc que je viens de me rendre compte

donc on a dit que si Modele_tarif = Tarif alors dans la colonne Kin on met la valeur de puht, et dans celle de rev on met puht/2

alors je viens de me rendre compte d'un truc qui fait que je vais modifier tarif en tarif pkd avec la meme regle

et je vais te demander une nouvelle regle je vais faire en sorte que les modeles de tarif s'articule de la maniere suivante sauf pour tarif pkd, si tarif + " "+ le nom de la famille client

exemple

tarif drex

tarif ise

tarif spo

etc...

alors dans la colonne correspondante, on met le puht de la ligne

moi je vais m assurer de reecrire correctement les orthographes pour que ça se fasse bien

Modifications faites toutefois, précisez à chaque fois à quelle feuille s'adressent les modifications, parce que parfois, je ne sais plus à quelle feuille il faut attribuer telle ou telle formule.

donc on a dit que si Modele_tarif = Tarif alors dans la colonne Kin on met la valeur de puht, et dans celle de rev on met puht/2, précédemment, on n'avait pas parler de modifier la colonne KIN comme celle de REV (c'est à dire , tenir compte de "TARIF"), donc je l'ai intégré aussi dans la formule, me dire si j'ai bien fait ou pas.

alors de ce que je vois, je sais pas si c est moi qui est exprimé une mauvaise indication, mais je vois que la colonne Taux_TVA (dont il faut changer le nom ds le code), est considerer comme un entier, hors j ai de la tva a 5.5, qui est donc considerer comme 6

Mais j ai surtout l'impression qu elle est considéré comme un entier des l'import ,donc je ne sais pas si le fait de formater cette colonne definitivement au debut le fera pour les feuilles intermediaires et final?

du coup, il faudrait formater sur toute les pages cette colonne en nombre avec 1 decimale

ensuite, je viens de m'aperçevoir je suis limité en nombre de caractere (10 caractere), cela veut donc dire que le debut etant "TARIF ", il ne reste de la place que pour 4 caracteres, ce qui correspond donc au 4 premiere caractetes de la famille client

exemple, famille drexco modele tarif: TARIF DREXCO

sinon je vais pas m embeter je vais appeler les modeles de tarifs differement

en gros, PKD va etre le modele de tarif avec la colonne KIN = puht et REV = pUHT/2 dans la feuille 2 et 3? j ai oublié que kinpromo= PUHT aussi

ça sera la seule exception, je veux bien que tu commente cette partie pour que je puisse aller rajouter des familles au cas ou j en aurais oublié pour pas t embeter

pour les autres je vais faire en sorte que nom tarif = nom famille client, comme ça plus simple

et je veux bien que tu commente cette partie, au cas ou, et surtout la partie exception de PKD, car je peux etre amener à la dupliquer pour que ça concerne une autre famille plus tard

Exemple la tarif ekidis, sera amener à mettre la famille client "ecurie" "pro chev" à PUHT et la famille "Veto" à 0.7*PUHT et la famille "REV CHEV" à PUHT/2 pour les fueilles 1 et 2

mais pour le moment je ne m'interesse pas encore à cela , je souhaite deja finir le debut

sur la feuille 4 tu peux aussi enlever les couleurs, je le fais systematiquement

conçernant les formules dans les feuilles 1 et 2 je remarque des erreurs de valeurs je pense qu'il faut mettre

=SI($G2<>0;(1-('format tarif remisé voulu'!P2/'format tarif remisé voulu'!$G2))*100;"")

en

=SI(et($G2<>0;'format tarif remisé voulu'!P2);(1-('format tarif remisé voulu'!P2/'format tarif remisé voulu'!$G2))*100;"")

et pareil pour l'autre

a oui et truc que je viens de voir et comprendre, les articles qui ne sont pas gerer en "TARIF" ont donc le champs Famille_client vide, du coup, dans ta creation de colonne dans les feuilles 1 et 2, on se retrouve avec une colonne 0.00

a prrio ce n est pas plus genant que ça

alors de ce que je vois, je sais pas si c est moi qui est exprimé une mauvaise indication, mais je vois que la colonne Taux_TVA (dont il faut changer le nom ds le code), est considerer comme un entier, hors j ai de la tva a 5.5, qui est donc considerer comme 6
du coup, il faudrait formater sur toute les pages cette colonne en nombre avec 1 decimale

Si les pourcentages sont avec une décimale, ils seront reportés tels quels dans les autres feuilles, pas besoin de formatage spécifique.

*****************************************************************************************************************************************
ensuite, je viens de m'aperçevoir je suis limité en nombre de caractere (10 caractere), cela veut donc dire que le debut etant "TARIF ", il ne reste de la place que pour 4 caracteres, ce qui correspond donc au 4 premiere caractetes de la famille client

Ce que j'avais fait jusqu'à présent: La formule ne prenait en compte que les 5 premiers caractères "TARIF DREXCO" tout ce qui était après on n'en tenait pas compte, à partir du moment où il y avait inscrit "TARIF" cela suffisait.

Maintenant si pour chaque tarif il y a des pourcentages différents à appliquer, et que le nombre de caractères est trop grand, alors il est inutile de mettre le mot "TARIF" ou du moins, pas tous les caractères, exemple pour: "TARIF DREXCO" mettre "T_DREXCO"
*****************************************************************************************************************************************
en gros, PKD va etre le modele de tarif avec la colonne KIN = puht et REV = pUHT/2 dans la feuille 2 et 3? j ai oublié que kinpromo= PUHT aussi ça sera la seule exception, je veux bien que tu commente cette partie pour que je puisse aller rajouter des familles au cas ou j en aurais oublié pour pas t embeter pour les autres je vais faire en sorte que nom tarif = nom famille client, comme ça plus simple et je veux bien que tu commente cette partie, au cas ou, et surtout la partie exception de PKD, car je peux etre amener à la dupliquer pour que ça concerne une autre famille plus tard Exemple la tarif ekidis, sera amener à mettre la famille client "ecurie" "pro chev" à PUHT et la famille "Veto" à 0.7*PUHT et la famille "REV CHEV" à PUHT/2 pour les fueilles 1 et 2

Là, je n'ai rien compris. Attention, vous êtes dans votre élément, moi pas, donc dites vous bien que j'ignore totalement ce que doit faire l'application et quels sont les termes utilisés. Donc dans le cas présent, je ne comprends absolument pas ce qu'il faut faire.
*****************************************************************************************************************************************

=SI(et($G2<>0;'format tarif remisé voulu'!P2);(1-('format tarif remisé voulu'!P2/'format tarif remisé voulu'!$G2))*100;"")

Etes-vous sûr que cette formule fonctionne? si je la mets en place, elle me retourne "#VALEUR",

et pareil pour l'autre, ce sont les mêmes formules pour les 2 feuilles?

ok je vais recommencer pour etre plus clair

pour la colonne Taux_TVA (à remplacer au lieu de tva),il y a des valeurs dans le csv qui sont à 5.5, hors quand je les importe, elle apparaissent à 6, et sont reporté de la même maniere dans les autre feuilles, donc il faut qu on soit vigilant à cela.

Pour les tarifs, je me suis aperçu, que si je traitais pas les cas de Modele_tarif particulier, ça allait me faire une boulette lors du reimport. et je me suis aperçu que le nombre de caractere etait limité à 10 dans le champs.

donc pour simplifier les choses, j'ai renommer tout mes modeles de tarifs, en mettant le Nom de la Famille_client correspondant

donc sauf cas particulier à la suite, ont dira que si Modele_tarif=Famille client, alors on reporte le PUHT dans la feuille 2 (je met feuille 2 car j'ecris le post de tête, j ai plus l orthographe exact, la feuille 2 est celle des tarif remisé voulu, celle ou on inscrit le puht), et tout les autres Famille_client à 0

ensuite les cas particuliers j'en denombre 3

modele_tarif = pkd on met la cellule qui correspond à la famile_client "kins" et "kinprom" = PUHT, et "REV"= PUHT/2, ça c est ce qu on a fait jusque la mais sans KINPROM

ensuite modele "PEONY", on met esth+kins+kinprom= puht, et rev = puht/2

ensuite modele "ekidis",on met "ecurie" +"pro chev"v = puht ; "veto" à 0.7*puht ; "rev chev"= puht/2

conçernant ces cas particuliers, est ce que tu veux bien commenter ton code en français pour que je retrouve aisement ces cas et les ajuster si necessaire?

pour cette formule, idem reponse de tete:

l'element format tarif remisé voulu'!P2, donc la colonne P est defini par le modele_tarif, dans la feuille 3 si je dit pas de betise


en fait le probleme se pose lors d'un cas particulier, certain article dans la base n'ont pas de modele de tarif, et c est normal, je ne gere pas que des articles a vendre,du coup, on donne une formule de calcule de quelque chose que l on a tester comme etant different de 0 avec un champ vide, donc le retour est erreur

en ayant essayé la formule suivante, cela corrige le probleme, en gros cela veut dire que pour faire l operation, les deux valeur doivent etre des nombre, sinon rien

=SI(et($G2<>0;'format tarif remisé voulu'!P2);(1-('format tarif remisé voulu'!P2/'format tarif remisé voulu'!$G2))*100;"")



et en decoule la derniere remarque, lors du traitement de la feuille TARIFS, dans ton exemple tout les articles ont un modele de tarif, donc toutes les colonnes sont pleine de champs avec des LETTRES, mais j ai le cas particuliers d'articles sans modeles de tarif et donc par consequent dans Famille_client, en gros un article= 1 ligne au lieu de plein comme les autres.


la consequence est que quand tu fais le transposition des valeurs dans doublon dans les feuilles 2 et 3, et bien on se retrouve avec une colonne dont l entete est 0.00

ce qui veut dire qu il faut filtrer les doublons et eleminer les cellules vides




en gros si un modele de tarif est present pour l article, cela veut dire que l on peut traiter des prix differents pour l'articles famille _client par famille_client, cela duplique donc la ligne artcle autant de fois qu il y a de famille_client, c'est ce qui fait la complexisté de cette base de donnée, j ai 26 000 lignes à gerer....correctement...

Rechercher des sujets similaires à "macro convertir tableau transposition adaptation"