Exporter données suite à 1 saut de page entre groupe

maryrossignon

XLDnaute Junior
Bonjour à tous,

Voici ma question :

J'ai un fichier sur lequel j'applique un sous total à chaque changement de "CI" (G1) et j'y applique également un saut de page entre les groupes (voir fichier joint).

Comment pourrais-je procéder pour créer dans un dossier "X", en une seule manipulation (1 clic sur bouton),
un nouveau fichier Excel pour chaque groupe et en lui attribuant comme nom de fichier le nom du responsable concerné + le nom de l'onglet ?

Cordialement

MaryR
 

Pièces jointes

  • Sans titre-1.jpg
    Sans titre-1.jpg
    44.4 KB · Affichages: 47
  • Sans titre-1.jpg
    Sans titre-1.jpg
    44.4 KB · Affichages: 42
  • Sans titre-1.jpg
    Sans titre-1.jpg
    44.4 KB · Affichages: 44
  • Echéancier clients_V2003.zip
    16 KB · Affichages: 25
C

Compte Supprimé 979

Guest
Re : Exporter données suite à 1 saut de page entre groupe

Bonjour MaryR,

Tu trouveras ci-joint ton fichier avec un petit code qui devrait t'aller :D
du moins je l'espère ;)

A+
 

Pièces jointes

  • Echéancier clients_V2003.xls
    59 KB · Affichages: 179

maryrossignon

XLDnaute Junior
Re : Exporter données suite à 1 saut de page entre groupe

Bonjour le Forum,
Salut BrunoM45,

C'est génial ! Ce "Petit Code" me convient parfaitement !!!!

Toute petite modif à faire... Je t'ai fait part d'un fichier version 2003 pour être sur que via le forum les gens puissent le lire mais en réalité nous bossons avec la version 2007 (au boulot).

Il y aura donc ce petit problème de compatibilité dont on a déjà fait les frais...

Je souhaiterai juste pouvoir enregistrer les nouveaux fichiers générés en version .xlsx (V2007) mais lorsque je corrige l'extension dans ton code et que je lis les fichiers, j'ai le message d'erreur (voir annexe) qui apparait.
Pourrais-tu me dire comment corriger le code, stp.

Cordialement et encore merci.............

MaryR
 

Pièces jointes

  • Sans titre-2.jpg
    Sans titre-2.jpg
    26.7 KB · Affichages: 41
  • Sans titre-2.jpg
    Sans titre-2.jpg
    26.7 KB · Affichages: 41
  • Sans titre-2.jpg
    Sans titre-2.jpg
    26.7 KB · Affichages: 40
C

Compte Supprimé 979

Guest
Re : Exporter données suite à 1 saut de page entre groupe

Re,

Je pense qu'il suffit de changer la ligne
Code:
ActiveWorkbook.SaveAs Filename:=VPath & NomResp & ".xlsx", _
            FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
            ReadOnlyRecommended:=False, CreateBackup:=False

Par
Code:
ActiveWorkbook.SaveAs Filename:=VPath & NomResp & ".xlsx
tout simplement ;)

Sinon effectivement : FileFormat:=xlNormal
correspond à une version non correcte pour Excel 2007

Nota : Pense à utiliser l'enregistreur de macro qui existe aussi dans 2007,
cela peut te donner des indices :p

A+
 

maryrossignon

XLDnaute Junior
Re : Exporter données suite à 1 saut de page entre groupe

Bonsoir le Forum,
Bonsoir BrunoM45,

Suite à tes corrections la macro fonctionne à merveille.

Si je peux abuser..., dans d'autres cas similaires, j'aurai besoin d'effectuer la même procédure, sous totaux par CI mais serait-il possible cette fois d'exporter les données avec un regroupement par Conducteur (contenant tous les CI qui le concerne).

Merci pour ta précieuse aide....

Cordialement

MaryR
 
C

Compte Supprimé 979

Guest
Re : Exporter données suite à 1 saut de page entre groupe

MaryR,

Pour l'export par responsable, voici le code
Code:
Sub ExportParResponsable()
  Dim DerLig As Long, Lig As Long, LigDeb As Long
  Dim NomResp As String, ShtNew As Worksheet
  Dim VPath As String
  ' Effectuer peut-être un TRI ici
  'Cells.Sort Key1:=Range("L2"), Order1:=xlAscending, _
    Key2:=Range("G2"), Order2:=xlAscending, _
    Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
  ' Créer les sous-totaux
  Cells.RemoveSubtotal
  Cells.Subtotal GroupBy:=7, Function:=xlSum, TotalList:=Array(9, 10, 11), _
        Replace:=True, PageBreaks:=True, SummaryBelowData:=True
  ' Exporter chaque groupe du même responsable
  With ActiveSheet
    DerLig = .Range("G" & Rows.Count).End(xlUp).Row - 1
    LigDeb = 2: NomResp = ""
    ' Récupérer le chemin d'accès de ce classeur
    VPath = ActiveWorkbook.Path & "\"
    ' Pour chaque ligne
    For Lig = 2 To DerLig
      ' Mémoriser le nom du responsable
      If NomResp = "" Then NomResp = .Range("L" & Lig)
      ' Si la ligne contient le terme "Total"
      If InStr(1, .Range("G" & Lig), "Total") > 0 Then
        ' Vérifie si la suivante appartient au même RESPONSABLE
        If .Range("L" & Lig + 1) <> NomResp Then
          ' On crée une nouvelle feuille
          Sheets.Add After:=Sheets(Sheets.Count)
          ' On mémorise dans une variable objet
          Set ShtNew = ActiveSheet
          .Range("A1:O1,A" & LigDeb & ":O" & Lig).Copy Destination:=ShtNew.Range("A1")
          ShtNew.Name = NomResp
          ' On déplace la feuille dans un nouveau classeur
          ShtNew.Move
          ' On sauvegarde ce nouveau classeur
          ActiveWorkbook.SaveAs Filename:=VPath & NomResp & ".xls", _
              FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
              ReadOnlyRecommended:=False, CreateBackup:=False
          ActiveWorkbook.Close
          ' Mémoriser la nouvelle ligne de départ
          LigDeb = Lig + 1: NomResp = ""
          ' Effacer la variable objet
          Set ShtNew = Nothing
        End If
      End If
    Next Lig
  End With
  ' Petit message
  MsgBox "C'est fini !", vbInformation, "Yeeessss"
End Sub

En revanche il faut que les lignes concernant le même responsable se suivent, comme pour "Rachid"

Si "Dupont Nicolas" et "Nicolas Dupont" étaient le même responsable, ça ne pourrait pas fonctionner ;)

Sinon il faut trier tes lignes correctement au début de la Sub (code mis en annotation)

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 695
Messages
2 091 049
Membres
104 747
dernier inscrit
CELDU60