Créer un fichier excel macro vba [Résolu/Fermé]

Signaler
Messages postés
28
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
10 octobre 2010
-
Messages postés
28
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
10 octobre 2010
-
Bonjour,
actuellement je suis en stage où je dispose d'un document excel qui génère les stats individuelles des employés . Or il faut que je crée un fichier excel généré automatiquement en cliquant sur un bouton, qui devrait contenir autant de pages de statistiques que d'employés (environ 30) et il faut que je fasse ça sous forme de macro vba.
Aidez moi s'il vous plaît, je suis débutante en vba. SOS

10 réponses

Messages postés
143
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
16 octobre 2011
21
Bonjour,

Peux-tu en dire plus sur le contenu des fichiers à créer ?

En principe il suffit d'ajouter un bouton sur la page excel qui doit fabriquer le fichier et lui affecter une macro dans laquelle tu définis ce qu'il y a à faire !

Pour créer un bouton sur une feuille :

Affichage/Barre d'outils/Formulaires

C'est le deuxième icône de la deuxième ligne appelé "bouton". Tu cliques dessus, il te donne un curseur qui sera le coin supérieur gauche de ton bouton, et il te demande d'affecter directement une macro (tu peux le faire plus tard si la macro n'est pas faîtes : cliques droit sur le haut du bouton, et puis "affecter une macro")!

à plus !
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57041 internautes nous ont dit merci ce mois-ci

Messages postés
143
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
16 octobre 2011
21
D'accord,

On va donc procéder par étape... déjà faire un fichier à partir d'un bouton et créer une feuille par employée. On ajoutera d'autre choses au code par la suite. Mais, c'est une première étape.


Option Base 1
Sub Macro1()

Dim table_employes(100) As String 'On prévoit large
Dim nombre_employes As Integer
nombre_employes = 0

Do
    nombre_employes = nombre_employes + 1
    table_employes(nombre_employes) = Cells(nombre_employes, NUMERO DE COLONNE DES EMPLOYES).Value
Loop While Cells(nombre_employes, NUMERO DE COLONNE DES EMPLOYES) <> ""

nombre_employes = nombre_employes - 1

'Cela nous donne le nombre d'employés, et note leur nom dans une table

Workbooks.Add  'on ajoute un classeur

    Sheets("Sheet3").Select 'il y a trois  feuilles de base dans le classeur, on crée les suivantes
    For i = 4 To nombre_employes
    Sheets.Add
    Next i
    
    For j = 1 To nombre_employes
    Dim nom_feuille As Variant
    nom_feuille = "Sheet" & j
    Sheets(nom_feuille).Name = table_employes(j)
    Next j
     
    
End Sub


bonne chance ;)
Messages postés
28
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
10 octobre 2010

Salut
merci infiniment pour ton aide ça a marché.
Mais apparemment il fallait plutôt créer un classeur par employé
C'est ce que j'ai fait ça ne nécessite qu'une boucle je crois.
Mais voilà les classeurs sont créés j'y colle les stats je sauvegarde et je ferme et en fin de compte je me rends compte que tous les classeurs ont le même contenu les stats du dernier agents de la liste.
Voici le bout de code qui je pense contient le problème
Il s'agit du code qui colle la page sauvegarde la classeur et le ferme:
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:="XXXXX.xls"
ActiveWorkbook.Saved = True
ActiveWorkbook.Close
Je ne comprends pas où est l'erreur

Help
Messages postés
28
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
10 octobre 2010

Salut
merci de m'avoir répondu
En fait, à la base j'ai un classeur contenant des données et qui génère dans l'une de une page les stats pour un seul employé car on ne peut entrer qu'un seul nom dans le champs. Et moi en principe je dois écrire en vba une macro qui permettrait grâce à un simple clic de générer un autre classeur dont chaque feuille correspondrait aux stats d'un employé. En fait, ils ne veulent pas avoir à créer à chaque fois les stats de chaque employé, ils veulent tout d'un seul coup.
PS: Dans le classeur source je dispose d'un tableau contenant les noms des employés
Messages postés
143
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
16 octobre 2011
21
moi non plus, j'aimerais bien avoir le code entier pour te répondre, à la limite tu peux peut-être m'envoyer un "fichier-exemple" que je puisse t'aider ;) !

D'autre part, s'ils ont tous les mêmes stats, cela signifie que tu as oubliés de faire une action à chaque fois que tu recommences ta boucle...

Par ailleurs, oui une boucle suffit pour faire un fichier différent par employé (quand on a plus ce satané pb de nom de feuille *$&##@!! ^^)

A ++
Messages postés
28
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
10 octobre 2010

Salut
Voici le code :

Sub macro5 ()
'on se positionne dans le classeur source sur la feuille qui contient la liste
'des employés et les graphes à copier.

Sheets("Résultat individuel").Select

'Déclaration des variable
Dim Nb_agents As Integer 'indice
Dim Tab_Nom_agents(200) As String
Dim Tab_Prénom_agents(200) As String

Nb_agents = 0


Do
' permet de copier la taille de la table
Nb_agents = Nb_agents + 1
Tab_Nom_agents(Nb_agents) = Cells(Nb_agents, 6)
Tab_Prénom_agents(Nb_agents) = Cells(Nb_agents,7 )


'
Range("A1") = Tab_Nom_agents(Nb_agents)
Range("B1") = Tab_Prénom_agents(Nb_agents)
Call StatsDesAgents 'macro qui génère les stats pour un employés

Range("A1:O100").Select
Selection.Copy
Workbooks.Add
Sheets("Feuil1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:="XXXXXX.xls" 'Le classeur est nommé d'après le nom de l'agent
ActiveWorkbook.Saved = True
ActiveWorkbook.Close 'J'ai

Windows("ClasseurSource.xls").Activate



Loop While Cells(Nb_agents, 6) <> ""


End Sub

Mais je crois que le problème vient des liaisons entre classeur car excel met à jour automatiquement leur contenu. Quand on modifie le classeur source les autres sont automatiquement modifié et je ne trouve pas un moyen de supprimer ces liaison avec du code vba.
Voilà le problème en gros.
Messages postés
143
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
16 octobre 2011
21
Pour moi le code fonctionne bien, en tout cas le copier coller s'effectue bien, dans la mesure où je n'ai pas trop tenu compte de cette partie du code en gras


Range("A1") = Tab_Nom_agents(Nb_agents)
Range("B1") = Tab_Prénom_agents(Nb_agents)
Call StatsDesAgents 'j

Range("A1:O100").Select 



Je suppose que l'erreur vient de cette autre macro qui ne doit pas copier les bonnes choses. Sinon pour déboguer, je vous conseille de ne faire que deux fichiers et voir s'ils sont différents...

Par ailleurs, quelles genres de liaisons sont établies ?

PS: astuce : encadrer le code qui vient de la macro par les balises <code> ... </ code> (sans espace) pour que le code reste propre ;)

+
Messages postés
28
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
10 octobre 2010

Salut
En fait la macro qui affiche les stats marche très bien .
J'ai regardé sur internet il semble que les liaisons entre calseeurs soient en cause.
En fait d'après ce que j'ai compris quand on fait un copier\coller d'un classeur A vers un classeur B, si on modifie le classeur A leclasseur B est lui aussi automatiquement modifié quand on l'ouvre. Il faut supprimer ces liaisons (on peut les voir dans l'onglet Edition/Liaisons) mais je ne trouve pas de code vba pour le faire.
Voilà
Merci pour ton aide
Messages postés
143
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
16 octobre 2011
21
Je te conseille de le faire une fois manuellement en t'enregistrant avec l'enregistreur et voir s'il te donne un code que tu pourrais mettre avant d'enregistrer dans ta boucle qui fonctionne par ailleurs merveilleusement bien :) !
Messages postés
143
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
16 octobre 2011
21
Apparemment cette version manuelle marche:

- Sélectionne toutes tes feuilles
- Menu Edition/Rechercher
- Tape *[
- puis clique sur Suivant

Tu peux la traduire en VBA facilement ;)

non testé
Messages postés
28
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
10 octobre 2010

Salut
j'ai déjà essayé ça mais ça ne marche pas car j'ai des graphes et si je le fais à la main ils disparaissent.
Merci en tout cas pour ton aide.
La seule option qui s'offre à moi est d'effectuer un collage spécial en format bitmap mais j'ai pas le code vba.
Voilà
Merci infiniment.
A+