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

Access Discussion :

Export requete vers excel tronquée à 255 caractères [AC-2010]


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 16
    Points : 18
    Points
    18
    Par défaut Export requete vers excel tronquée à 255 caractères
    Bonjour,

    Après plusieurs recherches et différents tests, je ne trouve toujours pas comment faire pour exporter le résultat d'une requete faisant plus de 255 caractères vers excel.

    Ma requete récupère des données d'une table + un champ calculé basé sur une fonction que j'ai fait en vba qui concatène des données de 3 champs d'une autre tables.

    En gros j'ai une table de comptes et une table de contatcs de ces comptes et ma requête me fait une ligne par compte avec une concaténation dans la dernière colonne des contacts réalisés avec ces comptes sous la forme [date du contact] ([type de contact]): saut de ligne [descripif du contact] (fonction ci-dessous).

    Mon export se fait aussi en code vba en écrivant ligne par ligne dans Excel (car je fais d'autres concaténations lors de du remplissage du fichier issues d'autres tables)

    La requête servant de base à l'export n'est pas en dur dans la base, mais gérée par un recordset DAO. Elle n'utilise pas de regroupement (j'ai vu que c'était une des sources possibles de coupures).
    Si j'exécute cette requête dans Access (copie/colle du sql dans une requête), le résultat comprend bien plus de 255 caractères (mon texte n'est pas tronqué quand je visualise le résultat de la requête dans Access), mais une fois envoyé dans Excel, c'est coupé à 255 et c'est suivit d'un caractère spécial non issu de ma requête... :

    10/10/2014 (Courrier) :
    Publipostage initial de présentation du projet + enquete
    20/10/2014 (Courrier) :
    Retour enquete favorable
    27/10/2014 (Tél.) :
    Appel pour validation de la négo
    28/10/2014 (Courrier) :
    envoie de la Propo21
    05/11/2014 (Couă

    si je fais un docmd.transfertspreadsheet de la requête issue du copié/collé évoqué, j'obtiens également une donnée tronquée, mais il n'y a pas le "ă" à la fin



    J'ai vu que cela pouvait aussi être lié au fait qu'Excel se base sur les 8 première ligne pour définir le format de sa colonne (la ligne qui contient plus de 255 était en 12), j'ai donc tenté en modifiant ma requete pour la trier par longueur du commentaire décroissant, mais cela coupe quand même à 255 caractères...

    Je ne vois pas comment procéder. J'aimerais éviter de devoir créer une table temporaire avec un champ de type mémo (qui lui sera paut être complètement exporté ?)

    Je met le code de ma fonction et de ma manipulation Excel mais je ne pense pas que le problème vienne de là vu le résultat du transfertspreadsheet sur la requête qui contient le champs de plus de 255 caractères.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Function ConcatContact(ChampSearch, id)
     
    Dim rst As DAO.Recordset
    Dim sql As String
    ConcatContact = ""
     
    sql = "SELECT Contact.Contact_Date, Contact.Contact_Type, Contact.Contact_Rq"
    sql = sql & " FROM Contact"
     
    Select Case ChampSearch
        Case "Compte"
            sql = sql & " WHERE Nz([Contact_Compte],'') = '" & id & "'"
        Case "Exploitation"
            sql = sql & " WHERE Nz([Contact_Exploit],'') = " & id & ""
        Case "Tiers"
    End Select
     
    sql = sql & " ORDER BY Contact.Contact_Date"
     
    Set rst = CurrentDb.OpenRecordset(sql)
     
    If rst.EOF Then Exit Function
     
    ConcatContact = rst("Contact_Date") & " (" & rst("Contact_Type") & ")" & IIf(Nz(rst("Contact_Rq"), "") = "", "", " : " & Chr(13) & Chr(10) & rst("Contact_Rq"))
    rst.MoveNext
    While Not rst.EOF
        ConcatContact = ConcatContact & Chr(13) & Chr(10) & rst("Contact_Date") & " (" & rst("Contact_Type") & ")" & IIf(Nz(rst("Contact_Rq"), "") = "", "", " : " & Chr(13) & Chr(10) & rst("Contact_Rq"))
        rst.MoveNext
    Wend
     
    rst.Close
    Set rst = Nothing
     
    End Function
    Code de l'export (j'ai effacé des bouts car bcp de passages inutiles = remplissage des autres colonnes qui ne posent pas de problème)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    '***ouverture du fichier excel entretien
     
    Set appExcel = CreateObject("Excel.Application")
    Set wbExcel = appExcel.Workbooks.Add
    Set wsExcel = wbExcel.Sheets(1)
     
    wbExcel.Sheets(1).Name = "Compte"
     
     
    '************************************
    '*** selection des données compte ***
    '************************************
     
    Set db = CurrentDb
    Set rst = db.OpenRecordset("SELECT Compte.*, ConcatContact('compte',[Id_compte]) as contacts FROM Compte  ORDER BY Compte.Id_Compte;")
     
    rst.MoveFirst
    rst.MoveLast
    avance = rst.RecordCount
    rst.MoveFirst
     
     
    '***ecriture ligne à ligne
     
    nbEnreg = 1
    id = 0
    cptligne = 1
    cpt = ""
     
    wsExcel.Cells(cptligne, 1) = "RefCpt1"
    ...
    wsExcel.Cells(cptligne, 6) = "Historique contacts"
    wsExcel.Cells(cptligne, 9) = "NomComplet"
    wsExcel.Cells(cptligne, 10) = "Nee"
    ...
     
    wbExcel.SaveAs FileName:=CurrentProject.Path & "\Suivi_Nego.xlsx"
     
    Set wbExcel = appExcel.Workbooks.Open(CurrentProject.Path & "\Suivi_Nego.xlsx")
    Set wsExcel = wbExcel.Sheets(1)
     
    Do Until rst.EOF
    cptligne = cptligne + 1
     
        wsExcel.Cells(cptligne, 1) = rst("Id_compte")
     ...
        wsExcel.Cells(cptligne, 6) = rst("contacts")
     
     
        Set rst2 = db.OpenRecordset("SELECT Proprio.*,Cpt_Proprio.* FROM Proprio INNER JOIN Cpt_Proprio ON Proprio.Id_Proprio = Cpt_Proprio.Id_Proprio WHERE (((Cpt_Proprio.Id_Compte)='" & rst("Id_compte") & "'));")
     
        wsExcel.Cells(cptligne, 9) = IIf(Nz(rst2("Civilite"), "") = "", rst2("Nom"), rst2("Civilite") & " " & rst2("Nom") & " " & rst2("prenom"))
        wsExcel.Cells(cptligne, 10) = rst2("Nee")
    ...
     
        rst2.MoveNext
     
        While Not rst2.EOF
            wsExcel.Cells(cptligne, 9) = wsExcel.Cells(cptligne, 9) & Chr(10) & IIf(Nz(rst2("Civilite"), "") = "", rst2("Nom"), rst2("Civilite") & " " & rst2("Nom") & " " & rst2("prenom"))
            wsExcel.Cells(cptligne, 10) = wsExcel.Cells(cptligne, 10) & Chr(10) & rst2("Nee")
     
            rst2.MoveNext
        Wend
        rst2.Close
     
        rst.MoveNext
        nbEnreg = nbEnreg + 1
     
    Loop
     
    rst.Close
    rst2.Close
    set rst=nothing
    set rst2 = nothing
     
    wbExcel.Close True
     
    Set wbExcel = Nothing
    Set wsExcel = Nothing
    appExcel.Quit

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 16
    Points : 18
    Points
    18
    Par défaut
    j'ai essayé avec wsExcel.Cells(cptligne, 6).copyfromrecordset rst3
    en mettant dans rst3
    Set rst3 = db.OpenRecordset("select ConcatContact('compte',[Id_compte]) as contacts from compte where Id_Compte ='" & rst("Id_Compte") & "';")
    mais le problème reste le même, à savoir que je suis coupé à 255 caractères et qu'il ajoute un truc qui n'a rien à voir derrière (à part que c'est plus un ă qui suit mes 255 caractères, mais un 眪)

    si je mets
    Set rst3 = db.OpenRecordset("select len(ConcatContact('compte',[Id_compte])) as contacts from compte where Id_Compte ='" & rst("Id_Compte") & "';")
    j'obtiens bien 281 donc mon résultat de requête est bien supérieur à 255

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 16
    Points : 18
    Points
    18
    Par défaut
    J'ai tenté la méthode proposé par Hervé le vieux à savoir :

    "Si la question est encore d'actualité, voisi une astuce que j'utilise pour coller des caractères issues d'une requête Access vers Excel 2003 :
    * coller les caractères dans un tableau Word ;
    * copier la cellule Word dans le presse-papier ;
    * coller le presse papier dans la cellule ou l'ensemble de cellules EXCEL ...et le miracle s'accomplit :-) "

    Mais j'ai pas du bien faire les choses car le miracle ne s'accomplit pas

    10/10/2014 (Courrier) :
    Publipostage initial de présentation du projet + enquete
    20/10/2014 (Courrier) :
    Retour enquete favorable
    27/10/2014 (Tél.) :
    Appel pour validation de la négo
    28/10/2014 (Courrier) :
    envoie de la Propo21
    05/11/2014 (Cou۶ i궼0㿠目fh㽸目㿠目fh㽸目䈜ଢ଼꼠0阀

    J'obtiens plus de caractères, mais pas vraiment exploitables

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 16
    Points : 18
    Points
    18
    Par défaut
    Bon ben je suis passé par une table en dur dans laquelle je créé un champ mémo que je rempli temporairement pour mon export ... Ca ne m'arrange pas vraiment mais je n'ai trouvé que cela pour récupérer l'intégralité de l'info une fois la donnée exportée...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/09/2008, 16h41
  2. export requete vers Excel
    Par toolmeup dans le forum VBA Access
    Réponses: 3
    Dernier message: 22/06/2007, 17h54
  3. Réponses: 4
    Dernier message: 13/09/2006, 16h53
  4. Export requete vers excel et mise en forme
    Par ston dans le forum Access
    Réponses: 2
    Dernier message: 27/10/2005, 16h55
  5. export de requete vers excel(pb de mise en forme)
    Par syl221 dans le forum Access
    Réponses: 13
    Dernier message: 20/10/2004, 15h15

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