Créer un fichier excel macro vba
Résolu/Fermé
noona0310
noona0310
- Messages postés
- 28
- Date d'inscription
- mardi 11 août 2009
- Statut
- Membre
- Dernière intervention
- 10 octobre 2010
noona0310
- Messages postés
- 28
- Date d'inscription
- mardi 11 août 2009
- Statut
- Membre
- Dernière intervention
- 10 octobre 2010
A voir également:
- Vba créer un fichier excel
- Créer un fichier excel vba - Meilleures réponses
- Créer fichier excel vba - Meilleures réponses
- Créer un fichier excel macro vba ✓ - Forum - Excel
- [VBA] Création d'un nouveau classeur Excel... ✓ - Forum - VB / VBA
- Créer fichier txt avec macro VBA excel ✓ - Forum - VB / VBA
- Vba ouvrir un fichier excel avec chemin ✓ - Forum - VB / VBA
- Vba ouvrir un fichier excel avec chemin variable ✓ - Forum - VB / VBA
10 réponses
bouket
11 août 2009 à 20:32
- Messages postés
- 143
- Date d'inscription
- mardi 11 août 2009
- Statut
- Membre
- Dernière intervention
- 16 octobre 2011
11 août 2009 à 20:32
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 !
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 !
bouket
11 août 2009 à 22:30
- Messages postés
- 143
- Date d'inscription
- mardi 11 août 2009
- Statut
- Membre
- Dernière intervention
- 16 octobre 2011
11 août 2009 à 22:30
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.
bonne chance ;)
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 ;)
noona0310
13 août 2009 à 09:51
- Messages postés
- 28
- Date d'inscription
- mardi 11 août 2009
- Statut
- Membre
- Dernière intervention
- 10 octobre 2010
13 août 2009 à 09:51
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
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
noona0310
11 août 2009 à 21:26
- Messages postés
- 28
- Date d'inscription
- mardi 11 août 2009
- Statut
- Membre
- Dernière intervention
- 10 octobre 2010
11 août 2009 à 21:26
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
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
bouket
13 août 2009 à 12:43
- Messages postés
- 143
- Date d'inscription
- mardi 11 août 2009
- Statut
- Membre
- Dernière intervention
- 16 octobre 2011
13 août 2009 à 12:43
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 ++
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 ++
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
noona0310
13 août 2009 à 13:12
- Messages postés
- 28
- Date d'inscription
- mardi 11 août 2009
- Statut
- Membre
- Dernière intervention
- 10 octobre 2010
13 août 2009 à 13:12
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.
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.
bouket
13 août 2009 à 13:33
- Messages postés
- 143
- Date d'inscription
- mardi 11 août 2009
- Statut
- Membre
- Dernière intervention
- 16 octobre 2011
13 août 2009 à 13:33
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
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 ;)
+
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 ;)
+
noona0310
13 août 2009 à 14:07
- Messages postés
- 28
- Date d'inscription
- mardi 11 août 2009
- Statut
- Membre
- Dernière intervention
- 10 octobre 2010
13 août 2009 à 14:07
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
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
bouket
13 août 2009 à 14:10
- Messages postés
- 143
- Date d'inscription
- mardi 11 août 2009
- Statut
- Membre
- Dernière intervention
- 16 octobre 2011
13 août 2009 à 14:10
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 :) !
bouket
13 août 2009 à 14:15
- Messages postés
- 143
- Date d'inscription
- mardi 11 août 2009
- Statut
- Membre
- Dernière intervention
- 16 octobre 2011
13 août 2009 à 14:15
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é
- Sélectionne toutes tes feuilles
- Menu Edition/Rechercher
- Tape *[
- puis clique sur Suivant
Tu peux la traduire en VBA facilement ;)
non testé
noona0310
14 août 2009 à 11:33
- Messages postés
- 28
- Date d'inscription
- mardi 11 août 2009
- Statut
- Membre
- Dernière intervention
- 10 octobre 2010
14 août 2009 à 11:33
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+
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+