Tri/reclassement de données en VBA

Bonjour,

J’aimerai un petit coup de main pour mon projet d’automatisation de tri et reclassement de données, le but final est d’imprimer + envois d’une copie par mail , donc le top serai un projet ou je peux faire cela par simple bouton en VBA

La procédure est la suivante :

Une saisie manuelle de produit est effectué sur ma feuille « Data » au niveau de la colonne C 'Référence" et grâce à la base de donné nommé « Réfs ST » je rempli plus rapidement mes informations de ma feuille « Data » en allant chercher les infos voulu via des formules, jusque la rien de spéciale je pense, en espérant que les formules ne dérangerons pas, ce qui ne m’étonnera pas à vrai dire avec Excel.

Éclatement par famille au niveau de la colonne F « Nomenclature » dans un premier temps et ensuite deuxièmes critères avec la colonne E « Pays origine »
Donc les produits portant la même nomenclature + le même pays origine = même feuille
Produits avec Nomenclature vide = Feuille qu’on avait appeler « sans famille » et cela peu importe le pays d’origine, le premier critère et le plus important.

L’idéal lors de la création des feuilles triées par famille serait que le nom soit la "nomenclatures + pays origine du genre : 500300 (FR)
Produits 4.xlsm (59,5 Ko)

Par contre si deux produits portent la même nomenclature mais avec deux pays différent il seront séparer évidement,

J’ai colorier de même couleur les lignes qui devront être reclasser dans les même feuilles.

Très important, il faut impérativement que les feuilles crée après éclatement soit parfaitement identique à la feuille « Data », je sais ça rajoute une difficulté, mais étant donné que le but est d’imprimer, il faut bien une mise en page.

J’ai crée quelques bouton :

Nouveau projet = Sert à supprimer toutes les feuilles crée sauf celle dont j’ai besoin,
Imprimer = Devra imprimer toutes les feuilles existante, évidemment les feuilles en rapport avec l’éclatement réalisés.

Le module 1 comprend du code VBA qui est censée faire le boulot sur appuis du bouton « éclater » mais je n’arrives pas à l’adapter pour qu’il correspond à mes attente.

Voilà en espérant que mes explications soit claires et que quelqu’un soit motivée pour m’aider :slightly_smiling_face:

Cordialement.

Bonjour

Ci-après ma proposition
J’ai ajouté un onglet « Modèle » image de l’onglet « Data » avec une seule ligne pour les données à intégrer le traitement rajoutant à l’identique le nombre de lignes nécessaire
Cet onglet est utilisé comme référence pour les onglets à réaliser
Je l’ai ajouté comme onglet à ne pas supprimer dans ta macro « DeleteSheets »
Cliques sur le bouton « Eclater » de l’onglet « Base »
Constates le résultat dans les différents onglets rajoutés après l’exécution de ce traitement

Fais moi un retour

Produits 4.xlsm (61,4 Ko)

Salut,

Tout d’abord merci pour ton retour c’est très appréciable,

Petit compte rendu,
Tu as bien compris l’idée du projet donc ont es quasi bon ,

Voici ce qui ne va pas :

  1. Tu as oublié les nomenclatures « vide » qui doivent elle aussi être exportées vers une seule et même feuille, donc peu importe le pays d’origine, voir ligne 33 & 34.

  2. Si on masque la feuille « Modèle » alors il y à un conflit, la feuille « Base » deviens ; 500300(US) et alors la la macro n’est plus utilisable car « Base » est introuvable,
    Si on appuie une deuxième fois sur « éclater » nous avons carrément des données qui viennent s’écrire dessus car base est devenu 500300(US)
    Idem pour le bouton « nouveau projet » qui effacera la feuille nommée à présent 500300(US)…

Mise à part cela, pourquoi avoir utilisé un modèle ? Il n’était pas possible de se baser sur la feuille Data comme modèle ?

Petite amélioration souhaité ;
Il serait préférable que la feuille '« Base » reste à gauche car ce sera la feuille principale du projet, avec tous les boutons ect.
Un petit espace serait le bienvenu entre 500300 & (US)

J’ai remarqué un petit souci également au niveau des des sommes en J et des totaux en bas de page, je ne parviens pas à faire le calcul sur la formule du modèle n’est pas reporté sur les feuilles généré.

Rien d’important ci-dessous :
Pour le coté mise en page, je me suis amusé à définir mes préférences d’impression ; Mode paysage et format A4 taille 1 page et j’ai remarqué que l’éclatement se faisait un peu plus long déjà, peut-être que cela pourrait s’améliorer en VBA ? Ou sinon attendre le moment de l’impression pour bidouiller quelques chose avant impression.

Voila :slight_smile:

Bonjour
Merci pour ce retour

" 1. Tu as oublié les nomenclatures « vide » qui doivent elle aussi être exportées vers une seule et même feuille, donc peu importe le pays d’origine, voir ligne 33 & 34."

J ai scrupuleusement respecté tes consignes :

« Éclatement par famille au niveau de la colonne F « Nomenclature » dans un premier temps et ensuite deuxièmes critères avec la colonne E « Pays origine »
Donc les produits portant la même nomenclature + le même pays origine = même feuille
Produits avec Nomenclature vide = Feuille qu’on avait appeler « sans famille » et cela peu importe le pays d’origine, le premier critère et le plus important. »

Les lignes que tu cites 33 et 34 ne rentrent pas dans ce cadre car n’ont ni nomenclature ni pays donc ne sont pas traitées conformément à tes indications :

« Produits avec Nomenclature vide = Feuille qu’on avait appeler « sans famille » et cela peu importe le pays d’origine, le premier critère et le plus important. »

Il n y a pas de pays donc ne repondent aux exigences

« Si on masque la feuille « Modèle » alors il y à un conflit, la feuille « Base » deviens ; 500300(US) et alors la la macro n’est plus utilisable car « Base » est introuvable, »

Le traitement si l onglet n’existe pas le crée sur la base de l’onglet « Modèle » qu’il soit masqué ou pas masqué l’onglet « Base » dans son traitement n est pas touché
Seule sa position dans la liste des onglets affiché sur le bandeau bouge au grès des créations il faut le rechercher sur sa nouvelle position
Le traitement l’active à la fin de son processus tu dois être dessus à la fin de celui-ci

« Si on appuie une deuxième fois sur « éclater » nous avons carrément des données qui viennent s’écrire dessus car base est devenu 500300(US) »
C est impossible le traitement inscrit sur l onglet qui correspond aux données de la colonne « F » et de la colonne « E » entouré de parenthèses de la ligne traitée pas d autre possibilité
Une deuxième exécution effectuée dans ces onglets de chaque ligne réintègre chaque ligne aucune vérification de leur présence n’est effectuée engendrant des doublons
A voir si ce contrôle dois être mis en place et sur la base de quelle clé sinon on peut en début de procédure supprimer toutes données des onglets existants pour les réintégrer sur la base de celles de l’onglet « Data » et ainsi d’éviter les doublons

Mise à part cela, pourquoi avoir utilisé un modèle ? Il n’était pas possible de se baser sur la feuille Data comme modèle ?"

C’est une solution qui aurait coûté des traitements supplémentaires pour à la recopie de cette onglet pour en créer un nouveau l’appuration des données en place afin de n’intégrer que celles qui correspondent
Plus simple d’avoir un modèle déjà prêt à cette fin

« Il serait préférable que la feuille '« Base » reste à gauche car ce sera la feuille principale du projet, avec tous les boutons ect.
Un petit espace serait le bienvenu entre 500300 & (US) »

C est tout à fait réalisable

« J’ai remarqué un petit souci également au niveau des des sommes en J et des totaux en bas de page, je ne parviens pas à faire le calcul sur la formule du modèle n’est pas reporté sur les feuilles généré. »

Je rajoute dans le traitement le calcule approprié pour cette somme dans les onglets générés

"
Pour le coté mise en page, je me suis amusé à définir mes préférences d’impression ; Mode paysage et format A4 taille 1 page et j’ai remarqué que l’éclatement se faisait un peu plus long déjà, peut-être que cela pourrait s’améliorer en VBA ? Ou sinon attendre le moment de l’impression pour bidouiller quelques chose avant impression."

Mets cette mise en page dans l’onglet « Modèle » elle suivra pour chaque onglet créée avec

1 « J'aime »

Ci-joint ton fichier avec les améliorations suivantes :

Somme colonne « J » des onglets créés et alimentés sur la ligne de la donnée colonne « B » "Total pour le code origine (total per origin code) : "
Ne mets aucune formule dans l’onglet « Modèle » c’est le traitement qui le réalise

Onglets créés mis après l’onglet « Base »

Intégration dans le nom des onglets créés d’un espace entre le numéro de nomenclature et le pays entre parenthèse

J’ai résolu ton souci concernant l’onglet « Modèle » masqué
Le traitement à la création d’un onglet prend celui du modèle masqué dans son intégralité pour en réaliser une copie mais y compris son masquage
Comme il n’est pas actif à l’écran puisque masqué il renomme celui qui l’est c’est à dire l’onglet « Base » au nom approprié
Pour contourner cette situation avant la copie le traitement supprime le masquage de l’onglet « Modèle » réalise le nouvel onglet le renomme puis remasque l’onglet « Modèle »
Ainsi plus de souci mais l’onglet « Modèle » sera maintenu masqué

Pour le reste j’attend tes retours sur les explications que je t’ai fourni

Testes et dis moi

Produits 4.xlsm (61,8 Ko)

1 « J'aime »

Bonjour,

Après plusieurs test, c’est parfait ça correspond bien à mes attentes,
Il manque tout de même l’onglet « sans famille » qui ne semble pas se crée.

Mise à part cela c’est Ok

Possible d’enlever la mise en forme en « GRAS » sur les cellules hormis le total du bas de page ? Arial 9 ou 10 ferais l’affaire.Je constate que malgré des modifications de la feuille modèle ce n’est pas répercuté sur les nouveaux onglets donc je n’ai plus la main sur la mise en forme.

Sinon à part cela je ne vois pas de souci franchement, donc bravo c’est du beau travail.

Ravi de ce résultat qui correspond à tes attentes

« Il manque tout de même l’onglet « sans famille » qui ne semble pas se crée. »

Celui-ci selon tes indications est créé si la donnée « Nomenclature » est absente uniquement donc celle du pays présente
Pour tout enregistrement qui n a pas la donnée « Pays » aucune recopie n est effectuée
Ceci repond à tes exigences :

"Donc les produits portant la même nomenclature + le même pays origine = même feuille
Produits avec Nomenclature vide = Feuille qu’on avait appeler « sans famille » et cela peu importe le pays d’origine, le premier critère et le plus important. »

Si ce n’est pas le cas merci de me dire de manière détaillée l action à exécuter pour chaque cas concernant les données « Nomenclature » et « Pays »

« Possible d’enlever la mise en forme en « GRAS » sur les cellules hormis le total du bas de page ? Arial 9 ou 10 ferais l’affaire.Je constate que malgré des modifications de la feuille modèle ce n’est pas répercuté sur les nouveaux onglets donc je n’ai plus la main sur la mise en forme. »

Peux tu me transmettre un exemple d onglet créé dont les formats attendus ne sont pas ceux souhaités en me detaillant les cellules concernées

Merci

2 « J'aime »

Re,

Toutes lignes comportant la même « Nomenclature et même pays d’origine » seront exporté vers une même feuille, cela est bien respecté donc pas de souci.

Par exemple :

Données à mettre ensemble :

|500300| FR
|500300| FR

Donnée à séparer , la nomenclature est identique mais le pays d’origine est différent donc séparation:
|500300| |US

Encore une fois cela est bien respecté,

Par contre pour les nomenclatures vide, elle doivent toutes être exporté vers une feuille dite « sans famille » car le critère principale de tri est justement la nomenclature, on regarde le pays d’origine une fois seulement que la nomenclature est trié, si la nomenclature est vide alors pas de tri qu’elle qu’il soit, hop tout dans la même feuille « sans famille »

Donc quand la nomenclature est vide = Feuille sans famille ! Peu importe le pays d’origine, voir ligne 33 et 34 du tableau Data

C’est pour cela que je disais :

"Donc les produits portant la même nomenclature + le même pays origine = même feuille
Produits avec Nomenclature vide = Feuille qu’on avait appeler « sans famille » et cela peu importe le pays d’origine, le premier critère et le plus important. »

Pour la mise en page enfaite toutes les feuilles généré après éclatement sont en Gras, donc de B8 à J8 + toutes les lignes ci-après en fonction du remplissage des feuilles, je voudrais garder que la cellule total du bas de page en gras.
Évidement on ne touche pas à l’entête du tableau qui n’est la que pour décorer

« Donc quand la nomenclature est vide = Feuille sans famille ! Peu importe le pays d’origine, voir ligne 33 et 34 du tableau Data »

Quand est il si aucune donnée « Pays » ???

« Pour la mise en page enfaite toutes les feuilles généré après éclatement sont en Gras, donc de B8 à J8 + toutes les lignes ci-après en fonction du remplissage des feuilles, je voudrais garder que la cellule total du bas de page en gras. »

As tu paramétré l onglet « Modèle » dans cet esprit toutes ses lignes qui recoivent les données au bon format à partir de la ligne 8 ?

1 « J'aime »

Ah je comprend mieux l’incompréhension…

Seule les nomenclatures peuvent être vide, jamais les pays d’origine, désolé j’ai oublié de le préciser,
C’est pour cela que j’ai insister que le premier critères était la nomenclature, et c’est seulement après qu’on regarde le pays, donc nomenclature vide = Pas de tri on dégage tout vers la même feuille « sans famille »

Oui j’ai essayé de paramétrer la feuille modèle mais ça ne prend pas en compte les modification.

J’ai fait un test grossier en mettant un fond jaune sur les cellule du tableau modèle et seule les lignes vides on était reporté avec le fond jaune, pas les lignes fraichement exporté des différents tableaux.

J’ai compris la problématique des lignes 33 et 34 qui ne sont pas pris par le traitement
Celui-ci utilise la colonne « G » pour déterminer la dernière ligne à traiter
Or pour ces 2 lignes aucune donnée en colonne « G » le traitement agit jusqu’à la ligne 32
J’ai donc rajouté une donnée pour ces 2 lignes la valeur 0 comme ceci :

Et ainsi les lignes 33 et 34 sont bien traitée avec création de l’onglet « sans famille » dans lequel elles sont intégrées

Pourquoi en colonne « G » ces 2 lignes n’ont pas de donnée ?
Est-il possible de faire en sorte que quelque soit les lignes à traiter cette colonne soit non vide
Sinon quelle colonne utilisée dans cette esprit (toujours remplie et vide à partir de la dernière ligne pour déterminer de façon fiable la dernière à traiter)

Pour le format caractère gras Arial 9 10 j’ai paramétré l’onglet « Modèle » et modifié le traitement pour que ceux-ci suivent tous les onglets créés
Attention minimum 2 lignes dans l’onglet « Modèle » pour recueillir les enregistrements mis à ce format

Voici ton fichier avec toutes ces évolutions

Testes et dis moi

Produits 4.xlsm (63,0 Ko)

1 « J'aime »

Pour la colonne de référence ça peut être la colonne C car la base du projet débute en saisissant des données manuellement dans cette colonne, donc impossible que l’une des cellule en C soit vide alors que les autres cellule de la même ligne soit rempli car tout se base sur la référence du produit en colonne C

Pour la colonne G c’est une erreur de ma part car elle ne sera jamais vide, seule la nomenclature peut être vide en colonne F

Je remarque un souci dans la feuille « sans famille » la colonne H « Quantité » n’a pas été exporté, et petit souci également au niveau des totaux de cette même feuille.

« Pour la colonne de référence ça peut être la colonne C car la base du projet débute en saisissant des données manuellement dans cette colonne »

Cette colonne est handicapée par la donnée "Total pour le code origine (total per origin code) : " qui est dans une série de cellules fusionnées dont une de cette colonne

Je préfère garder la colonne « G » qui même si elle aussi fait partie de cellules fusionnées sur la même ligne reste celle de référence pour celles-ci

« Je remarque un souci dans la feuille « sans famille » la colonne H « Quantité » n’a pas été exporté, et petit souci également au niveau des totaux de cette même feuille. »

c’est le même constat dans l’onglet source « Data » pour ces 2 lignes colonne « H » et « J » donc le traitement ne peux pas faire de miracle et recopie à l’identique :

Modifies la source et la cible « sans famille » pour ces 2 lignes colonne « H » et colonne « J » avec le total devrait en avoir les bénéfices

Corriges testes et dis moi

1 « J'aime »

En effet encore une fois erreur d’inattention de ma part, j’ai corriger et tout fonctionne à présent,
Bah la pour le coup je ne vois plus de souci, tout fonctionne bien :slight_smile:

Un grand merci ça me permettra de gagner pas mal de temps dans le traitement de mes données,

Petite question au passage, j’ai remarqué que dans les versions récente d’Excel je dois d’abord appuyer sur le bouton enregistrer pour que ma formule =SIERREUR(RECHERCHEV s’exécute et aille chercher les infos demandé, une idée sur cela ?

Merci pour ce retour positif

« Petite question au passage, j’ai remarqué que dans les versions récente d’Excel je dois d’abord appuyer sur le bouton enregistrer pour que ma formule =SIERREUR(RECHERCHEV s’exécute et aille chercher les infos demandé, une idée sur cela ? »

As tu ce paramétrage dans les options d’Excel rubrique « Formules » :

Mode de calcul
Calcul du classeur « Automatique » doit être côché

Regardes et dis moi

N’oublies pas de valider ma réponse un plus sympathique

1 « J'aime »

Décidément vous avez réponses à tout mes souci :slight_smile:
Merci

Merci
Ravi de t avoir aidé
N oublies pas de bien alimenter la colonne « G » le traitement de l’intégralité des lignes en depend
Bonne utilisation et au plaisir de t aider à nouveau

1 « J'aime »

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.