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

VBA Access Discussion :

Export XL : Contourner la taille max. d'un champ texte [AC-2000]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut Export XL : Contourner la taille max. d'un champ texte
    Bonjour à tous,

    J'ai un petit soucis (si si ^^) sous access 2000.
    J'ai une application qui permet d'extraire des données avec la méthode outputTo.
    Ca, ca marche niquel.

    Maintenant, j'ai une demande d'évolution afin de permettre de remplir +255 caracteres sur les champs, et surtout de pouvoir l'exporter ce champ texte (donc passer d'un champ texte simple à un mémo).

    J'ai cherché un peu partout, sous access 2000, c'est pas possible directement (apparemment parce que c'est calqué sur un modèle d'export d'access 95 qui ne permettait pas cela)

    J'ai donc trouvé une parade sur le site de microsoft qui consiste à recomposer le mémo sur la feuille excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    texte = rec.Fields("DESCRIPTIF")
    'on le met dans les cellules correspondantes
    xlSheet.Cells(I, 27) = Mid([texte], 1, 250)
    xlSheet.Cells(I, 28) = Mid([texte], 251, 250)
    xlSheet.Cells(I, 29) = Mid([texte], 501, 250)
    'on le reconstitue
    xlSheet.Cells(I, 2) = xlSheet.Cells(I, 27) & xlSheet.Cells(I, 28) & xlSheet.Cells(I, 29)
    Si je parcours ma table, et que j'exporte bêtement, ca marche niquel :
    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
    I = 3
    Do While Not rec.EOF
         For J = 0 To rec.Fields.Count - 1
             If rec.Fields(J).name = "DESCRIPTIF" Then
                 If (Not IsNull(rec.Fields(J))) Then
                     lng = Len(rec.Fields(J))
                     If (lng > 100) Then
                         texte = rec.Fields(J)
                         xlSheet.Cells(I, 27) = Mid([texte], 1, 250)
                         xlSheet.Cells(I, 28) = Mid([texte], 251, 250)
                         xlSheet.Cells(I, 29) = Mid([texte], 501, 250)
                         xlSheet.Cells(I, 2) = xlSheet.Cells(I, 27) & xlSheet.Cells(I, 28) & xlSheet.Cells(I, 29)
                     End If
                 End If
             End If
           Next J
          I = I + 1
          If (I > 5) Then
         Exit Do
       End If
     rec.MoveNext
    Loop
    Maintenant, lorsque je veux comparer un champ de ma table avec un champ d'une feuille excel (sur laquelle j'exporte) pour avoir le bon descriptif à la bonne ligne,
    ca ne marche plus...il ne récupère plus après 255 caractères.
    Voilà le code correspondant (donc j'ai exporté toutes mes lignes avec outputTo, et ensuite je parcours la colonne Id_document pour récupérer les mémos de + 255 caracteres) :

    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
     
    I = 3
    'on parcourt la colonne B (ID_DOCUMENT), en commencant à la 3e ligne
    'tant que la colonne n'a pas de valeur nulle
    While Not xlSheet.Range("B" & I & "").Value = ""
        'on recupere la valeur de ID_DOCUMENT
        id = xlSheet.Range("B" & I).Value
        'on ouvre le recordset
        Set rec = CurrentDb.OpenRecordset("qryGet_Rapport")
        tant qu'il y a des lignes dans le recordset
            Do While Not rec.EOF
            si l'id dans le doc et l'id du recordset correspondent (on a la bonne ligne)
            If (rec.Fields("ID_DOCUMENT").Value = id) Then
                        'on recupere le mémo
                         texte = rec.Fields("DESCRIPTIF")
                        'on le met dans les cellules correspondantes
                         xlSheet.Cells(I, 27) = Mid([texte], 1, 250)
                         xlSheet.Cells(I, 28) = Mid([texte], 251, 250)
                         xlSheet.Cells(I, 29) = Mid([texte], 501, 250)
                            'on le reconstitue
                         xlSheet.Cells(I, 2) = xlSheet.Cells(I, 27) & xlSheet.Cells(I, 28) & xlSheet.Cells(I, 29)
            End If
            rec.MoveNext
        Loop
        rec.Close
        I = I + 1
    Wend
    Qqun aurait une idée sur le pourquoi ?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Bon, j'ai réussi à trouver le pourquoi du comment.

    Allez savoir pourquoi, ouvrir un recordset sur une table = pas de limites.
    Alors que l'ouvrir sur une requete, ca limite les champs texte :-/

    Maintenant, ca marche

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

Discussions similaires

  1. taille max d'un champ excel
    Par christelle_s dans le forum Deski
    Réponses: 3
    Dernier message: 18/06/2013, 08h33
  2. UNIX : contourner taille max buffer pipe
    Par bosow dans le forum C
    Réponses: 5
    Dernier message: 19/04/2010, 16h11
  3. Réponses: 3
    Dernier message: 27/07/2009, 11h09
  4. taille max d'un champ
    Par hamma2 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 23/04/2007, 15h09
  5. taille max du nom d'un champ
    Par hna dans le forum Paradox
    Réponses: 2
    Dernier message: 28/07/2002, 02h40

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