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

Générer feuille en un clic

  • Initiateur de la discussion Initiateur de la discussion sokratt
  • 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 !

S

sokratt

Guest
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 (via une macro si possible).
Je vous ai mis en pièce jointe deux exemples : le modèle de "base" tel quel et le modèle "transformé" celui à quoi je souhaite aboutir.

Merci d'avance pour vos réponses.
 

Pièces jointes

Re : Générer feuille en un clic

Bonjour Sokratt et bienvenu, bonjour le forum,

Peut-être comme ça :
Code:
Sub Macro1()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)

With ThisWorkbook.Sheets("Feuil1") 'prend en compte l'onglet "Feuil" du classeur "Feuille base"
    .Rows(1).ClearContents 'efface la ligne 1
    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"
End Sub
 
Re : Générer feuille en un clic

Bonjour Robert (et bonjour au forum par la même occasion !),

C'est effectivement pile poil ce que je recherchais (avec une modif à y apporter, voir ci-dessous)
J'ai compris le fonctionnement de la macro, je vais pouvoir l'adapter à mes autres feuilles du classeur.

Par contre, je voulais savoir comment faire pour insérer un bouton sur cette feuille, qui en cliquant dessus, la macro s’exécute et crée un nouveau classeur.

Merci en tout cas pour la qualité et la rapidité de la réponse.

[EDIT]

J'avance petit à petit avec la macro suivante (désolé, c'est un peu rafistolé avec des bouts de codes...)

Code:
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 = "Dossier_cible"
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 Sub

Il me reste un problème à régler.
Le dossier "Dossier_cible" n'est pas créé à partir de l'emplacement de mon fichier source mais la macro me crée systématiquement ce dossier à la racine de mon c: ...
J'ai testé en changeant mon fichier source de place mais rien n'y fait.
Je touche au but, merci d'avance pour votre aide.

😀
 
Dernière modification par un modérateur:
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

F
Réponses
72
Affichages
7 K
FloASF63
F
Réponses
8
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…