Générer feuille en un clic
Bonjour à tous,
Désolé tout d'abord pour le titre de mon sujet qui peut paraître pas très explicite !
Donc je m'explique !
Pour mon boulot, j'utilise régulièrement des feuilles Excel dont les données sont ensuite utilisées dans un autre outil de gestion.
Problème : il y a environ 120 feuilles contenant chacune 100 lignes en moyenne, soit autant de références commerciales à traiter manuellement.
Or cet outil de gestion permet d'importer des fichiers .csv, à condition que le contenu du fichier soit "construit" d'une certaine façon.
Pas de problème pour créer le fichier csv (sous excel, "enregistre sous" -> csv).
Ce que je souhaiterais faire, c'est que à partir d'une feuille, je puisse générer une seconde feuille Excel de façon automatique (en un clic quoi !)
Merci d'avance pour vos réponses.
[EDIT]
Je vous mets ci-dessous le code définitif de ma macro si ça peut servir...
Sub Creation_commande()
'
' Creation_commande Macro
'
ActiveSheet.Select
ActiveSheet.Copy
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
With ActiveSheet 'prend en compte l'onglet "Feuil" du classeur "Feuille base"
.Rows(1).ClearContents 'efface la ligne 1
Columns("F:F").Delete
Columns("E:E").Delete
With .Columns("C:C") 'prend en compte la colonne C
.ClearContents 'efface la colonne
End With
With .Columns("B:B") 'prend en compte la colonne B
.ClearContents 'efface la colonne
.Insert Shift:=xlToRight 'insère une colonne à gauche
.Insert Shift:=xlToRight 'insère une colonne à gauche
End With 'fin de la prise en compte de la colonne B
.Range("A1") = -1 'place -1 en A1
.Range("B1") = 3 'place 3 en B1
dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne de la colonne A
.Range("C2:C" & dl).Value = "A" 'place "A" dans la colonne C de la ligne 2 à dl
.Columns("A:E").ColumnWidth = 8.43 'ajute la largeur des colonne A à E
End With 'fin de la prise en compre de l'onglet "Feuil1" du classeur "Feuille base"
ActiveSheet.Shapes.Range(Array("Button 1")).Select
Selection.Delete
Dim NOMDOSSIER$, Chemin$
NOMDOSSIER = "Commandes d'implantation"
If Dir(ThisWorkbook.Path & "\" & NOMDOSSIER, vbDirectory) = "" Then
MkDir ThisWorkbook.Path & "\" & NOMDOSSIER
End If
Chemin = ThisWorkbook.Path & "\" & NOMDOSSIER & "\"
ActiveWorkbook.SaveAs Chemin & ActiveSheet.Name, _
FileFormat:=xlCSV
ActiveWorkbook.Close savechanges:=True
End Sub
Salut,
Pour duplifier une feuille, tu appuies sur la touche "Ctrl" (Contrôle), tu cliques-gauche sur l'onglet de la feuille concernée et tu glisses la souris - tout en tenant le clic enfoncé - de côté.
Cordialement
Bonjour Yvouille,
C'est bien ce que je me disais, mon titre et mes explications n'étaient apparemment pas très clairs...
Ce que je souhaites faire, c'est à partir d'une feuille, ordonnée d'une certaine façon, générer en un clic si possible (via l'utilisation d'une macro) une seconde feuille qui reprenne certaines colonnes et lignes de la première feuille en les ordonnant d'une autre manière.
J'ai mis les deux classeurs en pièce jointe de mon premier message pour montrer ce que je souhaites.
Merci en tout cas pour ta réponse.
Dans le fichier ci-joint tu as un exemple de ce que l'on peut faire (et c'est vraiment que pour l'exemple). J'ai choisi de créer la copie dans le même fichier ; si nécessaire, il est possible de créer cette copie dans un autre fichier. Ce code a été créé sans me prendre la tête à l'aide de l'enregistreur de macro. Il est bien entendu que selon tes besoins réels, on devra s'y prendre tout autrement. Mais comme je ne comprends encore pas très bien tes besoins réels ......
A te relire.
Bonjour Yvouille,
On est sur ce principe là effectivement.
La chose un peu plus compliquée, c'est que le nombre de ligne n'est pas fixe.
Cette macro ne serait donc pas transposable à tous mes fichiers.
En recherchant une bonne partie de la journée, j'ai pu fabriquer une macro avec des morceaux de codes glanés ici et là.
Alors désolé pour les puristes si ça ne fait pas très propre !
Sub Creation_commande()
'
' Creation_commande Macro
'
ActiveSheet.Select
ActiveSheet.Copy
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
With ActiveSheet 'prend en compte l'onglet "Feuil" du classeur "Feuille base"
.Rows(1).ClearContents 'efface la ligne 1
With .Columns("C:C") 'prend en compte la colonne C
.ClearContents 'efface la colonne
End With
With .Columns("B:B") 'prend en compte la colonne B
.ClearContents 'efface la colonne
.Insert Shift:=xlToRight 'insère une colonne à gauche
.Insert Shift:=xlToRight 'insère une colonne à gauche
End With 'fin de la prise en compte de la colonne B
.Range("A1") = -1 'place -1 en A1
.Range("B1") = 3 'place 3 en B1
dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne de la colonne A
.Range("C2:C" & dl).Value = "A" 'place "A" dans la colonne C de la ligne 2 à dl
.Columns("A:E").ColumnWidth = 8.43 'ajute la largeur des colonne A à E
End With 'fin de la prise en compre de l'onglet "Feuil1" du classeur "Feuille base"
ActiveSheet.Shapes.Range(Array("Button 1")).Select
Selection.Delete
Dim NOMDOSSIER$, Chemin$
NOMDOSSIER = "Commandes d'implantation"
If Dir(ActiveWorkbook.Path & "\" & NOMDOSSIER, vbDirectory) = "" Then
MkDir ActiveWorkbook.Path & "\" & NOMDOSSIER
End If
Chemin = ActiveWorkbook.Path & "\" & NOMDOSSIER & "\"
ActiveWorkbook.SaveAs Chemin & ActiveSheet.Name, _
FileFormat:=xlCSV
ActiveWorkbook.Close savechanges:=True
End SubPar contre, j'ai encore un soucis au niveau du dossier de destination des nouveaux classeurs créés.
Quelque soit l'emplacement de mon fichier source, le dossier créé apparait toujours à la racine de mon C:\ alors que selon mon code, il devrait être créé dans le dossier qui contient mon fichier source...
Bref, je touche au but !
Salut,
Essaie de remplacer
Chemin = ActiveWorkbook.Path & "\" & NOMDOSSIER & "\"par
Chemin = ThisWorkbook.Path & "\" & NOMDOSSIER & "\"A te relire.
Bonjour Yvouille,
Merci pour ton aide, ça fonctionne parfaitement.
J'édite mon premier post pour mettre le code définitif.
A bientôt.