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 :

Comment éviter cette erreur dans mes textbox lié à l'utilisation d'un caractère (') [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut Comment éviter cette erreur dans mes textbox lié à l'utilisation d'un caractère (')
    Salut le forum

    je remplis une base de données (classeur fermé) à partir d'un autre classeur.
    Je constate que lorsque je renseigne le textbox, si dans le mot ou la phrase saisie il y'a un signe du genre ', à la validation, l'erreur suivante s'affiche "Erreur d’exécution ‘-2147217900 (80040e14)’ :
    Erreur de syntaxe (opérateur absent) dans l’expression « ‘le client n’a’,’Moyen’, ‘bg021’, ’16 :55 :21’) ; »
    Ci-dessous ma macro:
    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
    Private Sub Initiation_Click()
    Dim strsQL As String
    Dim Rs
    Dim mytime
    mytime = Time
    OpenConnexion Fichier
    sql = "select * from  [" & Feuille1 & "] where ucase(trim(NUM_CLIENT)) ='" & Trim(TextBox1.Value) & "';"
    Set Rs = CreateObject("adodb.recordset")
    Rs.Open sql, Cnx
    If Rs.EOF = False Then
    MsgBox "Existe"
    Else
    strsQL = "insert into [" & Feuille1 & "] ([DATE_INITIATION],[NUM_CLIENT],[REVENU],[CUMUL_ENGAGEMENT],[VISA_DEMANDE],[AUTORISATION],[SOLDE_AVANT_VISA],[SOLDE_APRES_VISA],[SITUATION_NETTE],[DELAI_DE_RECUPERATION],[COMMENTAIRE_CC],[NIVEAU_URGENCE],[CODE_INITIATEUR],[HEURE_ENVOI]) "
            strsQL = strsQL & "Values ('" & Trim(Date) & "','" & Trim(TextBox1.Value) & _
            "','" & Trim(TextBox2.Value) & "','" & Trim(TextBox7.Value) & "','" & _
            Trim(TextBox8.Value) & "','" & Trim(TextBox9.Value) & "','" & Trim(TextBox10.Value) & "','" & Trim(TextBox11.Value) & "','" & Trim(TextBox12.Value) & "','" & Trim(TextBox13.Value) & "', '" & TextObjet.Value & " ', '" & Label20.Caption & " ', '" & Trim(TextBox14.Value) & " ', '" & Trim(mytime) & "');"
     
    Cnx.Execute strsQL
    End If
    Rs.Close
    Set Rs = Nothing
    Cnx.Close
    Set Cnx = Nothing
    Unload Me
    End Sub

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql= replace(me.textbox1,"'","''")

  3. #3
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Merci rdurupt pour la proposition.
    Dois-je remplacer cette partie du code par ta proposition?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = "select * from  [" & Feuille1 & "] where ucase(trim(NUM_CLIENT)) ='" & Trim(TextBox1.Value) & "';"
    L'erreur ne survient que lorsque je renseigne du texte dans un textbox avec le signe
    '
    Etant donné que la plupart des textbox est fait pour pendre des données numériques à part le TextObjet.
    Dans votre code vous utilisez le textbox1 ou bien dois-je adapter?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Pour linstant fais le sur les textbox qui font que du texte.

    Là je ne suis pas sur mon PC mais il est temps de commecer à voir la mise en forme des données sql!

    Avant on regardera comment on qualufie les textbox: chanps obligatoires, format date,numérique autre.

    Avant d'envoyer la requête sql il faut vérifier si l'utilisateur a saisie les bonnes valeurs!

  5. #5
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    bonjour rdurupt et le forum

    Merci pour les conseils.
    Je viens vous proposer quelque code pour qui permet de renseigner la bonne valeur à entrer dans le control défini pour appréciation.
    Code permettant l'utilisateur à ne renseigner que des valeurs numériques dans un control:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox.._KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr("1234567890", Chr(KeyAscii)) = 0 Then KeyAscii = 0
    End Sub
    Code pour rendre obligatoire la saisie d'une donnée dans le control défini:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub TextBox.._exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox.. = "" Then _
    Cancel = True: MsgBox "Merci de renseigner une valeur"
    End Sub
    Code pour contraindre la saisie d'une date dans un textbox (exemple avec le textbox11):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub TextBox11_Change()
    Dim Valeur As String
    TextBox11.MaxLength = 10 'nb caractères maxi autorisé dans le textbox
    Valeur = Len(TextBox11)
    If Valeur = 2 Or Valeur = 5 Then
    TextBox11 = TextBox11 & "."
    ElseIf Valeur = 10 Then
    If Not IsDate(Format(Replace(TextBox11, ".", "/"), "yyyy/mm/dd")) Then
    MsgBox "Format incorrect"
    TextBox11 = ""
    Exit Sub
    End If
    End If
    End Sub
    Si pas d'objection de votre part je vais les utiliser.

  6. #6
    Invité
    Invité(e)
    Par défaut
    bonjour,
    utiliser les les éventement des contrôles est source d'erreur!

    j’attends mon heure de table pour te proposer une solution qui vas métamorphose ta vision de la conception!
    j'utilise pour ce genre de traitement comme nous l'avons déjà vue des méthode indépendantes du UF.
    quand tu en auras une bonne collection il te seras plus facile de piocher dedans et de coller le tout dans ton programme; le développement de "Routines" c'est ça qui consomme le plus de temps!

  7. #7
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Ca fait plaisir de vous lire.
    Suis vraiment impatient de voir votre proposition.
    A bientôt

  8. #8
    Invité
    Invité(e)
    Par défaut
    me revoilà!

    ce n'est pas ton problème si l'utilisateur saisie n'importe quoi dans les champs du formulaire; mais si tu l'autorise à valider ses bêtises, là ça devient ton problème!

    pour cela, nous allons qualifier les données avent de les envoyer par SQL.

    nous avons vue, mais c'est peut être passé inaperçue, que chaque contrôle disposait d'une propriété TAG!
    nous l'avons utilisé dans le moteur de recherche du formulaire; quand la valeur est trouvée, nous affectons la valeur de la recherche au TGA du UF!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Tag = Me.ComboBox1.Value
    j'ai remarqué qu tu avais bricolé dans les propriétés du formulaire en changeant par-ci par-là la couleur.
    nous allons opérer de la même façon! en utilisant le Tag de chaque contrôle pour définir les actions de validation à effectuer.

    tout d'abord, nous devons établir une convention.:
    1) nous allons inscrire le champ XLS auquel il fait référence.
    2)si le champ es obligatoire O/N
    3) son format
    a) D=Date
    b) N=Numerique
    c) B=Booleant
    e)T=texte

    le tout avec le ; comme caractère de séparation.
    exmple: N° de Compte;O;T

    et nous allons envoyer le US dans une méthode de validation des contrôles; cette méthode pourra être utilisé dans tous tes programme dans la mesure ou tu respecte la convention si dessus.
    nous verrons plus tard que cette convention s'appliquera aux formatage de données SQL!

    Code Gest_Val : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Sub Valider_Click()
    If ValideFormulaire(Me) = False Then Exit Sub
    Code Module1 : 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
    Function ValideFormulaire(This As UserForm) As Boolean
    Dim I As Long
    Dim TG
    ValideFormulaire = True
    For I = 0 To This.Controls.Count - 1
        If Trim("" & This.Controls(I).Tag) <> "" Then
            TG = Split(This.Controls(I).Tag, ";")
            If TG(1) = "O" And Trim("" & This.Controls(I)) = "" Then
                MsgBox TG(0) & vbCrLf & "Est un champ Obligatoire !", vbExclamation, "Erreur de saisie"
                ValideFormulaire = False
                This.Controls(I).SetFocus
                Exit Function
            End If
         If Trim("" & This.Controls(I)) <> "" Then
            Select Case TG(2)
            Case "N"
                If IsNumeric(Replace(Trim("" & This.Controls(I)), ".", ",")) = False Or InStr(Trim("" & This.Controls(I)), ".") <> 0 Then
                     MsgBox TG(0) & vbCrLf & "Est un champ Numerique !", vbExclamation, "Erreur de saisie"
                    ValideFormulaire = False
                    This.Controls(I).SetFocus
                    Exit Function
                End If
            Case "D"
                If IsDate(Trim("" & This.Controls(I))) = False Or InStr(Trim("" & This.Controls(I)), "/") = 0 Then
                     MsgBox TG(0) & vbCrLf & "Est un champ Date au format jj/mm/aaaa !", vbExclamation, "Erreur de saisie"
                    ValideFormulaire = False
                    This.Controls(I).SetFocus
                    Exit Function
                End If
            End Select
         End If
     
        End If
    Next
    End Function
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 11/09/2014 à 16h34.

  9. #9
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Merci pour votre coaching remarquable.
    L'usf que vous avez joint ne s'ouvre pas.
    Le message d'erreur suivant apparait ;
    "Erreur d'exécution '13': incompatibilité de type"
    Je cherche mais je ne trouve pas la source de l'erreur pour corriger.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    j'ai téléchargé et testé le fichier je n'ai pas de Bug!
    je te remet un nouveau Zip on ne sait j'aimais!
    Fichiers attachés Fichiers attachés
    Dernière modification par AlainTech ; 15/09/2014 à 05h16. Motif: Suppression de la citation inutile

  11. #11
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Bonjour rdurupt

    C'est bon maintenant et j'ai compris votre logique.
    C'est très formidable.
    Cependant je rencontre souvent des messages d'erreurs (voir ci-dessous):
    Erreur d’exécution ‘450’ :
    Nombre d’arguments incorrect ou affectation de propriété incorrecte
    Cette partie du code est soulignée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If TG(1) = "O" And Trim("" & This.Controls(I)) = "" Then
    Savez-vous pourquoi?

  12. #12
    Invité
    Invité(e)
    Par défaut
    j'ai bon chercher dans tout les sens, pour trouver l'erreur, je ne trouve pas!
    peux tu me donner le nom du contrôle et le circonstance du bug?

  13. #13
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Je pense avoir compris.
    Dans le frame1 (Favorable ou Défavorable) j'ai mis ceci dans le tag :"Avis_Valideurs;O;T".
    Je viens de le constater et quand je l'ai enlevé du tag il n'ya plus eu erreur.
    Mon soucis était de rendre aussi obligatoire le choix d'un des éléments du frame1.
    est-il possible de le faire?

  14. #14
    Invité
    Invité(e)
    Par défaut
    Dès lAintant ou du donne le choix tu ne peux pas imposer (rendre obligatoire) le oui et le non

    en revenche tu peux toujours dans les propriétzes du controle imposer avis défavorable ce qui obligera l'utisateur a le modifier
    Dernière modification par AlainTech ; 15/09/2014 à 05h18. Motif: Suppression de la citation inutile

  15. #15
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Salut rdurupt

    Je croyais avoir tout finalisé mais problème de dernière minute.
    En effet, dans l'usf Gest_Penal, lorsque je renseigne le numero de compte et que clic sur valider, le message d'erreur suivant apparaît :
    Erreur d’exécution ‘9’ :
    L’indice n’appartient pas à la sélection
    Et cette partie du code du module est souligné : N.B:il en est de même lorsque je renseigne tous les controls.
    Depuis hier soir je suis à la recherche de l'erreur mais en vain.
    Je vous joint les 2 fichiers pour appréciation.
    Aussi que pensez-vous de mes codes pour les calculs événementiels?
    Fichiers attachés Fichiers attachés

  16. #16
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code Agent;T Voici le tag dur contrôle TextBox14.
    nous devrions avoir si le champ n'es pas obligatoire: Code Agent;N;T
    si non Code Agent;O;T le table comporte 3 dimension
    TG(0) nom du champ
    TG(1) Obligatoire O/N
    TG(2) Format!

  17. #17
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Bonjour rdurupt

    Merci pour le feedback.
    Effectivement je n'avais pas bien compris cette logique:
    TG(0) nom du champ
    TG(1) Obligatoire O/N
    TG(2) Format!
    Je viens de tout révisiter et corriger et ca fonctionne correctement.

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

Discussions similaires

  1. Comment éviter affichage #erreur dans un état
    Par Heureux-oli dans le forum Access
    Réponses: 2
    Dernier message: 07/06/2006, 14h31
  2. Réponses: 1
    Dernier message: 23/09/2005, 18h30
  3. Comment lancer une erreur dans une procédure stockée
    Par borgfabr dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/05/2005, 17h06
  4. Comment éviter les doublons dans ma table
    Par einegel dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/11/2004, 12h18
  5. [Apache] Erreur dans mes scripts CGI
    Par GLDavid dans le forum Apache
    Réponses: 2
    Dernier message: 28/08/2004, 06h14

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