IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur 1004 sur un programme relu cent fois [XL-2019]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2023
    Messages : 11
    Par défaut Erreur 1004 sur un programme relu cent fois
    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

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 946
    Par défaut
    Bonjour, comme dit et répété maintes fois, "ça ne marche pas" ça n'aide pas beaucoup. Dans le sujet du message tu parles d'une erreur 1004, quelle ligne provoque l'erreur ?
    As-tu suivi le code pas à pas ? Tes variables ont-elles les valeur attendues ?
    A priori, je ne vois pas d'erreur dans le code, sans un classeur exemple je ne vois pas comment t'aider.

  3. #3
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    qu'est qu'il y a de pas clair dans l'erreur 1004 ?

    Chez moi - sur mon jeu d'essai - ça marchait du feu de Dieu donc j'ai commencé à mettre des choses bizarres dans la colonne D en imaginant bien que ça pouvait coincer par là :

    Nom : __Capture d’écran 2023-12-08 125824.png
Affichages : 68
Taille : 8,5 Ko

    Donc dans tes "clés" colonne D il y a des choses pas compatibles avec un nom de feuille (et tu risques aussi pas compatible avec un nom de classeur) donc comme le dit le message trop long ou contenant des caractères interdits...

    Tu peux par exemple
    - ne pas renommer l'onglet ou le renommer avec un nom bateau comme "Extraction" ce qui sera toujours plus beau que feuil1 (mais qui ne traitera pas de cas du nom de fichier)
    - appliquer sur la clé une transformation (remplacement des caractères interdits et troncature) qui en déduit un nom correct "comptabilité clients/fournisseurs France" -> "comptabilité clients fournisseu" et une autre pour les noms de fichier sans tronquer pour éviter les doublons
    - intervenir sur les données en amont pour que la clé fournie soit correcte (contrôler la saisie...)
    - remplacer la clé - qui est sans doute un libellé - par une autre colonne (un identifiant, les identifiants sont souvent plus courts et plus simples).

    Le prochaine fois précise le libellé de l'erreur, tout le monde gagnera du temps

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2023
    Messages : 11
    Par défaut
    Bonjour,

    Je vous remercie pour ce retour, et je comprends votre agacement parce que je n'ai pas eu le réflexe de base de regarder l'erreur qui était associée au "code 1004".
    Quand je l'ai exécuté en cliquant sur la petite flèche verte, il n'y avait pas de description précise de la raison de cette erreur 1004.
    Par contre, lorsque j'ai utilisé le menu "exécution / exécuter" j'ai eu l'erreur bien pressentie par "Tête de chat", à savoir que mes intitulés étaient trop longs.
    Avec la fonction "gauche" je les ai raccourci et maintenant ça fonctionne nickel.
    Au plaisir.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur 1004 sur PageSetup.PrintArea multi zone
    Par nawake dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/09/2008, 13h25
  2. Réponses: 8
    Dernier message: 25/01/2008, 12h48
  3. erreur 1004 sur un range
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/11/2007, 17h35
  4. Erreur 1004 sur "fichier - quitter"
    Par sabotage dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 22/08/2007, 19h01
  5. Erreur 1004 sur une boucle simple
    Par ruzakruzak dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 06/07/2007, 10h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo