Bonjour, j'ai un gros fichier qui résulte d'un formulaire rempli par tous les agents de la boite, il est à découper en autant de fichiers excel qu'il y a de composantes de ma boite de façon à renvoyer à chaque directeur de composante un fichier qui regrouppe les réponses de ses salariés.
Voici ce que j'ai fait, et ça ne marche pas, si quelqu'un a une idée du pourquoi je suis preneur :
Sub ExportData()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim folderPath As String
Dim fileName As String
Dim participantName As String
Dim dict As Object
Dim key As Variant
Dim fileContent As String
Dim newWorkbook As Workbook
Dim newWorksheet As Worksheet
Dim currentRow As Long
Dim j As Variant ' Nouvelle variable pour la boucle interne
' Définit la feuille de calcul active comme la première feuille dans le classeur actif
Set ws = ThisWorkbook.Sheets(1)
' Détermine la dernière ligne de données en recherchant la dernière cellule non vide dans la colonne A
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' Définit le chemin d'accès au dossier de destination
folderPath = "C:\Users\MONIDENTIFIANT\Documents"
' Crée un nouveau dictionnaire
Set dict = CreateObject("Scripting.Dictionary")
' Regroupe les lignes ayant la même information dans la colonne D
For i = 2 To lastRow
fileName = Trim(ws.Cells(i, "D").Value)
If fileName <> "" Then
If Not dict.Exists(fileName) Then
' Si la clé (fileName) n'existe pas encore dans le dictionnaire, ajoutez-la avec une nouvelle liste vide
dict.Add fileName, New Collection
End If
' Ajoutez la ligne entière au groupe correspondant dans le dictionnaire
dict(fileName).Add i
End If
Next i
' Parcourt le dictionnaire pour créer et écrire les données dans les fichiers Excel
For Each key In dict.Keys
' Crée un nouveau classeur Excel
Set newWorkbook = Workbooks.Add
Set newWorksheet = newWorkbook.Sheets(1)
newWorksheet.Name = key ' Nomme la feuille avec la clé du dictionnaire
' Écrit les en-têtes de colonne dans la feuille Excel
newWorksheet.Cells(1, 1).Value = "Adresse email du supérieur"
newWorksheet.Cells(1, 2).Value = "Nom"
newWorksheet.Cells(1, 3).Value = "Prénom"
newWorksheet.Cells(1, 4).Value = "Composante"
newWorksheet.Cells(1, 5).Value = "Formation demandée"
newWorksheet.Cells(1, 6).Value = "Type de formation"
newWorksheet.Cells(1, 7).Value = "But professionnel visé par cette inscription"
newWorksheet.Cells(1, 8).Value = "Session choisie (si pertinent)"
newWorksheet.Cells(1, 9).Value = "Formation choisie"
newWorksheet.Cells(1, 10).Value = "Formation validée"
newWorksheet.Cells(1, 11).Value = "Motivation (si refus)"
' Parcourt les lignes regroupées pour écrire les données dans la feuille Excel
currentRow = 2 ' Commence à écrire à partir de la deuxième ligne
For Each j In dict(key)
' Copie les données depuis la feuille source vers la nouvelle feuille Excel cellule par cellule
For i = 1 To 9
newWorksheet.Cells(currentRow, i).Value = ws.Cells(j, i).Value
Next i
currentRow = currentRow + 1 ' Passe à la ligne suivante
Next j
' Enregistre le nouveau classeur Excel dans le dossier spécifié
newWorkbook.SaveAs folderPath & "\" & key & ".xls", FileFormat:=56 ' 56 représente le format XLS
newWorkbook.Close SaveChanges:=False ' Ferme le classeur Excel après avoir écrit les données sans sauvegarder les changements
Next key
MsgBox "Terminé!"
End Sub
Partager