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 :

Limite des 255 caractères dépassé


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 16
    Par défaut Limite des 255 caractères dépassé
    Bonjour,

    Aujourd'hui je travail sur une application en VBA qui effectue à partir d'un USF des requêtes dans un classeur fermé me servant de base de données. Dans mes différentes tables j'ai des champs de commentaires qui peuvent dépasser les 255 caractère. Lors de mes requêtes d'insertion ou d'update le code plante à l’exécution de la requête. Pour vérifier si c'était la longueur de mon champ ou autre j'ai réduis la longueur en dessous de 255 et l'insertion ou l'update s’effectue sans soucis. Ce problème restreins l'utilisation de mon application or j'ai besoin de pouvoir rentrer plus de 255 caractères.
    Voici un peu de code pour voir si c'est moi qui ai faux :
    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
    'Définir la requête à effectuer pour l'insertion
        strSQL = "INSERT INTO [" & ano & "] ([IdAnom], [Libelle], [LocAnom], [SsCateg], [Symptome], [DescriptAno], " & _
                "[ActCurr], [ActCorr], [SuiviAct], [TmpH], [TmpM], [Emetteur], [Responsable], [Etat], [DerModif], " & _
                "[Prio], [DelaiAct], [Détecteur], [Id_RC], [N FACI], [JournaSuivi])" & vbCrLf & _
                "VALUES (p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21);"
     
        OpenConnexion (Fichier)
     
    'Définition des parametres à affecter à chaque valeur (p1,p2,...,px)
        Set adoCMD = CreateObject("ADODB.Command")
        With adoCMD
            .ActiveConnection = Connexion
            .CommandType = adCmdText
            .Parameters.Append .CreateParameter("p1", adVarChar, adParamInput, 9, nvIdAno)
            .Parameters.Append .CreateParameter("p2", adVarChar, adParamInput, 50, Me.TextBox_Libelle.Value)
            .Parameters.Append .CreateParameter("p3", adVarChar, adParamInput, 50, Me.CategorieList.Value)
            .Parameters.Append .CreateParameter("p4", adVarChar, adParamInput, 50, Me.ComboBox_SousCateg.Value)
            .Parameters.Append .CreateParameter("p5", adVarChar, adParamInput, 75, Me.ComboBox_Symptome.Value)
            .Parameters.Append .CreateParameter("p6", adVarChar, adParamInput, 1000, Me.TextBox_Descriptif.Value) 'Ce champ est en erreur à 255 caractères
            .Parameters.Append .CreateParameter("p7", adVarChar, adParamInput, 500, Me.TextBox_ActCur.Value)
            .Parameters.Append .CreateParameter("p8", adVarChar, adParamInput, 500, Me.TextBox_ActCor.Value)
            .Parameters.Append .CreateParameter("p9", adVarChar, adParamInput, 500, Me.TextBox_SuiviAct.Value)
            .Parameters.Append .CreateParameter("p10", adInteger, adParamInput, 2, Me.TempsHommeBox.Value)
            .Parameters.Append .CreateParameter("p11", adInteger, adParamInput, 2, Me.TempsMachineBox.Value)
            .Parameters.Append .CreateParameter("p12", adVarChar, adParamInput, 50, Me.Label_NomEmetteur.Caption)
            .Parameters.Append .CreateParameter("p13", adVarChar, adParamInput, 50, Me.ResponsableList.Value)
            .Parameters.Append .CreateParameter("p14", adVarChar, adParamInput, 4, "Créé")
            .Parameters.Append .CreateParameter("p15", adDate, adParamInput, 50, Format(Now(), "dd/mm/yyyy"))
            .Parameters.Append .CreateParameter("p16", adVarChar, adParamInput, 2, Me.TextBox_Prio.Value)
            .Parameters.Append .CreateParameter("p17", adDate, adParamInput, 50, Me.TextBox_DelaiAct.Value)
            .Parameters.Append .CreateParameter("p18", adVarChar, adParamInput, 50, Me.ComboBox_ServiceEmetteur.Value)
            .Parameters.Append .CreateParameter("p19", adVarChar, adParamInput, 50, Me.TextBox_ARC.Value)
            .Parameters.Append .CreateParameter("p20", adVarChar, adParamInput, 50, Me.TextBox_FACI.Value)
            .Parameters.Append .CreateParameter("p20", adVarChar, adParamInput, 255, "- Créé par " + NomU + " le " + Format(Now(), "dd/mm/yyyy"))
            .CommandText = strSQL
            Set adoRS = .Execute ' l'execution fait une erreur ici
        End With
     
    'Retourne vrai quand l'execution s'effectue sans erreur
        reussi = True
     
    Exit_Anomalie:
    'Fermeture des connections
        Set adoRS = Nothing
        Set adoCMD = Nothing
        Connexion.Close
        Set Connexion = Nothing
    Voilà la portion de code ou j'ai une erreur lorsque j'ai le champ Me.TextBox_Descriptif.Value qui est supérieur à 255 caractère.

    S'il n'y à pas de solution à cette méthodes je suis toujours d'accord pour la contourner du moment ou mon code pourra récupérer plus de caractère.

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     strSQL = "INSERT INTO [" & ano & "] ([IdAnom], [Libelle], [LocAnom], [SsCateg], [Symptome], [DescriptAno], "
     strSQL = strSQL & "[ActCurr], [ActCorr], [SuiviAct], [TmpH], [TmpM], [Emetteur], [Responsable], [Etat], [DerModif], "
     strSQL = strSQL & "[Prio], [DelaiAct], [Détecteur], [Id_RC], [N FACI], [JournaSuivi]) " & vbCrLf
     strSQL = strSQL & "VALUES (p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21);"

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 16
    Par défaut
    Merci mais malheureusement le fait de segmenter la déclaration de la requête n'a rien changé à l’exécution de mon code.
    Il est toujours en erreur lors d'une saisie supérieur à 255 caractère dans le même champs.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Par défaut
    D'après ce que j'ai trouvé, tu as atteint une limite imposée par le moteur Microsoft Jet concernant la taille maxi des champs texte. Il n'y a pas vraiment de solution facile pour compenser.

    Je ne voit pas 36 solutions:
    Soit tu ouvre ton fichier Excel.
    Soit tu l'importe au prealable dans une base de données Access, tu auras alors accès au champs de type memo, qui peuvent contenir plus de 255 caractères.

  5. #5
    Invité
    Invité(e)
    Par défaut
    test comme ça, sans garantie!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     .Parameters.Append .CreateParameter("p6", adVarChar, adParamInput, , Me.TextBox_Descriptif.Value) 'Ce champ est en erreur à 255 caractères

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 16
    Par défaut
    Merci de vos réponses rdurupt et deedolith

    En ce qui concerne ton code, rdurupt, il ne change rien :/
    Et pour mon problème j'ai eu une idée pas très propre mais qui solutionne mon code c'est de diviser mes champs trop important en plusieurs champs dans la base que je divise avant l'enregistrement et que je reconstitue après la recherche.
    Je laisse le sujet ouvert jusqu’à samedi pour voir s'il y a d'autre solutions en attendant j'utilise ce système pour pouvoir faire fonctionner mon application.

Discussions similaires

  1. Contourner la limitation à 255 caractères des string dans VBA
    Par eaglecarbo dans le forum Général VBA
    Réponses: 2
    Dernier message: 25/03/2015, 11h57
  2. Réponses: 10
    Dernier message: 17/01/2015, 13h42
  3. [AC-2000] Limite des 255 colonnes
    Par DkA59 dans le forum Modélisation
    Réponses: 5
    Dernier message: 01/02/2011, 11h16
  4. Limite des 218 caractères dans un nom de fichier
    Par Didier Gonard dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/02/2008, 15h28
  5. Limite des zone d'édition a 255 caractére ?
    Par Arkencia dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/01/2008, 15h59

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