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 :

Recherche de doublons avec VBA


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Points : 11
    Points
    11
    Par défaut Recherche de doublons avec VBA
    Bonsoir à tous,

    Je suis débutant, j'ai une table de plus de 7 millions d'enregistrements, je souhaiterais savoir s'il était possible avec vba de rechercher les doublons car avec Access directement, j'ai le message que la mémoire est insuffisante. J'ai T5250 avec 2Go de RAM.

    Est-il possible de contourner ce problème avec vba Access? Si oui comment?

    Ma Table s'appelle évaluation et la variable score.

    Merci d'avance pour vos réponses.

    Dokko

  2. #2
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 959
    Points : 937
    Points
    937

  3. #3
    Membre expérimenté Avatar de stigma
    Homme Profil pro
    Créateur jeux vidéo
    Inscrit en
    Octobre 2003
    Messages
    1 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Créateur jeux vidéo
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 117
    Points : 1 618
    Points
    1 618
    Par défaut
    Je te livre tel quel mon code pour rechercher des bobines de feuillard enregistrées en double.
    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
    Private Sub doublons_Click()
        '-------------  chercher les doublons de saisie
        Dim l_Dbl As Long
        Set rst = db.OpenRecordset("Inventaires")
        With rst
            .MoveFirst
            Do Until .EOF
                If .Fields("InventaireFour") = True Then l_Dbl = l_Dbl + 1
                If .Fields("InventaireAffutage") = True Then l_Dbl = l_Dbl + 1
                If .Fields("InventaireCuisson") = True Then l_Dbl = l_Dbl + 1
                If .Fields("InventaireDecoupe") = True Then l_Dbl = l_Dbl + 1
                If .Fields("InventaireInspection") = True Then l_Dbl = l_Dbl + 1
                If .Fields("InventaireControle") = True Then l_Dbl = l_Dbl + 1
                If l_Dbl > 1 Then
                    MsgBox "La bobine " & .Fields("InventaireNumBic") & "" _
                    & " est cochée " & l_Dbl & " fois !", vbCritical, "DOUBLON"
                End If
                l_Dbl = 0
                .MoveNext
            Loop
            .Close
        End With
        MsgBox "Vérification terminée", vbInformation, "FIN"
    End Sub
    PS :C'est en DAO

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Bonsoir à tous,

    Tout d'abords je vous remercie pour vos précieuses réponses.

    Je vous présente ci-dessous ce que j'ai écris dans mon programme :

    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
     
    Sub CreerTblDoublons()
    Dim db As Database, r As DAO.Recordset, strSQL As String
    Dim rDoublons As DAO.Recordset
    Dim strCKey As String, strPKey As String
    Dim strTable As String, strTblDoublons As String
     
    strTable = "TableCombinaison7a"
    strTblDoublons = strTable & "_Doublons"
    DoCmd.SetWarnings False
    DoCmd.RunSQL "SELECT  first(combi) as combino, count(combi) INTO [" & strTblDoublons & "] FROM [" & strTable & "] group by combi HAVING (((Count(TableCombinaison7a.Combi))>1))"
     
     
    DoCmd.SetWarnings True
     
    Set db = CurrentDb
     
    Set rDoublons = db.OpenRecordset(strTblDoublons)
     
     
    rDoublons.Close
     
    db.Close
    End Sub

    Le prog fonctionne si ma table contient 5 millions d'enregistrements. Mais avec la table dont j'ai besoin qui contient environ 23 millions d'enregistrements j'ai le message suivant :"Espace insuffisant sur le disque temporaire"


    Je rappel que j'ai vista32 et access 2003, comment faire pour résoudre ce problème de mémoire?

  5. #5
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 959
    Points : 937
    Points
    937
    Par défaut
    Wouach !
    Mais elle fait quelle taille ta base ?
    Je crains qu'Access ne convienne pas pour une telle quantité de données

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Les fichiers bases de données Access sont limités à 2Go.

    C'est vrai aussi pour le fichier temporaire créé par le moteur de base de données Jet (JetXXXX.tmp).
    Si ce fichier atteint 2Go on obtient le message d'erreur que tu as eu.

    Si ta base de données n'est pas trop grosse (pas trop proche de 2Go), essaie de créer un index avec doublons sur le champ combi.
    J'ai eu un problème similaire récemment et cela m'a aidé car le fichier JetXXXX.tmp est resté en dessous de 2Go.

    Quelle taille fait ton fichier de base de données, une fois compacté ?

    A+

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Bonsoir à tous,

    Merci pour vos réponses, la taille de ma base compactée est de 1,35Go.

    Effectivement, le fichier jetxxx.tmp atteint rapidement 2Go.

    LedZeppII, peux tu m'expliquer un peu plus quand tu dis "essaie de créer un index avec doublons sur le champ combi" s'il te plait?

  8. #8
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Pour créer un index, ouvres ta table en mode création.
    Cliques sur le champ combi.
    Dans les propriétés, en face de «indexé», sélectionner Oui avec doublons.
    Cliquer sur le bouton «sauvegarder» (cela peut prendre du temps vu le nombre d'enregistrements).

    A+

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup à tous pour vos précieuses réponses, je testerais la dernière méthode de LedZeppII après noël, mais en attendant, JOYEUX NOËL à tous

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Vu ta quantité de données je suggérerai de faire le travail de recherche de doublon sur le serveur source.

    C'est quoi qui t'alimente ? Oracle, MS-SQL Server ?

    Peux-tu altérer la source ?

    A+

Discussions similaires

  1. Recherche de doublons avec jointure
    Par boubil dans le forum Requêtes
    Réponses: 2
    Dernier message: 08/12/2013, 11h25
  2. [XL-2003] recherche de doublon avec plusieurs conditions
    Par fullmetalknet dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/12/2009, 11h03
  3. recherche intelligente avec VBA excel
    Par bshadow dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/04/2009, 12h33
  4. Rechercher une valeur dans excel avec VBA
    Par kebab666 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/06/2007, 10h00
  5. [VBA] Algo de recherche de doublons
    Par guams dans le forum VBA Access
    Réponses: 6
    Dernier message: 27/07/2004, 17h10

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