Résolu Office 365 Extraction de données vers plusieurs classeurs avec mise en forme et formule

TCMM

XLDnaute Nouveau
Bonjour,

J'ai une base de données avec 2 premiers onglets qui ont des mises en page précise et des formules (RechervheV entre ces deux onglets). J'ai un 3ième onglet avec des adresses des personnes.

Je cherche une macro qui permet de créer plusieurs nouveaux classeurs Excel (contenant mes deux premiers onglet seulement) avec les données de chaque personne et qui conserve la même mise en page et les formules. Chaque fichier doit porter le nom de l'adresse mail de la personne.

Pouvez vous m'aider avec cette tâche manuelle et fastidieuse?

Ci-joint le fichier
 
Ce fil a été résolu! Aller à la solution…

Fichiers joints

GALOUGALOU

XLDnaute Occasionnel
bonjour tcmm bonjour le forum
un début de solution dans le classeur ci joint
je peaufine ce soir je posterai un autre classeur demain
cordialement
galougalou
 

Fichiers joints

laurent3372

XLDnaute Occasionnel
Supporter XLD
VB:
Sub CréationFichiers()
    Dim rAddr As Range
    For Each rAddr In [Table_Adresse[Adresse]]
        Sheets(Array("Inventaire", "Stock")).Copy
        ActiveWorkbook.SaveAs rAddr.Value & ".dat"
        ActiveWorkbook.Close
    Next rAddr
End Sub
La macro est courte, comme tu peux voir.
 

TCMM

XLDnaute Nouveau
Merci, mais le filtre n'est pas éffectué sur l'ID de chaque personne. Le fichier duplique juste mes deux onglets et renomme.

Mais dans l'onglet "Inventaire", le filtre n'est pas effectif par rapport à l'ID de la personne
 

TCMM

XLDnaute Nouveau
VB:
Sub CréationFichiers()
    Dim rAddr As Range
    For Each rAddr In [Table_Adresse[Adresse]]
        Sheets(Array("Inventaire", "Stock")).Copy
        ActiveWorkbook.SaveAs rAddr.Value & ".dat"
        ActiveWorkbook.Close
    Next rAddr
End Sub
La macro est courte, comme tu peux voir.
Merci je l'ai vu. Mais le filtre n'est pas fait en fonction de l'ID de la personne dans l'onglet "Inventaire"
 

GALOUGALOU

XLDnaute Occasionnel
bonjour tcmm, bonjour le forum
le bouton dans l'onglet inventaire déclenche une macro qui créee un nouveau classeur le renomme selon vos problématiques, et le ferme.
il n'a pas de limitation aux nombres de classeur.
une gestion des erreurs (quand un classeur porte déjà le nom) arrete la macro avec informations.
A la fin de la procédure reste ouvert le classeur d’origine
cordialement
galougalou
 

Fichiers joints

TCMM

XLDnaute Nouveau
bonjour tcmm, bonjour le forum
le bouton dans l'onglet inventaire déclenche une macro qui créee un nouveau classeur le renomme selon vos problématiques, et le ferme.
il n'a pas de limitation aux nombres de classeur.
une gestion des erreurs (quand un classeur porte déjà le nom) arrete la macro avec informations.
A la fin de la procédure reste ouvert le classeur d’origine
cordialement
galougalou
bonjour tcmm, bonjour le forum
le bouton dans l'onglet inventaire déclenche une macro qui créee un nouveau classeur le renomme selon vos problématiques, et le ferme.
il n'a pas de limitation aux nombres de classeur.
une gestion des erreurs (quand un classeur porte déjà le nom) arrete la macro avec informations.
A la fin de la procédure reste ouvert le classeur d’origine
cordialement
galougalou
Merci pour la réponse. Mais ça ne répond pas vraiment à ma problématique.

L'extension n'est pas du type xlsx.
De plus le filtre n'est pas effectué dans l'onglet "inventaire" en fonction de l'ID.
Le nom est précédé de chiffre 1-XXX@yahoo.fr
 

GALOUGALOU

XLDnaute Occasionnel
ok j'ai construit le classeur un peu vite pour vous proposez le début d'une solution, ce n'est pas une solution finale.
l'extension pas un problème on peut la gérer dans la macro

le chiffre correspond à l'id de l'onglet adresse
il suffirait de gerer cela dans l'onglet adresse pour que le nom remplace le n°
je vais essayer de vous concocter un autre classeur

par contre pourriez vous m'éclairer sur la fonction filtre que vous souhaitez ?
dans le nouveau classeur ou dans le classeur d'origine ou dans les deux ?
faut-il que le nouveau classeur ne comporte les données que du client identique au nouveau classeur ?
cordialement
galougalou
 

TCMM

XLDnaute Nouveau
ok j'ai construit le classeur un peu vite pour vous proposez le début d'une solution, ce n'est pas une solution finale.
l'extension pas un problème on peut la gérer dans la macro

le chiffre correspond à l'id de l'onglet adresse
il suffirait de gerer cela dans l'onglet adresse pour que le nom remplace le n°
je vais essayer de vous concocter un autre classeur

par contre pourriez vous m'éclairer sur la fonction filtre que vous souhaitez ?
dans le nouveau classeur ou dans le classeur d'origine ou dans les deux ?
faut-il que le nouveau classeur ne comporte les données que du client identique au nouveau classeur ?
cordialement
galougalou
À chaque ID correspond une adresse mail.

ID Nom Prénom Montant
1. X. Y. T
2. T. U. O
1. X. Y. J

Serait-ce possible, d'extraire grâce à une macro les informations de chaque ID vers un nouveau classeur, qui sera par la suite nommé avec l'adresse mail correspondant à l'ID. Ex du nom du classeur: XXX@hotmail.com avec toutes ses informations. (Onglet Inventaire)

Et extraire également l'onglet "Stock" egalement.

Il ne devrait pas avoir de bouton dans les nouveaux classeurs
 

GALOUGALOU

XLDnaute Occasionnel
bonjour tcmm
je n'avais pas vu votre dernier message
je vous laisse évalue le classeur en pièce jointe que j'ai construit avec le nom et l'adresse mail dans le nom de l'onglet
dans chaque nouveau classeur ne figure que les informations correspondantes à l'id
extension xlsx
on se rapproche de la solution finale:)
cordialement
galougalou
 

Fichiers joints

GALOUGALOU

XLDnaute Occasionnel
dans la macro ventilation c'est dans cette ligne que se construit le nom du classeur
nc étant la variable qui stocke l'adresse
nc = Sheets("Adresse").Cells(i, 3) & "_" & Sheets("Adresse").Cells(i, 2)

pour n'avoir que l'adresse email remplacer par
nc = Sheets("Adresse").Cells(i, 2)

j'ai oublié de vous préciser que dans l'onglet Adresse j'ai rajouté une colonne pour que le nom soit associé à l'id.
précision ne pas changer le nom des onglets, ou alors modifier toutes les macros
@+
 

TCMM

XLDnaute Nouveau
dans la macro ventilation c'est dans cette ligne que se construit le nom du classeur
nc étant la variable qui stocke l'adresse
nc = Sheets("Adresse").Cells(i, 3) & "_" & Sheets("Adresse").Cells(i, 2)

pour n'avoir que l'adresse email remplacer par
nc = Sheets("Adresse").Cells(i, 2)

j'ai oublié de vous préciser que dans l'onglet Adresse j'ai rajouté une colonne pour que le nom soit associé à l'id.
précision ne pas changer le nom des onglets, ou alors modifier toutes les macros
@+
Merci pour votre aide. Mais la solution n'est pas adaptable. Par exemple j'ai ajouté deux colonnes et ça me donne tout autre chose dans les nouveaux classeurs. Ci joint le fichier.

Et aussi, à la fin de la macro, il y a un chiffre qui apparait toujours au niveau de la cellule B2 de l'onglet inventaire.
 

Fichiers joints

TCMM

XLDnaute Nouveau
C'est corrigé avec cette nouvelle version
Merci ça fonctionne. Mais par contre les formules disparaissent de l'onglet inventaire. Peux t-on les intégrer?

Par contre quels sont les points dans le code que je dois changer si jamais j'ajoute ou supprime une colonne de mon onglet "inventaire".
 

GALOUGALOU

XLDnaute Occasionnel
bonjour le forum
dans le classeur ci joint plus rien n'est visible au niveau de la cellule b2
si vous rajouter des colonnes il faut adapter les macros massifier et supprimer au niveau de la plage de de cellule
un tri s'effectue sur les dates colonne F mais dans votre tableau les dates sont maintenant en colonne H
il suffit d'adapter dans la macro massifier

supprimer
If Range("A" & J).Value <> Range("B1").Value Then Rows(J).Range("A1:G1").ClearContents 'delete
au lieu de a1 g1 exemple a1 i1

massifier le tri se fait colonne f donc on si vous rajouter une colonne avant il faut adapter
Range("A5:G3000").Select
ActiveWorkbook.Worksheets("Inventaire").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Inventaire").Sort.SortFields.Add Key:=Range( _
"F5:F3000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Inventaire").Sort
.SetRange Range("A5:G3000")
meme exemple que pour supprimer au lieu de a5 g3000 remplacer par a5 i3000


il est important que les colonnes A dans inventaire et abc dans adresse soit immuable
si vous modifiez des colonnes ou les noms il suffit d'adapter
cordialement
galougalou
 
Ce message a été identifié comme étant une solution!

Fichiers joints

TCMM

XLDnaute Nouveau
bonjour le forum
dans le classeur ci joint plus rien n'est visible au niveau de la cellule b2
si vous rajouter des colonnes il faut adapter les macros massifier et supprimer au niveau de la plage de de cellule
un tri s'effectue sur les dates colonne F mais dans votre tableau les dates sont maintenant en colonne H
il suffit d'adapter dans la macro massifier

supprimer
If Range("A" & J).Value <> Range("B1").Value Then Rows(J).Range("A1:G1").ClearContents 'delete
au lieu de a1 g1 exemple a1 i1

massifier le tri se fait colonne f donc on si vous rajouter une colonne avant il faut adapter
Range("A5:G3000").Select
ActiveWorkbook.Worksheets("Inventaire").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Inventaire").Sort.SortFields.Add Key:=Range( _
"F5:F3000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Inventaire").Sort
.SetRange Range("A5:G3000")
meme exemple que pour supprimer au lieu de a5 g3000 remplacer par a5 i3000


il est important que les colonnes A dans inventaire et abc dans adresse soit immuable
si vous modifiez des colonnes ou les noms il suffit d'adapter
cordialement
galougalou
Merci. C'est interessant. Je continue de tester. Mais ça fonctionne. Mise en page et formule dans les deux onglets. Même si dans la cellule B1, il y a toujours l'ID qui s'affiche
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas