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 :

Taille de champ et caractères [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut Taille de champ et caractères
    Bonjour,

    Afin d'écrire dans un classeur fermé, j'utilise ce code :
    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
    Sub AjoutEnregistrement()
      repertoire = ThisWorkbook.Path & "\"
      Set cnn = New ADODB.Connection
      fichier = repertoire & "ADOsource.xls"
      cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & fichier & ";Extended Properties=Excel 8.0;"
      Set rs = New ADODB.Recordset
      rs.Open "SELECT * from [Feuil1$A1:L1000]", cnn, adOpenDynamic, adLockOptimistic
      rs.AddNew
      rs(0).Value = Workbooks("Ajout enregistrements.xls").Sheets("feuil1").Cells(1, 1)
      rs(1).Value = Workbooks("Ajout enregistrements.xls").Sheets("feuil1").Cells(1, 2)
     rs(2).Value = Workbooks("Ajout enregistrements.xls").Sheets("feuil1").Cells(1, 3)
     
     
      rs.Update
      rs.Close
      cnn.Close
    End Sub
    mais dans ma cellule C1, j'ai un texte de plus de 256 caractères, et donc lorsque j'essaye de l'écrire dans le fichier fermé, le code bloque en disant "Le champ est trop petit pour accepter la quantité de données, ...".

    Donc avant de me lancer dans un code qui "séparerait" mon texte en plusieurs cellule (je pense qu'en faisant une boucle avec NBCAR et STXT, je peux "découper" mon texte), je souhaitais savoir s'il n'y avait pas une autre solution....

    En vous remerciant,

  2. #2
    Invité
    Invité(e)
    Par défaut
    il faut formater les colonnes de ton fichier ADOsource.xls en texte avec retour ligne et l'enregistrer!

    si tu ne format pas tes colonnes (Texte,numérique,Date, Oui/Non) tu laisses ADO faire le mauvais choix!

  3. #3
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour ericdev67,

    Je ne comprends pas bien la limite des 256 caractères ?
    Il est vrai que j'ai très rarement utilisé le ADODB.Connection mais je ne vois pas la différence que cela pourrait avoir...
    En effet, la limitation du nombre de caractères dans une cellule Excel est de 32 767.

    J'ai peut-être mal compris quelque chose.

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Merci Kimy_Ire,

    Oui, je sais, même si je suis en Excel 2003, je peux mettre 32000 carctères, mais c'est quand je l'exporte avec ADO que vient le problème...

    Merci rdurupt, encore et toujours...merci,

    J'ai essayé ton conseil, car je pense bien qu'il s'agit d'un problème de format, j'ai donc fait : Nom : Page.JPG
Affichages : 363
Taille : 23,9 Komais ça ne fonctionne pas...dans le doute, j'ai mis le même format pour mes 2 fichiers (ajout et ADO), marche pas...j'ai essayé avec "standard" car j'avais vu dans un post, que le format texte pouvait poser problème...mais idem, ça ne fonctionne pas...

    merci pour ton aide,

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je vais tenter de mettre en place une plateforme pour tester!

    Tes champs ont une entête se colonne?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sql= "insert into [myonglet$] ([Nom],[Commande]) Values ('toto','titi')
    Cn.execute sql

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Merci rdurupt,

    Non, il n'y avait pas de nom de champ, j'ai en rajouté pour voir, mais idem, ça ne fonctionne pas.

    Merci pour ton aide,

  7. #7
    Invité
    Invité(e)
    Par défaut
    L'oublis pas HDR=YES ;

    Oui pour les fichiers.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Ok, merci rdurupt,

    mais tu verras que j'ai modifié le code en allant sur la ligne 2 pour chercher les données, donc HDR=YES utile ?

    Ci joint les fichiers test,

    Merci pour ton aide,
    Fichiers attachés Fichiers attachés

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je me suis battu hier toute la soirée avec Ado.
    Si je place un roman en ligne 2, je peux inséré un roman sinon erreur, on voit bien qu'Ado fait l'apprentissage!

    Mais je cherche encore!

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Merci rdurupt,

    J’ai essayé aussi plusieurs choses sans succès...on dirait qu’ADO à un problème au niveau de la mémoire et qu’il n'arrive pas à restituer le roman lol

    Merci pour ton aide,

  11. #11
    Invité
    Invité(e)
    Par défaut
    Ado analyse les 8 premières lignes si c'est un mémo alors il accepte les mémos!

    C'est pour cela que je parlais du format, mais ça marche pas pour la taille!
    Si dans les 8 lignes il y a un texte de plus de 255 lors il accepte!
    Dernière modification par Invité ; 25/08/2015 à 08h01.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Merci rdurupt,

    Les 8 premières lignes ?, mais je n'ai qu'une ligne ?
    A moins que tu parles de lignes à l'intérieur de la cellule...auquel cas, il faudrait agrandir la ardeur de la colonne...ça je n'ai pas essayé. .. (suis sur tablette, mais dans 1h, j'essaye sur PC...)

    Merci pour ton aide,

  13. #13
    Invité
    Invité(e)
    Par défaut
    Non je parle le ligne dans le tableau Excel, si tu n'as que les entêtes de colonnes ou qu'une ligne avec 25 caractères dans la cellule il va refuser de charger 750 caractères!

    Il semblerait quand fonction du driver le fonctionnement soit différent!

    Je suis sur qu'il soit possible de contourner le problème!

    http://www.developpez.net/forums/d71...e/#post4167212

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    merci rdurupt,

    Effectivement, j'ai essayé (en élargissant la colonne) et cela n'a pas fonctionné..

    J'ai essayé aussi l'idée du lien que tu m'as envoyé (=visu des 8 premières lignes), j'ai donc mis en C1 "textetextetexte,etc...jusqu'à 1000 caractères, pour essayer de "forcer" le format par défaut, et cela n'a pas fonctionné....

    Par contre, je ne pourrais pas passer par les clefs de registres : au boulot, je n'y ai pas accès, car non administrateur...

    Merci pour ton aide,

  15. #15
    Invité
    Invité(e)
    Par défaut
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & fichier & ";Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;"""

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Merci rdurupt,

    J'ai copié/collé ton code, et j'ai un message d'erreur me disant : "Mise à jour impossible, la base de donnée ou l'objet est en lecture seule"....dans le doute, j'ai tout fermé, redémarré l'ordi, et lorsque je lance la macro, même message.....

    Il bloque au niveau de Apparemment, c'est au niveau de que se situe le problème, car quand je fais IMEX=0 le code me remet l'ancien message d'erreur...(=taille)

    Merci pour ton aide,

  17. #17
    Invité
    Invité(e)
    Par défaut
    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
    Sub AjoutEnregistrement()
      repertoire = ThisWorkbook.Path & "\"
      Set cnn = New ADODB.Connection
      Fichier = repertoire & "ADOsource.xls"
      cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=YES; """
      Dim cm As New ADODB.Command
      With cm
            .ActiveConnection = cnn
            .CommandText = "INSERT INTO [Feuil1$] ([Nom],[Prénom],[texte]) Values (?,?,?)"
            .CommandType = adCmdText
            .Parameters.Append .CreateParameter("@Nom", adLongVarChar, adParamInput, 250, ThisWorkbook.Sheets("feuil1").Cells(2, 1))
            .Parameters.Append .CreateParameter("@Prénom", adLongVarChar, adParamInput, 250, ThisWorkbook.Sheets("feuil1").Cells(2, 2))
            .Parameters.Append .CreateParameter("@texte", adLongVarChar, adParamInput, 30000, ThisWorkbook.Sheets("feuil1").Cells(2, 3))
           .Execute
        End With
    End Sub
    le problème est que on doit entrer un long string dans une cellule!
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 25/08/2015 à 16h29.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Super merci rdurupt,

    Tout fonctionne parfaitement et je crois avoir compris ton code : tu définis le nombre de caractères de la cellule (ici 30000, un vrai roman...).

    Je ne connaissais pas la possibilité de pré-formater la taille des cellules. Je recommande même ta réponse dans les "Contributions" car lorsque je cherchais sur G, j'ai vu de nombreux messages, sans réponses...

    Et merci pour cette nouvelle instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO [Feuil1$] ([Nom],[Prénom],[texte]) Values (?,?,?)"
    j'ai vu que dans le dossier démo tu avais juste mis le Nom, et donc avec ton code, je comprends mieux la logique (notamment si je dois rajouter des colonnes)

    merci,

    Merci pour ton aide,

    A+ pour de prochaines aventures,

  19. #19
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    Ado analyse les 8 premières lignes si c'est un mémo alors il accepte les mémos!
    Bonjour,

    Petite précision:
    ADO va assigner à chaque champ (colonne) le format majoritaire des 8 premières lignes.
    Si on met des valeurs de format identique dans les 5 premières, on est certain qu'ADO fera le bon "choix".
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  20. #20
    Invité
    Invité(e)
    Par défaut
    si il mets 0 il le ferra sur toutes la colonne mais le temps de réaction risque de allonger!
    Dernière modification par AlainTech ; 02/09/2015 à 07h06. Motif: Suppression de la citation inutile

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/10/2010, 13h19
  2. Normes pour taille des champs (obs, libellé...)
    Par Kozher dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 13/08/2005, 23h46
  3. Taille des champs entres dans un stringGrid
    Par gilles641 dans le forum Composants VCL
    Réponses: 15
    Dernier message: 11/07/2005, 10h38
  4. [Delphi 2005/Oracle/ADO]Taille de champ incorrecte
    Par Frank dans le forum Bases de données
    Réponses: 20
    Dernier message: 15/04/2005, 14h12
  5. Taille des champs proportionnelle...
    Par Depteam1 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 09/08/2002, 11h48

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