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 :

Compter le nombre de vide dans une table / variable


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 56
    Points : 46
    Points
    46
    Par défaut Compter le nombre de vide dans une table / variable
    Bonjour,
    Je suis entrain de compter le nombre d'occurrences vides dans ma base de données.
    Le code VBA fonctionne à priori correctement (il n'y a pas de bug), mais le résultat est erroné. Certaines variables ont réellement des vides alors que le résultat dit le contraire ou donne moins de vide.
    Voici le 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
    Dim db As DAO.Database
    Dim sqlCpt As String, sqlTab As String, cle As String
    Dim i As Single, compteur As Double, nbMiss As Double
     
    Dim tdf As DAO.TableDef
    Dim fld As DAO.Field
    Dim strVar As String
    Dim strTable As String
     
    Dim rsCpt As DAO.Recordset, rsTab As DAO.Recordset, rsMiss As DAO.Recordset
     
     
    Sub miss()
    On Error GoTo GestionErreur
    Set db = CurrentDb
     
    For Each tdf In db.TableDefs
        If Left(tdf.Name, 3) = "tmp" Then
            sqlTab = "Select * From " & tdf.Name & ""
     
            Set rsTab = db.OpenRecordset(sqlTab, dbOpenDynaset)
            rsTab.MoveLast
            Debug.Print tdf.Name & "--" & rsTab.RecordCount
            For Each fld In rsTab.Fields
                strTable = tdf.Name
                strVar = fld.Name
     
                sqlCpt = "Select * From " & strTable & " where (((" & strVar & ") Is Null));"
                Set rsCpt = db.OpenRecordset(sqlCpt, dbOpenDynaset)
                rsCpt.MoveLast
                nbMiss = rsCpt.RecordCount
     
                Debug.Print strTable & " -- " & strVar & " -- " & nbMiss
     
            DoEvents
            Next fld
     
     
     
        End If
    DoEvents
    Next tdf
     
    db.Close
    Set db = Nothing
    Set tdf = Nothing
    Set fld = Nothing
     
    Debug.Print "****** FIN **************"
     
    Exit Sub
    ' Gestion des erreurs
    GestionErreur:
     
        strDescription = ""
        Resume Next
     
    End Sub
    Par avance, je vous remercie de vos conseils

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,

    à première vue je ne vois pas d'erreur dans le code excepté la complexité du code.

    essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Miss()
        For Each tdf In CurrentDb.TableDefs
            If Left(tdf.Name, 3) = "tmp" Then
                For Each fld In tdf.Fields
                     nbmiss = DCount("*", tdf.Name, fld.Name & " Is NULL")
                    Debug.Print tdf.Name & " -- " & fld.Name & " -- " & nbmiss
                Next
            End If
        Next
    End Sub

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 56
    Points : 46
    Points
    46
    Par défaut
    Merci pour votre code,
    Cependant, j'ai le même résultat en utilisant votre code.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,

    c'est peut-être parce qu'il y a des champs textes="" ; ils ne sont pas vus comme étant NULL mais contenant une chaine vide.

  5. #5
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut ilank et bienvenu diombo,

    je me permet ilank d'illustrer tes propos:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbmiss = DCount("*", tdf.Name, "IsNull(" & fld.Name & ") OR IsEmpty(" & fld.Name & ")")
    j'ai une préférence à utiliser isNull() plutot qu' "Is Null" qui parfois est trompeur et ne marche pas à tous les coups.


Discussions similaires

  1. [AC-2007] Compter le nombre d'enregistrements dans une table
    Par Furiuos dans le forum Access
    Réponses: 8
    Dernier message: 17/07/2009, 13h16
  2. Compter le nombre d'enregistrements dans une table
    Par youhibadelphi dans le forum Langage SQL
    Réponses: 5
    Dernier message: 24/06/2009, 20h30
  3. Compter le nombre d'enregistrement dans une table selon un critere
    Par Angelo91 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 18/08/2008, 12h05
  4. [SQL] Compter le nombre d'occurences dans une table par valeur
    Par SpaceFrog dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/04/2008, 17h22
  5. Compter le nombre de colonne dans une table
    Par Coin dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/12/2006, 16h03

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