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 :

Problème de dépassement de capacité


Sujet :

VBA Access

  1. #1
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut Problème de dépassement de capacité
    Bonjour à tous, mon problème est le suivant, je rempli une table fournisseur depuis un formulaire de saisie.

    Au moment de la validation, mon code bloque sur le code postal, en m'indiquant que "Dépassement de capacité"

    Au niveau du code vba, j'ai juste marqué:

    En fait c'est au niveau des déclaration des variables que cela bloque!

    Après au niveau de ma table fournisseur, le champ "Code Postal" est définit en "numérique"

    Taille du champ:"réel simple"
    Décimale:"Auto"
    Valeur par défaut: "0"
    Null interdit: "non"
    Indexé:"oui-avec doublons"

    Si quelqu'un peut m'aider?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Un champ pour les codes postaux doit toujours être de type texte car :

    1. Un champ numérique te fera perdre le premier 0 de 06000 pour Nice.
    2. Les codes postaux britanniques par exemples sont composés de lettres et de chiffres.


    Starec

  3. #3
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Slt et merci pour ta réponse STAREC, mais cela ne change rien, en fait l'erreur était déja présente avant, et le type de données était "texte". Je pensais que cela venait de cela, j'avais donc remis "numérique".

    J'ai donc remis "texte", mais mon problème est toujours la?!

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re

    Peux-tu m'expliquer un peu plus le contexte de ton formulaire, source, champs, etc..

    Est qu'est ce que Starec

  5. #5
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Alors, je viens de rencontrer une nouvelle fois se message mais dans un autre formulaire.

    La première fois, c'était dans un formulaire, qui me permettait d'ajouter un nouveau fournisseur, à la table des fournisseurs.

    Mon bug apparaissait donc dans le code de mon bouton validé.

    Voila son 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
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    Private Sub cmdValider_click()
    Dim erreur, Societe, NomInterlocuteur, PrenomInterlocuteur, Adresse, Ville, Pays, Mail, sql As String
    Dim Portable, Fixe, Fax, CP As Integer
    Dim ID_Fournisseur As Integer
    Dim oRst As DAO.Recordset
    Dim odb As DAO.Database
    
    'Test si des champs sont null : si oui message d'erreur et arrrét
    If IsNull(Me.txtNomSociéte) Or IsNull(Me.txtNomInterlocuteur) Or IsNull(Me.txtPrenomInterlocuteur) Or IsNull(Me.txtAdresse) Or IsNull(Me.txtCP) Or IsNull(Me.txtVille) Or IsNull(Me.txtTélFixe) Then
        MsgBox ("Merci de Remplir les champs Obligatoires")
        Exit Sub
    End If
    
    'Test si le téléphone fixe est bien une suite de nombre : si non message d'erreur et arrrét
    If Not IsNumeric(Me.txtTélFixe) Then
        MsgBox ("Le téléphone doit étre une suite de chiffre")
       Exit Sub
    End If
    
    'Test si le téléphone portable est bien une suite de nombre : si non message d'erreur et arrrét
    If Not IsNull(Me.txtTélPortable) And Not IsNumeric(Me.txtTélPortable) Then
        MsgBox ("Le téléphone doit étre une suite de chiffre")
       Exit Sub
    End If
    
    'Test si le fax est bien une suite de nombre : si non message d'erreur et arrrét
    If Not IsNull(Me.txtFax) And Not IsNumeric(Me.txtFax) Then
        MsgBox ("Le fax doit étre une suite de chiffre")
       Exit Sub
    End If
    
    'Affectation des valeur correspondantes aux variables
    Sociéte = UCase(Me.txtNomSociéte)
    NomInterlocuteur = UCase(Me.txtNomInterlocuteur)
    PrenomInterlocuteur = Me.txtPrenomInterlocuteur
    Adresse = Me.txtAdresse
    CP = Me.txtCP
    Ville = Me.txtVille
    Pays = Me.txtPays
    'si le champs telephone portable n'est pas remplit alors il prend la valeur 0
    If IsNull(Me.txtTélPortable) Then
        Portable = 0
        Else
        Portable = Me.txtTélPortable
    End If
    
    Fixe = Me.txtTélFixe
    
    'si le champs fax n'est pas remplit alors il prend la valeur 0
    If IsNull(Me.txtFax) Then
        Fax = 0
        Else
        Fax = Me.txtFax
    End If
    
    'si le champs mais n'est pas remplit alors il prend la valeur null
    If IsNull(Me.txtEmail) Then
        Mail = Null
        Else
        Mail = Me.txtEmail
    End If
    
    'on remplace les apostrophe pas des doubles apostrophes sinon la réquéte ne fonctionne pas
    Sociéte = Replace(Sociéte, "'", "''")
    NomInterlocuteur = Replace(NomInterlocuteur, "'", "''")
    PrenomInterlocuteur = Replace(PrenomInterlocuteur, "'", "''")
    Adresse = Replace(Adresse, "'", "''")
    Ville = Replace(Ville, "'", "''")
    Pays = Replace(Pays, "'", "''")
    
    
    Set odb = CurrentDb
    'réquete qui permet de connaitre le nombre de resultat que renvoie la réquéte qui cherche l'ID du fournisseur ayant le nom et le nom d'intelocuteur entrée
    sql = "SELECT Count(*) FROM (SELECT ID_Fournisseur FROM tbl_Fournisseurs where NomDeLaSociété = '" & Sociéte & "' and NomDeLinterlocuteur = '" & NomInterlocuteur & "' ) "
    Set oRst = odb.OpenRecordset(sql, dbOpenDynaset)
    oRst.OpenRecordset
    
    'si la réquete précédente renvoie un nombre différent de 0 alors la sociéte et le nom de l'interlocteur existe deja : message erreur et arrét
    If oRst.Fields(0).Value <> 0 Then
        
        If Not (oRst.EOF) Then
           message = MsgBox("L'interlocuteur  " & PrenomInterlocuteur & " " & NomInterlocuteur & " de la sociéte " & Sociéte & " est deja présent dans la base, vous ne pouvez l'ajouter une deuxiéme fois", vbCritical, "Doublon")
            Exit Sub
        End If
    End If
    
    'sinon recherche du prochain ID_fournisseur
    'on selectionne le maximum du champ ID_Fournisseur
    sql = "SELECT ID_Fournisseur FROM tbl_Fournisseurs where ID_Fournisseur =(SELECT MAX(ID_Fournisseur) FROM tbl_Fournisseurs)"
    Set oRst = odb.OpenRecordset(sql, dbOpenDynaset)
    'on lui additionne 1
    ID_Fournisseur = oRst.Fields("ID_Fournisseur").Value + 1
    
    'requete d'insertion dans la table tbl_Fournisseurs les valeurs
    sql = "INSERT into tbl_Fournisseurs values (" & ID_Fournisseur & ",'" & Sociéte & "','" & NomInterlocuteur & "','" & PrenomInterlocuteur & "','" & Adresse & "'," & CP & ",'" & Ville & "','" & Pays & "'," & Portable & "," & Fixe & "," & Fax & ",'" & Mail & "')"
    
    'Excecution de la requete
    odb.Execute (sql)
    message = MsgBox("Le fournisseur " & Sociéte & " a été correctement ajouté", vbInformation, "Ajout")
    oRst.Close
    odb.Close
    Set oRst = Nothing
    Set odb = Nothing
    
    DoCmd.Close
    
    End Sub
    Sa bloque sur le text en rouge, soit
    Si sa peut t'aider à y voir un peu plus clair?

    Merci

  6. #6
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Sinon pour la structure de mon formulaire, j'ai 11 txtBox et un bouton validé.

    Dans ma table, le CP est définit comme "texte"

    Taille du champ "50"

    Null interdit "non"

    Chaîne vide autorisée "oui"

    Indexé "oui-avec doublons"

    Compression unicode "non"

    Mode IME "Autre contrôle"

    Mode de formulaire IME "Aucun"

  7. #7
    Invité
    Invité(e)
    Par défaut
    Re

    C'est normal, car ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Portable, Fixe, Fax, CP As Integer
    est déclaré comme un entier, ce qui te refuse les codes postaux supérieurs à 32700 et quelques.
    Il faut que tu le déclares donc en String.

    De plus tes déclarations sont fausses, ainsi la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim erreur, Societe, NomInterlocuteur, PrenomInterlocuteur, Adresse, Ville, Pays, Mail, sql As String
    Il faut savoir qu'il n'y a que sql qui est déclaré comme string, les autres sont déclarés comme des variants. Cela fonctionnera, mais les variants prennent plus de place en mémoire, il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim erreur as String, Societe as String, NomInterlocuteur as String, etc ..
    Ensuite tu te compliques les choses pour l'insertion dans ta table.
    Il te suffit d'utiliser DAO et la méthode AddNew, et tu n'es pas obligé de passer par des variables.

    Starec

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 94
    Points : 79
    Points
    79
    Par défaut
    Dans ton code, la vairable CP est déclaré comme un entier alors que tu veux affecter une chaine de caractére :

    remplace :

    Dim CP As Integer

    par un string

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 94
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par Starec Voir le message
    Re

    Il faut savoir qu'il n'y a que sql qui est déclaré comme string, les autres sont déclarés comme des variants. Cela fonctionnera, mais les variants prennent plus de place en mémoire
    Starec
    , j'apprend quelque chose la, il en est de meme pour ça déclaration d'entier alors ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par pev15 Voir le message
    , j'apprend quelque chose la, il en est de meme pour ça déclaration d'entier alors ?
    Oui, c'est la même chose pour toutes les déclarations, je n'ai pris qu'une ligne comme exemple. Même si cela est fonctionnel, on perd des ressources pour rien, car le type par défaut est le variant qui prend plus de place.

    C'est comme déclaré une variable de type Long pour des grands nombres alors que la valeur peut par exemple aller jusqu'à 10, une donnée de type Byte suffit.

    Cela ne se ressent pas sur de petits traitements, mais sur de longs très longs traitement, cela peut se voir.

    Starec

  11. #11
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Bon ba maintenant sa bloque sur le code postal, à savoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If IsNull(Me.txtEmail) Then
        Mail = Null
        Else
        Mail = Me.txtEmail
    End If
    Erreur "Imcompatibilité de type"

  12. #12
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Bon ba si je les remet en string sa marche, par contre sa bloque toujours sur le code postal avec le message de "capacité dépassée", pourtant, je l'ai bien laissé en integer

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 94
    Points : 79
    Points
    79
    Par défaut
    Tu dois le déclaré en string justement, pas en integer

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Il serait bon de lire l'ensemble des messages.

    Le string n'admet pas de valeurs nulles, mais le type variant oui.
    Au lieu d'affecter une valeur null, affecte une chaine vide "", tu seras moins embêté par la suite.

    Starec

  15. #15
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Don attend je comprend plus rien dans mes variables, qu'est ce que je met en string et qu'est ce que je met en integer. Je croyé que

    Il faut savoir qu'il n'y a que sql qui est déclaré comme string, les autres sont déclarés comme des variants???
    Je ne comprend plus

  16. #16
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Bon j'ai tout mis en string!!! sa marche, mais dans ma table pour les numéros de telephone, je n'ai pas de "0" dans mon 0684... sa me fait directement 684...

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 94
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par Starec Voir le message
    Bonjour

    Un champ pour les codes postaux doit toujours être de type texte car :

    1. Un champ numérique te fera perdre le premier 0 de 06000 pour Nice.
    2. Les codes postaux britanniques par exemples sont composés de lettres et de chiffres.


    Starec
    meme principe sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Portable, Fixe, Fax, CP As Integer

  18. #18
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    OK donc je met tout en string et rien en integer

  19. #19
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Et dans ma table les numéros de telephone, fax... je les met en texte?

    Merci

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 94
    Points : 79
    Points
    79
    Par défaut
    oui évidement.

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

Discussions similaires

  1. [XL-2010] Problème de dépassement de capacité
    Par Tiviia dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 20/03/2013, 16h56
  2. Problème de dépassement de capacité
    Par nicolav dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 19/08/2009, 08h05
  3. [VBA-E] Problème de dépassement de capacité sous Excel
    Par Nicolas67 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/05/2006, 10h36
  4. Problème de dépassement de la capacité d'un TImage
    Par fred.mathiot dans le forum Composants VCL
    Réponses: 7
    Dernier message: 28/12/2005, 11h13
  5. détection de dépassement de capacité
    Par tut dans le forum C++
    Réponses: 10
    Dernier message: 01/12/2004, 22h11

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