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 :

Parcourir table ACCESS et supprimer certains enregistrements


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Points : 12
    Points
    12
    Par défaut Parcourir table ACCESS et supprimer certains enregistrements
    Bonjour a tous

    Voila j'ai un probleme que je dois resoudre urgemment pour mon boulot alors le stress ne m'aide pas a travailler
    je suis encore debutant sous access

    Voila je cherche a effectuer un parcours de ma table et a supprimer certain enregistrement sous vba access

    Pour plus de précision sur mon code:

    dans ma tablecible j'ai :
    du numerique en colonne A et du texte en colonne B


    ce que je veux faire:
    soit un enregistrement a nimporte quel ligne si on trouve un autre enregistrement avec la meme information en colonne A alors on ne doit laisser qu'un seul enregistrements et supprimer les autres. le tri est fait en fonction du contenu en colonne B.

    En fait j'ai du mal a visualiser comment lui dire d'aller chercher un autre enregistrement a une autre ligne.

    comment lui dire en vba de chercher ailleurs ?

    si j'ai du mal a etre clair.dsl

    merci d'avance

    Bonne journée

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 354
    Points
    34 354
    Par défaut
    Bonjour,
    avant de passer par VBA, quelques pistes en SQL :
    http://access.developpez.com/faq/?page=SQL#Supprdblons

    sinon pour le VBA, le très bon cours sur DAO :
    http://warin.developpez.com/access/dao/

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Points : 12
    Points
    12
    Par défaut
    Merci pour ta reponse rapide
    en effet le cours semble interessant
    je regarde la partie sur les hierarchies et les boucles For
    je suppose que c'est ca que je dois utiliser

    ds une table excel cela aurait été plus simple je suppose:

    algo:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    FOr i allant de 0 à dernier enregistrement de la table
       Si a la cell(i,1)=cell(i+1,1) alors
           Si cell(i,2)>cell(i+1,2) alors
               supprime row(i+1)
           sinon 
               supprime row(i)
           fin si
       fin Si
    Next
    Si qq sait comment faire ca sur dans vba

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Points : 12
    Points
    12
    Par défaut
    Je ne trouve vraiment pas d'exemple de boucle for sur access je ne sais meme pas si c'est possible de cette façon.

  5. #5
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 354
    Points
    34 354
    Par défaut
    tu ne nous as pa dit quel critère tu comptes utiliser pour dire sur deux enregistrements lequel tu comptes supprimer

    en lieu et place de la boucle For, je recommande la fonction

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Points : 12
    Points
    12
    Par défaut
    Le tri peut s'effectuer sur 4 enregistrements maximum parfois et non seulement 2.

    la table access est du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    colA    colB
    001     a
    001     b
    001     c
    001     d
    002     b
    003     c
    003     a
    006     b
    008     c
    008     a
    ...
    Il y a exactement 4 type d'information differente dans colB: a, b, c ou d.

    Je veux qu'il modifie la table pour qu'elle devienne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    colA    colB
    001     a
    002     b
    003     a
    006     b
    008     a
    ...
    en utilisant une loi du type a>b>c>d
    ce qui veut dire que si pour 001 on a 4 enregistrements avec a b c et d on ne conserve que celui avec a et que l'on supprime les trois autres.

    Voila j'espere que je suis un peu plus clair là.

    merci d'avance

  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 354
    Points
    34 354
    Par défaut
    idée à creuser :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT colA, Min(colB) FROM MaTable;

    supprimer tout le reste
    - jointure LEFT JOIN + Champ à Null

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Points : 12
    Points
    12
    Par défaut
    Dans mon exemple je prend la loi a>b>c>d pour simplifier

    Mais dans ma table il ne s'agit pas d'une seul lettre mais de mots et l'ordre n'est pas le meme.

    je te copie ci dessous le reste de mon code qui me permet de faire l'extraction de mes données excel.


    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
     
    Private Sub Commande0_Click()
     
    Dim oApp As Excel.Application
    Dim oWkb As Excel.Workbook
    Dim oWSht As Excel.Worksheet
     
    Set oApp = CreateObject("Excel.Application")
    Set oWkb = oApp.Workbooks.Open("adresse de mon fichier excel")
    Set oWSht = oWkb.Worksheets("feuil1")
     
     
     
     'l'importation commence à la ligne 1
    i = 1
     
     
    'Pas de message d'erreur
    DoCmd.SetWarnings False
     
    'importation tant que la cellule est differente de ""
    While oWSht.Range("A" & i).Value <> ""
     
     
     
    'Remplissage de la table sans les doublons
    If DCount("*", "tablecible", "[A] LIKE '" & oWSht.Cells(i, 1) & "*' AND [B] LIKE '" & oWSht.Cells(i, 9) & "*'") = 0 Then
     
     
            'requète SQL (avec en paramètre la ligne i et le numéro de la colonne)
            cSQL = "insert into [tablecible] ( [A], [B] ) values (" & Chr(34) & oWSht.Cells(i, 1) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 9) & Chr(34) & ")"
     
            'On exécute la requète ici
            DoCmd.RunSQL cSQL
     
     
    End If
     
    'i est incrémenté pour passer a la ligne suivante
    i = i + 1
     
     
    Wend
     
    oApp.Quit
     
     
    End Sub

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Points : 12
    Points
    12
    Par défaut
    Re,

    Peut-etre est il possible de mettre en "tampon" les valeurs contenues aux lignes suivantes (en les extrayant d'excel) :
    exemple...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Set tempoB = oWSht.Cells(i, 9)
    Set tempoA = oWSht.Cells(i, 1)
     
    Set tempoB2 = oWSht.Cells(i + 1, 9)
    Set tempoA2 = oWSht.Cells(i + 1, 1)
     
    Set tempoB3 = oWSht.Cells(i + 2, 9)
    Set tempoA3 = oWSht.Cells(i + 2, 1)
     
    Set tempoB4 = oWSht.Cells(i + 3, 9)
    Set tempoA4 = oWSht.Cells(i + 3, 1)
    et d'inclure dans le code de mon post précédent une condition if avant de copier les données dans la table access.

    j'essaye de faire ca mais sans resultat depuis tout à l'heure

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Points : 12
    Points
    12
    Par défaut
    Re bonjour (Up)

    je viens de tenter qq chose dans mon code avec des if et select imbriqués mais je viens de réaliser que ca ne marche que dans le cas ou toutes mes cellules sont copiées a chaque fois que j'execute

    alors que selon le code plus haut, j'importe seulement les nouvelles cellules depuis Excel

    bref je reviens au point de départ: si quelqu'un sait matérialiser cette boucle "For" comme expliqué plus haut , ca me permettra de presenter un truc qui marche à mon patron

    merci d'avance
    help help

  11. #11
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 354
    Points
    34 354
    Par défaut
    idée de code à adapter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim i as integer
    Dim j as Integer
    'on suppose au départ que les cellules sont déjà triées par ordre alphabétique
    For i = 1 to Range("A65536").End(Xlup).Row
    For j = Range("A65536").End(Xlup).Row To i+1 Step -1
    If Range("A" & j).Value = Range("A" & j).Value Then Range("A" & j).EntireRow.Delete
     
    next j
    Next i

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Points : 12
    Points
    12
    Par défaut
    ce code est un code Excel non ?
    a ce stade, je suis dans access .

    peut-etre n'ais je pas bien compris l'idée ...


    en tt cas merci bcp pour ta patience jpcheck

  13. #13
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 354
    Points
    34 354
    Par défaut
    oui,
    tu voulais du code Excel avec ton algo non ?

    qu'appelles-tu l'ordre des mots si ce n'est celui alphabétique ?

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Points : 12
    Points
    12
    Par défaut
    Ben en fait ma macro (voir ci dessous ) est une macro ACCESS
    donc j'ai une table ACCESS sous le format décrit plus haut (avec mes deux colonnes A et B)

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Points : 12
    Points
    12
    Par défaut
    En fait la pour l'exemple j'utilise a b c et d mais en fait a la place de ca j'ai des types de réparation:
    a=tresimportant
    b=important
    c=moyen
    d=faible

    Si (comme dans l'exemple) j'ai 4 enregistrement pour la valeur 001 dans la colonne A , alors je peux simplifier ma table ACCESS en lui disant de ne prendre que le type de réparation "tresimportant"

    et supprimer les 3 autres enregistrements.

    Suis je plus clair ?


    Citation Envoyé par Pietrus79 Voir le message
    Le tri peut s'effectuer sur 4 enregistrements maximum parfois et non seulement 2.

    la table access est du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    colA    colB
    001     a
    001     b
    001     c
    001     d
    002     b
    003     c
    003     a
    006     b
    008     c
    008     a
    ...
    Il y a exactement 4 type d'information differente dans colB: a, b, c ou d.

    Je veux qu'il modifie la table pour qu'elle devienne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    colA    colB
    001     a
    002     b
    003     a
    006     b
    008     a
    ...
    en utilisant une loi du type a>b>c>d
    ce qui veut dire que si pour 001 on a 4 enregistrements avec a b c et d on ne conserve que celui avec a et que l'on supprime les trois autres.

    Voila j'espere que je suis un peu plus clair là.

    merci d'avance

  16. #16
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 354
    Points
    34 354
    Par défaut
    et celle solution-ci ne te convenait-elle pas ?
    idée à creuser :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT colA, Min(colB) FROM MaTable;
    supprimer tout le reste
    - jointure LEFT JOIN + Champ à Null

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Points : 12
    Points
    12
    Par défaut
    peux tu détailler un peu plus s'il te plait

    ou placer cette fonction ?
    comment l'utiliser ?


    merci
    désolé je suis toujours bien débutant...

    cette solution est a appliquer en dehors de ma macro en fait
    je vais essayer
    enfin je veux bien quelques details qd meme

  18. #18
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 354
    Points
    34 354
    Par défaut
    regarde déjà si ma requête (onglet requête>nouveau) correspond à ce que tu vuex avoir en fin de compte dans ta table

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Points : 12
    Points
    12
    Par défaut
    Bon au risque de paraitre vraiment idiot je n'arrive pas trop a faire ta requete

    en fait bizarrement je comprend mieux le code sous vba ahaha
    bref
    je vais dans l'onglet requete/ nouveau
    et je cree une requete sur ma tablecible

    premier colonne : colA
    deuxième colonne : Min (colB)

    comment faire le reste ? jointure ,left ,join.+ champ a null...?

    vraiment désolé
    je ne pense pas que c'ets avec moi que tu vas apprendre des trucs.

  20. #20
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 354
    Points
    34 354
    Par défaut
    à ce moment là l'objectif sera que cela soit moi qui t'apprenne des astuces pour progresser

    déjà dis moi si ta requête en question, sans tenir compte des jointures et tout... est déjà correcte, et le code SQL que tu arrives à obtenir

Discussions similaires

  1. Supprimer une ligne d'enregistrement de table Access en VBA
    Par ivoratparis dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 07/08/2013, 12h02
  2. [AC-2007] Parcourir un RecordSet et supprimer certains Enregistrements
    Par symbabeauchat dans le forum IHM
    Réponses: 4
    Dernier message: 12/11/2011, 17h09
  3. Supprimer certains enregistrements
    Par Dennis Nedry dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/06/2008, 16h51
  4. Requête supprimant certains enregistrements
    Par marcGR dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 04/03/2008, 18h01
  5. [VBA Access] supprimer les enregistrements/remplir table/dll
    Par genirette dans le forum VBA Access
    Réponses: 1
    Dernier message: 25/01/2008, 09h23

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