VBA ACCESS : erreur 3251, pourquoi?
Résolublux Messages postés 2061 Date d'inscription Statut Modérateur Dernière intervention -
Voici le petit bout de code qui m'ennuie énormément. Le but est de sélectionner les données de la colonne F et de créer autant de fichier qu'il y a de données différentes (si ce sont les mêmes, elles iraient dans le même fichier)
Mais je me tape l'erreur 3251 qui dit l'opération n'est pas autorisée... un petit coup de main?
On Error Resume Next
'boucle qui prend chaque pfc pour l'insérer dans un fichier unique avec son nom de rattachement et son ERD ID
Dim F As DAO.Field
Dim G As DAO.Field
Dim DB As DAO.Database
Dim rst As Recordset
Set DB = CurrentDb()
Set rst = CurrentDb.OpenRecordset("fum&pfc")
Set G = rst.Fields![ERD Id]
Set F = rst.Fields![Rattaché à Id]
rst.MoveFirst
While Not rst.EOF
For Each F In DB
DoCmd.TransferText acExportDelim, "FUM_IMPORT", "FUM_" + F + "_" + G + "_31122011.txt", "C:\Documents and Settings\sghn4628\Desktop\Sujet PFC\FUM_" + F + "_" + G + "_31122011.txt"
Next
Wend
rst.MoveNext
rst.Close
End Sub
2 réponses
Cette discussion porte sur l'export de données distinctes d'une colonne F vers des fichiers pour chaque valeur, avec un nom basé sur ces valeurs et l'ERD, et l'erreur 3251. Plusieurs interventions envisagent de recourir à une requête distincte et une boucle qui segmente l'import/export par valeurs de rattachement, en discutant l'usage de SELECT DISTINCTROW avec jointures fum_pfc et ref_pfc. Des échanges portent sur les boucles For Each F In DB ou For Each F In rst qui n'itèrent pas, et sur l'intérêt d'utiliser une table source unique avec regroupement. Enfin, des suggestions pratiques évoquent d'éviter des chemins trop longs et des noms de fichier avec extension inutile, et d'envisager d'exporter sans extension pour faciliter la maintenance et les vérifications.
-
Salut,
quelle ligne sort l'erreur ?
-
Salut blux, merci de t'interesser à mon sujet =)
Cette erreur sort juste après le For Each-
-
-
Je n'aurais pas fait comme ça, y'a un peu trop de mélange.
Je virerais le foreach (la boucle est déjà faite avec while), la définition des deux champs, de la base et j'attaquerais en direct :
DoCmd.TransferText acExportDelim, "FUM_IMPORT", "FUM_" +rst.fields[rattaché à Id] + "_" + rst.fields[ERD Id] .... -
La boucle me semblait obligatoire parce que dans ce fichier (200.000 lignes) j'dois les regrouper par paquet de X fichiers, X étant = select distinct de F et G (ces données sont les memes, je dois juste les sortir dans le nom du fichier de sortie d'ou les deux champs à déclarer). Je viens quand même de tester et on me parle d'une incompatibilité de type, je ne comprends pas tout à fait pourquoi ou j'ai des types déclarés n'étant pas compatibles
-
Je n'ai donc pas compris ce que tu souhaites faire précisément parce que l'histoire de dire que si les données sont identiques elles vont dans le même fichier, ça ne marchera pas, les fichiers en sortie seront écrits une bonne fois pour toute. Toute donnée identique conduirait à la création d'un fichier réécrasant l'existant. Il n'y a pas d'append...
-