Créer une feuille/variable d'une colonne d'un tableau

laurette31

XLDnaute Nouveau
Bonsoir à tous

Novice en VB, je m'en remets à vous, au bout de 9 jours de recherches et d'essais infructueux :(

voici mon problème :
je travaille à partir d'une extraction d'un logiciel interne, cette extraction est un tableau excel.
ma base de donnée changera donc chaque semaine.

Je pars d'un tableau, qui regroupe des informations sur plusieurs fournisseurs.
J'ai besoin de trier ces informations par fournisseur pour leur envoyer.
Au final, je voudrais garder ce tableau initial, et avoir une feuille par fournisseur, chaque feuille reprenant les lignes qui le concernent.

Je n'arrive pas à créer une boucle qui me trierait ces lignes ...
J'arrive à nommer les feuilles par le nom du fournisseur grace aux données de chaque feuille
c'est déjà un bon point!

Si l'un d'entre vous à une idée pour trier mon tableau et créer les feuilles ... :)

Merci d'avance
 

Pièces jointes

  • test statut.xlsm
    8.7 KB · Affichages: 32

Modeste

XLDnaute Barbatruc
Re : Créer une feuille/variable d'une colonne d'un tableau

Bonjour laurette31 et bienvenue à toi :)

9 jours de recherches en vain, ce doit être frustrant ... ceci dit, des problèmes similaires viennent régulièrement émailler notre cher forum (tes critères n'étaient peut-être pas les bons?)

Ce que tu ne dis pas c'est si les fournisseurs sont connus d'avance (si ce sont toujours les mêmes) ni si les feuilles concernées existent déjà dans ton fichier :confused:

Comme je suis un peu fainéant (et qu'on ne sait pas si tu repasseras par ici) un essai avec des feuilles "AgenceA", "AgenceB" et "AgenceC" existantes dans ton classeur.
Copie-colle le code ci-dessous dans un module standard et exécute-le ... et puis dis-nous si j'ai tout compris de travers :p
VB:
Sub dispatcher()
Set src = Sheets("Feuil1")
Set liste = CreateObject("scripting.dictionary")
For lig = 3 To src.Cells(Rows.Count, 1).End(xlUp).Row
    liste(src.Cells(lig, 1).Value) = ""
Next lig

For Each k In liste.keys
    src.[A2].CurrentRegion.AutoFilter Field:=1, Criteria1:=k
    src.[A2].CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Sheets(k).[A1]
Next k
src.AutoFilterMode = False
End Sub
... Attention, c'est du "brut de fonderie", donc encore brûlant ... mais surtout dépourvu de tous les tests qu'il serait prudent d'effectuer!
 

laurette31

XLDnaute Nouveau
Re : Créer une feuille/variable d'une colonne d'un tableau

Bonjour Modeste

et merci de m'aider.

ta macro marche :) mais je pense avoir mal exprimé mon besoin.

Cette extraction crée à chaque fois un nouveau classeur excel, avec les données brutes en feuille 1 qui se nomme par défaut 'Feuil1'!
Aucune autre feuille n'est nommée.

il faudrait que la macro fasse :
1. elle regarde en Feuil1 en colonne A s'il y a un fournisseur. Tant qu'il y a un nom, elle continue
2. quand elle trouve une ligne avec des données, elle cherche si une feuille existe déjà, portant le même nom que le fournisseur.
-> si elle ne la trouve pas, elle la crée et la nomme
3. une fois la feuille trouvée ou créée, elle y recopie la ligne entière.
4. elle revient en feuille 1 et passe à la ligne suivante.

Ce serait l'idéal car la solution que tu m'as trouvé me ferait créer ces feuilles au début (je peux le faire ;) ) mais la solution ne serait pas pérenne puisque des fournisseurs sortent et se créent chaque mois... et ça me ferait bcp d'onglets (parfois inutilisés) et changer la macro à chaque fois... bref, je ne vois pas cette solution comme envisageable.
Mais ta solution va me servir pour un autre prorjet je pense :D

Merci bcp

Laure
 

Modeste

XLDnaute Barbatruc
Re : Créer une feuille/variable d'une colonne d'un tableau

Bonsoir Laure, le reste du forum :)

J'ai encore un peu de mal à comprendre :eek: si ton extraction crée un nouveau classeur, une feuille au nom d'un des "dépôts" ne saurait pas exister dans ce classeur ... ou alors quelque chose m'échappe?!?

N'oublie pas que -étant dans la situation depuis un bout de temps- tu connais une série de choses que tu ne mentionnes pas ici (sans aucun doute, parce qu'elles te paraissent évidentes!) ... mais que nous ne connaissons pas!
La macro que tu cherches à réaliser s'exécute dans ce nouveau classeur, créé lors de l'importation? Elle doit répartir les données dans un autre classeur déjà existant? Si oui, pourquoi dans ce classeur-là? Les données viennent s'ajouter aux autres infos déjà présentes dans ce classeur? etc...

Le code que j'ai proposé crée une liste sans doublons des noms de dépôts présents en colonne A. Ensuite, pour chaque dépôt de la liste, elle exécute un filtre automatique sur le nom du dépôt en question et copie le résultat du filtre dans la feuille du même nom. En fonction des précisions que tu ajouteras, on devrait pouvoir adapter ...
 

laurette31

XLDnaute Nouveau
Re : Créer une feuille/variable d'une colonne d'un tableau

Bonjour,

Oh ... :( Je suis déçue de m'être mal expliquée.
Bon, je vais essayer de ne rien oublier.

Je fais cet outil pour plusieurs personnes.
A l'heure actuelle, chacun d'entre eux fait une extraction de notre logiciel interne, avec ses paramètres personnels.
L'extraction s'enregistre sur le PC de l'utilisateur, sous format Excel, avec toujours les mêmes caractéristiques :
_il n'y a qu'1 feuille de créée et elle se nomme "Détail"
_aucune autre feuille n'est créée
_cette feuille "Détail" a toujours les mêmes données dans les mêmes colonnes : en Colonne A : le nom des fournisseurs

Je voudrais que la macro tourne dans ce classeur et qu'elle ajoute un onglet par fournisseur différent. Aucun autre classeur Excel.

Ta macro marche parfaitement, à condition d'ajouter au début :

Sheets.Add After:=Sheets(Sheets.Count)
Sheets("Feuil1").Name = "Fournisseur A"
Sheets.Add After:=Sheets(Sheets.Count)
Sheets("Feuil2").Name = "Fournisseur B"
...
et ainsi de suite pour les 60 fournisseurs que nous avons actuellement.

Dans cette solution, le soucis c'est que chacun au final n'a que 10 fournisseurs différents dans son extraction.
Ce ne sera pas pratique pour eux d'aller regarder dans chaque onglet voir quel fournisseur a eu une action.

Pour moi, je me vois mal modifier cette macro à chaque fois, puisque de nouveaux fournisseurs arrivent régulièrement, et certains sortent définitivement.


Si on pouvait rajouter, au début de ta macro, une boucle pour intérroger cette colonne A, voir quels sont les fournisseurs présents, et qu'elles crée les feuilles nécessaires....

Penses-tu que ce soit possible?

Laure
 

Modeste

XLDnaute Barbatruc
Re : Créer une feuille/variable d'une colonne d'un tableau

Bonjour,

Oh ... :( Je suis déçue de m'être mal expliquée.
... Et moi plus encore de ne pas comprendre ce qui te semble limpide :p

Pour ce qui est de créer les feuilles, modifie ma proposition comme ci-dessous:
(toujours dans un module standard, dans le classeur où se fait l'extraction)
VB:
Sub dispatcher()
Set src = Sheets("Détail")
Set liste = CreateObject("scripting.dictionary")
For lig = 3 To src.Cells(Rows.Count, 1).End(xlUp).Row
    liste(src.Cells(lig, 1).Value) = ""
Next lig

For Each k In liste.keys
    Sheets.Add after:=Sheets(Sheets.Count)
    ActiveSheet.Name = k
    src.[A2].CurrentRegion.AutoFilter Field:=1, Criteria1:=k
    src.[A2].CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Sheets(k).[A1]
Next k
src.AutoFilterMode = False
End Sub
... et dis-nous si on a avancé un peu !?
 

laurette31

XLDnaute Nouveau
Re : Créer une feuille/variable d'une colonne d'un tableau

Bonjour à tous

Modeste, c'est incroyable!!! PARFAIT
Tu m'as sauvée

je suis contente :D j'en reviens pas!
c'était donc possible!
c'est juste parfait, et ça marche à tous les coups; j'ai essayé plusieurs extracts, avec des données différentes... Aucun bogg


Merci beaucoup de m'avoir aidée.
Et j'ai aussi amélioré mon autre macro grâce à celle-ci.

Bonne journée à tous :D
 

Discussions similaires

Statistiques des forums

Discussions
312 772
Messages
2 091 975
Membres
105 134
dernier inscrit
ben_internet