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

Macros et VBA Excel Discussion :

trier et renommer une table access depuis vba excel [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut trier et renommer une table access depuis vba excel
    Bonjour forumeurs et forumeuses,

    Je chercher à trier une table access depuis vba excel. J'utilise excel 2000 et access 2000.

    Voici mon bout de 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
    Sub tri_table_access()
     
        Dim cnnADO As New ADODB.Connection
        Dim catADO As New ADOX.Catalog
        Dim cmdADO As New ADODB.Command
        Dim rsADO As New ADODB.Recordset
     
        Dim chemin_db As String
        chemin_db = "C:\MaBDD.mdb"
     
        cnnADO.Provider = "Microsoft.jet.OLEDB.4.0"
        cnnADO.ConnectionString = chemin_db
        cnnADO.Open
     
        catADO.ActiveConnection = cnnADO
        cmdADO.ActiveConnection = cnnADO
     
        cmdADO.CommandText = "SELECT matable.* FROM matable ORDER BY var1, var2 ASC;"
        rsADO.Open cmdADO
     
        cnnADO.Close
     
    End Sub
    Ca ne marchait pas et pour voir d'ou ca venait j'ai donc remplacé ma requete par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmdADO.CommandText = "SELECT matable.* into matable2 FROM matable ORDER BY var1, var2 ASC;"
    Ce qui fonctionne mais il me faut maintenant renommer matable2 en matable... (parce que ce bout de programme est a insérer dans un autre et je ne veux pas a avoir a changer toute la structure du gros gros... gros programme)

    Quelqu'un peut-il m'aider ? Soit en faisant fonctionner ma première macro, Soit en m'apprennant comment on renomme une table depuis vba sous excel.

    Avec tous mes remerciements.

    lascrabbleuse !

  2. #2
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 155
    Points : 178
    Points
    178
    Par défaut
    Je ne sais pas exactement ce dont tu as besoin. Ci-dessous, j'ai mis un code d'une fonction qui te renvoie un recordset avec les données triées comme tu en as besoin.
    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
    Function tri_table_access() as ADODB.recordset
        Dim cnnADO As New ADODB.Connection
        Dim cmdADO As New ADODB.Command
     
        Dim chemin_db As String
        chemin_db = "C:\MaBDD.mdb"
     
        cnnADO.Provider = "Microsoft.jet.OLEDB.4.0"
        cnnADO.ConnectionString = chemin_db
        cnnADO.Open
     
        cmdADO.ActiveConnection = cnnADO
        cmdADO.CommandText = "SELECT * FROM matable ORDER BY var1, var2 ASC"
        set tri_table_access = cmdADO.execute
        set cmdADO = Nothing
        cnnADO.Close    
    End Function
    J'espère que cela va t'aider.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Ok merci, en fait quand j'ouvre ma table apres l'exécution de la macro, on n'y voit pas la tri, la table est toujours la même... est-ce normal ?

  4. #4
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 155
    Points : 178
    Points
    178
    Par défaut
    Laisse ta table comme elle est et crée une vue (VIEW) dans ta DB access.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE VIEW VIEW_Matable AS 
    SELECT * FROM matable ORDER BY var1, var2 ASC
    Une vue est un objet dynamique: quelque soit les données dans la table, elles sont "bien" ordonnées dans ta vue.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    ok je ne connaissais pas cela. merci.
    Cependant, il est indispensable dans le programme que la table elle-même soit triée. Je ne comprends pas : que fais ta fonction (et ma sub) si elle ne trie pas la table ? Pourquoi la table n'est-elle pas "remplacée" par elle même mais triée ?

  6. #6
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 155
    Points : 178
    Points
    178
    Par défaut
    Ma fonction ne faisait que renvoyer les données triées. Si tu veux vraiment un changment radical dans ta table, va falloir passer à quelque chose de plus lourd (et plus "dangereux")

    1. Dans la DB, Créer une table de travail matable_TR (même définition que matable)

    2. Dans la DB, crée une query (stored procedure) de ce genre-là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    /*1. Pour être sûr qu'il n'y a pas de record obsoletes*/
    DELETE * FROM matable_TR 
    /* 2. Copier les données dans la table de travail*/
    INSERT INTO matable_TR  SELECT * FROM matable
    /* 3. Vider la table*/
    DELETE * FROM matable
    /* 4. Copier les données dans la table avec le bon ordre*/
    INSERT INTO matable  SELECT * FROM matable_TR ORDER BY var1, var2 ASC
    3. Dans ta macro, tu fais juste appel à cette query/procédure
    Que penses-tu de cette solution??

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Impec, ca devrait fonctionner ! C'est un peu ce que je cherchais a faire en voulant renommer ma table alors qu'il suffit de la supprimer et de la recreer a partir de l'intermediaire.

    merci beaucoup de ton aide et de ta patience !

    lascrabbleuse

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

Discussions similaires

  1. Transfert d'une table interne sur une table Access depuis VB
    Par mathieuch dans le forum VBA Access
    Réponses: 37
    Dernier message: 05/03/2009, 10h48
  2. Réponses: 0
    Dernier message: 14/04/2008, 22h50
  3. Réponses: 2
    Dernier message: 08/03/2007, 10h50
  4. Ouverture d'une table Access depuis Excel
    Par SlySylvain dans le forum Access
    Réponses: 3
    Dernier message: 28/07/2006, 18h36
  5. Renommer une table access et tout ce qui va avec !
    Par SlySylvain dans le forum Access
    Réponses: 8
    Dernier message: 28/07/2006, 16h24

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