Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Macros xls "export data entre les feuilles d'un même classeur"

  • Initiateur de la discussion Initiateur de la discussion Cecinerock
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Cecinerock

XLDnaute Nouveau
Salut à tous,

Besoin d'aide !

Je suis amené à automatiser l'export de données se trouvant sur une feuille xls vers d'autres feuilles du même classeur.
La feuille brute (data source) contient deux tableaux avec en ligne des prénoms de personnes, et en colonnes plusieurs champs décrivant les projets sur lesquelles ces personnes travaillent.
Chaque feuille (celles vers lesquelles l'export doit être réalisé) correspond à une fiche personne + une feuille décrivant l'ensemble des projets.

càd --> si la table brute (feuille 1) contient 5 personnes (lignes) travaillant chacun sur 2 projets --> résultat : nombre de feuille = 7 (feuille brute), 5 feuilles (une pour chaque personne) et feuille projets (avec autant de ligne que de projets)


A partir de cette table (feuille 1) la macros est sensée alimenter d'autres tableaux se trouvant dans les autres feuilles et (condition) :
--> s'il y a un nouveau projet (repérer par le champ date ou statut), la macros doit créer un nouvel onglet correspondant (sur la feuille projet).
--> si un projets s'achève (statut = OK), la macros doit masquer les enregistrements précédents (correspondant à ce projet).

Sachant que c'est la première fois que j'utilise VBA sous xls, je crie à l'aideeeeee 🙂
J'espère qu'il y a bien quelqu'un qui va pouvoir m'aider !

Merci par avance

cdt
 
Re : Macros xls "export data entre les feuilles d'un même classeur"

Une réponse un peu tardive et un peu commentée.
L'essentiel est là, il n'y aura plus qu'à adapter aux données que tu souhaites traitées.
Je suis volontairement passé par des formules index pour que les modification s'impact automatiquement sans relancer un code vba. par contre ça peut être contraignant...
 

Pièces jointes

Re : Macros xls "export data entre les feuilles d'un même classeur"

Salut,

J'ai pris connaissance du contenu de la macros et je te remercie infiniment 🙂
Je vais ajouter quelques modif pour avoir des couleurs, etc.

Merci encore

cdt

ps : qu'est ce qui risque d'être contraignant ?
 
Re : Macros xls "export data entre les feuilles d'un même classeur"

Désolé, je n'avais pas pu terminer mon message, voilà la suite:

Ce qui peut être contraignant, c'est le nombre de calculs à réaliser par ton classeur si tu as une masse de données importante (du genre une dizaine de milliers (c'est un exemple au hazard mais représentatif) de cellules avec la formule index) qui pourraient prendre plusieurs dizaines de secondes voir plusieurs minutes à effectuer à chaque changement de valeurs dans une cellule.

Dans ce cas là il faut faire des boucles en vba avec un contrôle de la valeur qui a changé afin de ne modifier que celle qui nous intéresse. Mais ce sont des lignes de codes supplémentaires à créer et maintenir.
 
Re : Macros xls "export data entre les feuilles d'un même classeur"

Bonjour,

a dire vrai, je n'arrive pas à comprendre une partie du code
il s'agit du début de la première sous-routine :

Sub newprojectforpeople (onglet As String) --> Pour quoi as tu créé un paramètre "Onglet"

ligne = WorksheetFunction.CountA(Worksheets(onglet).Range("A5:A1000")) + 5 --> que représente ''Ligne" ?
Worksheets(onglet).Cells(ligne, 1) = Worksheets("Raw data").Range("B2")

For i = 2 To WorksheetFunction.CountA(Worksheets(onglet).Rows(5))

Worksheets(onglet).Cells(ligne, i).FormulaR1C1 = "=INDEX(Projects!R1:R1048576,MATCH(RC1,Projects!C2,0),R4C)"

Next Pourrais-tu me dire pour quoi Next n'est pas suivit de "i" ?

'mise en forme --> cellules

Worksheets(onglet).Activate
Worksheets(onglet).Range(Cells(ligne, 1).Address, Cells(ligne, WorksheetFunction.CountA(Worksheets(onglet).Rows(5))).Address).Select

pourrais-tu me décrire l'objectif de ce code en deux ligne ?

merci par avance
 
Re : Macros xls "export data entre les feuilles d'un même classeur"

Salut,

Sub newprojectforpeople (onglet As String) --> Pour quoi as tu créé un paramètre "Onglet"
Ce paramètre sert à identifier la feuille du classeur qui est traitée de façon automatique.

ligne = WorksheetFunction.CountA(Worksheets(onglet).Range("A5:A1000")) + 5 --> que représente ''Ligne" ?
C'est un index de la ligne à remplir avec les données du nouveau projet dans la fiche personnelle correspondant à la feuille "onglet".

Pourrais-tu me dire pour quoi Next n'est pas suivit de "i" ?
Il n'y a pas d'obligation de mettre le nom de la fin de boucle si tu ne fais pas des sauts de boucles dans ton code, car le prochain next sera la fin de ta boucle for commencée juste avant.

Worksheets(onglet).Activate
Worksheets(onglet).Range(Cells(ligne, 1).Address, Cells(ligne, WorksheetFunction.CountA(Worksheets(onglet).Rows(5))).Address).Select --> pourrais-tu me décrire l'objectif de ce code en deux ligne ?
Ces lignes permettent de sélectionner les cellules auxquelles va être appliqué la mise en forme des bordures (suite du code).
 
Re : Macros xls "export data entre les feuilles d'un même classeur"

Bonjour Nairolf,

Merci bcp pour tes explications claires 🙂

Cependant, j'ai d'autres questions sans vouloir abuser

Je pense créer une macro sans formulaire, càd de sorte à ce que les data soient exportées directement de la table brute vers les autres feuilles, sans passer par un userform. Pour ce faire il suffit d'appeler la sub newentry directement, est ce bien ça ?

par ailleurs, tu as écrit la seconde sub comme suite
Sub newpeople()

Worksheets("fiche personnel").Select
Worksheets("fiche personnel").Copy After:=Worksheets(Worksheets.Count)
Worksheets("fiche personnel (2)").Select
Worksheets("fiche personnel (2)").Range("B1") = Worksheets("Table brute").Range("A2")
Worksheets("fiche personnel (2)").Name = Worksheets("Table brute").Range("A2")

Call newprojectforpeople(Worksheets("Table brute").Range("A2"))

End Sub

moi j'ai fait un code qui me permet de créer des feuilles, leur affecter les prénoms des personnes, et enfin d'appeler la mise en forme à appliquer !
le voici :

Sub new_sheet_people()

For i = 1 To 4

Sheets.Add after:=Sheets(Sheets.Count)
Call new_formating_people_2 'macro qui fait la mise forme des fiche personnes

If i = 1 Then
Sheets("Feuil5").Select
Sheets("Feuil5").Name = "Géraldine"

ElseIf i = 2 Then
Sheets("Feuil6").Select
Sheets("Feuil6").Name = "Julien"

ElseIf i = 3 Then
Sheets("Feuil7").Select
Sheets("Feuil7").Name = "Alex"

Else

Sheets("Feuil8").Select
Sheets("Feuil8").Name = "Amandine"

End If

Next i


End Sub

qu'en penses-tu ?

merci par avance

😉
 
Re : Macros xls "export data entre les feuilles d'un même classeur"

Salut Cecinerock,

Oui, tu peux appeler directement la sub newentry(personne, projet), mais il faut bien penser à renseigner les arguments personne et projet.

Ton code est pas mal mais il est limité, car si tu dois recréer de nouvelles fiches personnelles, tu devras reécrire ton code en t'assurant que le nom des feuilles est bon...

Il est tout à fait possible de faire un mix intéressant entre les deux codes, du genre (code non testé) :
Code:
Sub new_sheet_people()
 
For i = 1 To worksheetapplication.counta(Worksheets("Table brute").Range("A:A"))-1
 
Sheets.Add after:=Sheets(Sheets.Count)
 Call new_formating_people_2 'macro qui fait la mise forme des fiche personnes

 Worksheets(Sheets.Count).Name = Worksheets("Table brute").cells(i+1,1)

Next i

End Sub
 
Re : Macros xls "export data entre les feuilles d'un même classeur"

re

Merci pour l'intérêt que tu portes à mes questions 🙂

à dire vrai, il y a deux points qui me semblent pas tout à fait clairs !

1 --> worksheetapplication.counta(Worksheets("Table brute").Range("A:A"))-1
qu'est ce que ça représente ?

2 --> par ça Worksheets("Table brute").cells(i+1,1) tu veux affecter un nom aux feuilles créées, mais par cells(i+1,1) tu veux dire quoi ?

Merci encore
 
Re : Macros xls "export data entre les feuilles d'un même classeur"

1/ J'ai fait une erreur ce n'est pas worksheetapplication mais WorksheetFunction
En fait CountA dénombre le nombre de cellules non vides d'une plage, ici la colonne A.
Donc ici je dénombre le nombre de personnes nommées dans la "table brute" (le -1 étant là pour retirer l'en-tête du tableau dans le calcul).

2/cells(i+1,1) est un objet range qui permet de pointer sur la cellule de ligne i+1 et de colonne 1. Dans le cas où i = 1, la cellule pointée est A2.
 
Re : Macros xls "export data entre les feuilles d'un même classeur"

ah ok 🙂 merci

je coince ailleurs ! dslé
je fais une autre sub qui me supprime toute les feuilles à part la source lorsque j'appelle la macro :

Sheets("ACCUEIL").Select
ActiveWindow.SelectedSheets.Delete

Sheets("Feuil4").Select
ActiveWindow.SelectedSheets.Delete

Sheets("Feuil3").Select
ActiveWindow.SelectedSheets.Delete

etc

le problème c'est que j'aurais potentiellement un nombre important de sheets qui commence par NE, quel code pourrais-je utiliser pour indiquer cela ?
ex

if worksheetsfunction LEFT(les noms des feuilles qui restent,2)="NE" then

Sheets(" ").Select
ActiveWindow.SelectedSheets.Delete

et dans ce cas là, suis-je obligé de déclarer les noms des classeurs comme des string ?

100 MERCI 🙂
 
Re : Macros xls "export data entre les feuilles d'un même classeur"

Tu n'es pas loin du tout:
Dim feuille As Worksheet
Application.DisplayAlerts = False
For Each feuille In Worksheets
If Left(feuille .Name, 2) = "NE" Then
feuille .Delete
End If
Next feuille
Application.DisplayAlerts = True
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
990
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…