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

IHM Discussion :

Erreur d'exécution "5" [AC-2003]


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 132
    Points : 61
    Points
    61
    Par défaut Erreur d'exécution "5"
    Bonjour tout le monde,

    Voici mon problème sur clique du bouton btn_ajout_marque une fenêtre InputBox apparaît et demande de rentrer la marque à ajouter quand on saisi le nom et qu'on valide ca marche. j'utilise ce code pour cette action
    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
    Private Sub btn_ajout_marque_Click()
     
    Dim oRst As DAO.Recordset
     
    nouvelEnregistrement = GetProperName(InputBox("Entrez ci-dessous l'élément à rajouter dans la liste :"))
    If nouvelEnregistrement = "" Or IsNull(nouvelEnregistrement) Then
    Exit Sub
    Else
    Set oRst = CurrentDb.OpenRecordset("select nom_marque from tbl_marque", dbOpenDynaset)
    While Not oRst.EOF
    If nouvelEnregistrement = oRst.Fields("nom_marque").Value Then
    MsgBox ("L'élément saisi existe déjà dans la liste.")
    Exit Sub
    End If
    oRst.MoveNext
    Wend
     
    With DoCmd
    .SetWarnings False
    .RunSQL "INSERT INTO tbl_marque(nom_marque) VALUES ('" & nouvelEnregistrement & "');"
    .SetWarnings True
    End With
    MsgBox ("L'élément " & nouvelEnregistrement & " a été ajouté à la liste.")
    End If
     
    End Sub
    et GetProperName fait appelle à ce module qui permet de mettre toute les 1er lettre du mot en majuscule.
    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
    Option Compare Database
    
    Option Explicit
    
    Public Function GetProperName(ByVal TextToConvert As String) As String
    Dim i As Integer
    Dim separateur
    separateur = Array(" ", ";", ":", "-", "~", "@", "_", "&", "*", "#", "'", Chr(160))
    TextToConvert = LCase(TextToConvert)
     
    'mettre la première lettre en majuscule
    TextToConvert = UCase(Mid(TextToConvert, 1, 1)) + Right(TextToConvert, Len(TextToConvert) - 1)
     
    'mettre en majuscule après chaque séparateur
    For i = 1 To Len(TextToConvert) - 1
        If UBound(Filter(separateur, Mid(TextToConvert, i, 1))) >= 0 Then
            TextToConvert = Left(TextToConvert, i) + UCase(Mid(TextToConvert, i + 1, 1)) + Right(TextToConvert, Len(TextToConvert) - i - 1)
        End If
    Next i
     
    GetProperName = TextToConvert
    End Function
    Par contre quand on fait annuler avec une saisi ou non j'ai une fenêtre d'erreur qui apparaît qui est:

    Erreur d'exécution "5":
    Argument ou appelle de procédure incorrect.

    quand je clique sur débogage il pointe sur la ligne que j'ai mis en gros.

    Pourquoi ai-je cette erreur? Alors que ce module fonctionne très bien sur d'autre formulaire.

    Je vous remercie par avance de votre

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 155
    Points : 196
    Points
    196
    Par défaut
    Bonjour,

    La fonction InputBox retourne une chaîne vide (de longueur nulle) lorsqu'on appuie sur Annuler. Je crois qu'au tout début de ta fonction GetProperName, il faudrait mettre quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    If Len(TextToConvert)<=0 Then
       GetProperName=""
       Exit Function
    End If

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 132
    Points : 61
    Points
    61
    Par défaut
    Merci Alain36 ça marche nickel chrome

    le code donne ceci:

    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
    Option Compare Database
     
    Option Explicit
     
    Public Function GetProperName(ByVal TextToConvert As String) As String
    Dim i As Integer
    Dim separateur
    separateur = Array(" ", ";", ":", "-", "~", "@", "_", "&", "*", "#", "'", Chr(160))
    TextToConvert = LCase(TextToConvert)
     
    If Len(TextToConvert) <= 0 Then
       GetProperName = ""
       Exit Function
    End If
     
    'mettre la première lettre en majuscule
    TextToConvert = UCase(Mid(TextToConvert, 1, 1)) + Right(TextToConvert, Len(TextToConvert) - 1)
     
    'mettre en majuscule après chaque séparateur
    For i = 1 To Len(TextToConvert) - 1
        If UBound(Filter(separateur, Mid(TextToConvert, i, 1))) >= 0 Then
            TextToConvert = Left(TextToConvert, i) + UCase(Mid(TextToConvert, i + 1, 1)) + Right(TextToConvert, Len(TextToConvert) - i - 1)
        End If
    Next i
     
    GetProperName = TextToConvert
    End Function
    Comment ça se fait que cette erreur apparaît via InputBox et non via une zone de texte?

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 155
    Points : 196
    Points
    196
    Par défaut
    Bonjour,

    Je te réponds peut-être un peu tard, mais c'est le Right$ dans la ligne TextToConvert=... qui provoquait l'erreur. Avec une chaîne de longueur nulle, on avait Right$("",-1). L'interpréteur VBA n'appréciait pas le -1.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 132
    Points : 61
    Points
    61
    Par défaut
    Il n'est jamais tard d^_^b

    Merci beaucoup Alain36 pour tes lumières ca me permet de mieux comprendre le monde d'access
    j'ai encore du chemin à faire.

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

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