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

Access Discussion :

Fonction donnant le taux de remplissage des champs d'une table [AC-2000]


Sujet :

Access

  1. #1
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut Fonction donnant le taux de remplissage des champs d'une table
    Bonjour,

    j'ai une table avec plus d'une centaine de champs qui sont partiellement remplis.
    et je souhaiterais pouvoir afficher dans un message box le taux de remplissage de chacun des champs.

    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
     
    Public Function RemplissageChamp()
     
    Dim rst As DAO.Recordset
    Dim i, total, total2 As Integer
    Dim NameChamp As String
     
    Set rst = CurrentDb.openrecordset("select * from MaTable")
    total = DCount("*", "MaTable")
     
    For i = 0 To rst.Fields.Count - 1
     
    NameChamp = rst.Fields(i).Name
     
    Rem comptage total des enregistrements
     
    total2 = DCount("*", "MaTable", IsNull([NameChamp]))
     
    MsgBox ((total2 / total) * 100) & " %"
     
    Next i
     
    rst.Close
     
    End Function
    le calcul de total est bon, mais celui de total2 ne fonctionne pas
    en effet, après plusieurs tentatives d'écriture,
    je n'ai pas réussi à faire compter les valeurs nulles

    Merci de votre intervention

    cantador

  2. #2
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut précision
    ayant lu une discussion sur un sujet similaire, je précise qu'il ne s'agit pas ici de valeurs déclarées "null" dans la table mais simplement d'enregistrements non remplis (vides)..

    cantador

  3. #3
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,

    Je crois que ton problème est l'emploi de l'astérisque :

    DCount("*", "MaTable") le nombre d'enregistrements de ta table

    DCount("LeNomDeLaColonne","MaTable") le nombre d'enregistrements où la colonne n'est pas Null

    Regarde si ceci te convient mieux

    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
    Option Compare Database
    Option Explicit
     
    Public Function RemplissageChamp(NomTable As String)
     
    Dim rst As DAO.Recordset
    Dim i, total, total2 As Integer
    Dim NameChamp As String
     
    Set rst = CurrentDb.openrecordset("select * from " & NomTable)
    total = DCount("*", NomTable)
     
    For i = 0 To rst.Fields.Count - 1
     
    NameChamp = rst.Fields(i).Name
     
    total2 = DCount(NameChamp, NomTable)
    MsgBox "La colonne : " & NameChamp & " est remplie à  " & ((total2 / total) * 100) & " %"
     
    Next i
     
    rst.Close
    Set rst = Nothing
     
    End Function
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  4. #4
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    Bonjour ClaudeLELOUP,

    suite à ta proposition, je crée donc une procédure afin de pouvoir lancer la fonction directement dans le module
    en passant en paramètre le nom de la table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public Sub Rempli()
     
    RemplissageChamp ("MaTable")
     
    End Sub
    mais une erreur se produit à l'exécution "Opérateur absent"
    sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    total2 = DCount(NameChamp, NomTable)
    en te précisant que les noms des champs qui défilent sont bons..

    cordialement

  5. #5
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour Cantador,

    N'aurais-tu pas des caractères spéciaux dans tes noms de colonnes ?

    C'est sans doute la cause. Des espaces, des caractères spéciaux, des lettres accentuées finissent toujours par empoisonner la vie.
    Vois cet article Descriptif des conventions typographiques du code Visual Basic de Jean-Philippe AMBROSINO.

    Ce code modifié devrait permettre de contourner le problème.

    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
    Option Compare Database
    Option Explicit
     
    Public Function RemplissageChamp(NomTable As String)
     
    Dim rst As DAO.Recordset
    Dim i, total, total2 As Integer
    Dim NameChamp As String
     
    Set rst = CurrentDb.openrecordset("select * from " & "[" & NomTable & "]")
    total = DCount("*", NomTable)
     
    For i = 0 To rst.Fields.Count - 1
     
    NameChamp = rst.Fields(i).Name
     
    total2 = DCount("[" & NameChamp & "]", "[" & NomTable & "]")
    MsgBox "La colonne : " & NameChamp & " est remplie à  " & ((total2 / total) * 100) & " %"
     
    Next i
     
    rst.Close
    Set rst = Nothing
     
    End Function
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  6. #6
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    Bonsoir,

    oui tu as raison.
    il faut que je nettoie mes noms de champs..

    je te tiens informé du résultat

    @+
    cdlt

  7. #7
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut suite
    Bonsoir,

    en fait, j'ai crée cette table à partir d'une importation d'un fichier EXCEL sous access 2000 et effectivement lors de l'opération, j'avais de multiples erreurs dans les noms de champ :
    principalement des retours chariot.
    je les ai tous corrigés un par un jusqu'à ce que access ne me déclare plus d'erreurs, et on peut noter qu'il accepte des accents aigus, des %, et des blancs dans les noms des champs.

    j'ai toutefois supprimer les accents dans le 3e champ, le premier qui n'est pas 100% rempli.
    et lors du lancement de la procédure, la même erreur s'est produite à nouveau.
    Ce sont en fait les blancs dans les champs qui déclenchaient l'anomalie..

    la première proposition de code fonctionne à condition de vérifier les noms de champs (et sans blanc..)
    en revanche, la deuxième est plus intéressante car elle marche sans toucher aux écritures des champs !

    encore merci
    cantador
    @bientôt

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    la deuxième est plus intéressante car elle marche sans toucher aux écritures des champs !
    Oui, parce qu'elle contient les crochets qui servent de contrepoison...
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

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

Discussions similaires

  1. [AC-2007] Importation et remplissage automatique des champs d'une table
    Par vincent1746 dans le forum VBA Access
    Réponses: 6
    Dernier message: 31/05/2010, 14h17
  2. Remplissage des champs d'une table
    Par kizou dans le forum VBA Access
    Réponses: 2
    Dernier message: 13/03/2009, 11h24
  3. Requête donnant la liste des champs d'une table
    Par laurentSc dans le forum Débuter
    Réponses: 2
    Dernier message: 16/02/2008, 21h08
  4. nom des champs d'une table
    Par K-ZimiR dans le forum Requêtes
    Réponses: 6
    Dernier message: 22/04/2004, 14h21
  5. Ordre des champs dans une table
    Par patapetz dans le forum Outils
    Réponses: 5
    Dernier message: 30/07/2003, 06h53

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