Aide sur une macro

Doktor

XLDnaute Nouveau
Bonjour,

Suite à mon premier topic ( https://www.excel-downloads.com/threads/tcd-tri-dun-champs-de-valeur.232518/ ), je reviens donc sur la macro proposée à la fin de celui-ci, étant novice en la matière.

Sub DeplaceFeuilles()
'
' DeplaceFeuilles Macro
'

'
For i = 1 To 15
Sheets("liste VM").Select
nomVMfeuille = ActiveCell.Offset(i - 1, 0).Value
nomfichier = "G:\xx\yy\zz\01-Ventes\2013\envois\" & nomVMfeuille & ".xlsx"

Sheets(nomVMfeuille).Select
Sheets(nomVMfeuille).Move
Range("H2").Select
ActiveWindow.FreezePanes = True
ActiveWorkbook.SaveAs Filename:=nomfichier, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
Next i

End Sub

Est-ce que je pourrais avoir le détail des lignes de code? A savoir : ce que l'on cherche à faire avec chaque ligne.

Grosso modo, je crois avoir compris que pour chaque feuillet dans le classeur, on va l'enregistrer sous un nouveau fichier.

- Sheets("liste VM").Select : à la place de "liste VM", je suis sensé écrire la liste des noms de mes feuillets que je souhaite exporter?

- nomVMfeuille = ActiveCell.Offset(i - 1, 0).Value : je pense qu'ici, on essaie de définir la variable "nomVMfeuille" mais le ActiveCell.Offset ne me dit fichtrement rien ... Offset est utilisé au départ pour effectuer un décalage de coordonnées, non? Donc j'imagine qu'il doit y avoir une histoire de décaler à chaque fois la feuille que l'on choisit, du genre : feuille 1 = x, feuille = 2 = x-1, feuille 3 = x-2, etc. mais c'est encore flou pour moi.

- nomfichier = "G:\xx\yy\zz\01-Ventes\2013\envois\" & nomVMfeuille & ".xlsx" : Ok, on cherche à définir le nom du fichier exporté. A savoir le chemin sur l'ordinateur + la variable du dessus + l'extension de classeur Excel.

- Sheets(nomVMfeuille).Select : on sélectionne la feuille dans laquelle on va travailler.

- Sheets(nomVMfeuille).Move : on se prépare à bouger la feuille.

- Range("H2").Select : On sélectionne H2? Hm ... Je comprends pas vraiment, du coup.

- ActiveWindow.FreezePanes = True : Je sais que "FreezePanes" sert à figer des volets, est-ce que ça a rapport avec le "H2" d'au-dessus?

- ActiveWorkbook.SaveAs Filename:=nomfichier, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False : On enregistre le classeur (pourquoi le classeur et pas juste l'ActiveSheet?) sous le nom qui suit.

- ActiveWindow.Close : on ferme la fenêtre active.

- Next i : on passe à la feuille suivante.
 

Modeste

XLDnaute Barbatruc
Re : Aide sur une macro

Bonjour Doktor,

Le problème d'un code, sans fichier associé, c'est parfois déjà compliqué. Dans ton autre fil, Dugenou l'a proposé en fonction de la structure qu'il imaginait pour ton fichier.

De ce que je crois comprendre, il a considéré que ton classeur contenait une feuille nommée "liste VM", laquelle contiendrait (en colonne, quelque part) les 15 noms servant à générer chacun un nouveau fichier.

Pour le reste, tenter de rectifier (parfois c'est juste, hein! :D) l'interprétation que tu fais d'un code généré par l'enregistreur et remanié par Dugenou, qui ne savait pas grand chose de ton fichier, c'est un peu ardu et ça risque surtout de déboucher sur n'importe quoi. Non pas que ledit Dugenou (que je salue cordialement au passage) se soit trompé ... simplement, il y a trop d'impondérables, d'inconnues, d'hypothèses, etc. !

Comme le suggérait le susnommé dans le fil susmentionné, un extrait du fichier, contenant des infos "anonymes", mais représentant la structure réelle du fichier à "splitter" serait le bienvenu!
 

Doktor

XLDnaute Nouveau
Re : Aide sur une macro

Bonjour,

Voilà, j'ai recréé un peu à quoi ressemble le tableau d'origine, avec 10 fois plus de clients et de commerciaux. :rolleyes:

En même temps, s'il y avait un moyen de faire disparaître la colonne D autrement que par le masque, je suis preneur. :D

Merci à tous.
 

Pièces jointes

  • Tabtest.xlsx
    16.7 KB · Affichages: 20

Modeste

XLDnaute Barbatruc
Re : Aide sur une macro

Re,

La question à traiter ici, c'est le "splitt" des feuilles en autant de fichiers ...

Si on reprend l'idée de Dugenou de "afficher les pages de filtre du rapport ", ce sont les feuilles générées à cette occasion qu'il faut ensuite utiliser pour créer de nouveaux fichiers? Si oui, sur quel champ se ferait la génération des feuilles? (Mois, Département ou Code Com.)
 

Doktor

XLDnaute Nouveau
Re : Aide sur une macro

Voilà, c'est effectivement les feuilles générées qu'il faut ensuite utiliser pour créer de nouveaux fichiers. Le split se fait sur le champs Code Com. :)

L'idée finale est d'avoir un fichier par code commercial contenant ses clients, leur C.A. et la différence 2014-2015. Dans un premier feuillet un cumul depuis le début de l'année et dans un second juste le mois en cours.
Si les "différences" pouvaient être triées de la plus négative à la plus positive, ça serait un plus.
Dans le meilleur des mondes, une fois les fichiers créés, les commerciaux n'ont pas accès au C.A. de leur collègue. Dans ce cas, il faudrait soit transformer les TCD en tableau simple (mais il n'auraient plus accès à la navigation par mois et par département), soit arriver à faire en sorte à ce que le champs de tri "Code Com." ne soit plus actif ou même supprimé.

Bien sur, je décris le meilleur des cas, mais déjà avoir un automatisme au niveau de la création des fichiers splités serait génial.
 

Modeste

XLDnaute Barbatruc
Re : Aide sur une macro

Re,

Pour "le meilleur des cas", je n'ai pas tout à fait le temps :rolleyes:
Dans la version ci-dessous, je fais un Copier > Collage Spécial > Valeurs et format des nombres


Teste ce qui suit:
- crée les feuilles en fonction des Code com.
- insère un module standard dans le Visual Basic Editor
- colles-y le code suivant
- modifie le chemin renseigné en ligne 13, en terminant par un '\' et assure-toi que ce chemin corresponde bien à quelque chose d'existant
- exécute la macro

VB:
Sub exporter()
Application.ScreenUpdating = False
'*** liste des Codes Com. présents en Feuil1 sans doublons
Set listeCodes = CreateObject("scripting.dictionary")
With Sheets("Feuil1")
    derlig = .Cells(Rows.Count, 1).End(xlUp).Row
    For lig = 2 To derlig
        listeCodes(.Cells(lig, 5).Value) = ""
    Next lig
End With

'*** générer les feuilles
chemin = "D:\Luc\XLD\Test_Doktor\"
For Each f In listeCodes.keys
    On Error GoTo suivant
    Sheets("" & f).Copy
    With ActiveWorkbook
        .Sheets(1).Cells.Copy
        .Sheets(1).[A1].PasteSpecial Paste:=xlPasteValuesAndNumberFormats
        .SaveAs (chemin & f & ".xlsx")
        .Close
    End With
suivant:
Next f
Application.ScreenUpdating = True
End Sub
 

Discussions similaires

Réponses
2
Affichages
736

Statistiques des forums

Discussions
312 305
Messages
2 087 091
Membres
103 467
dernier inscrit
Pandiska