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 :

Problème de version


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Problème de version
    Bonjour, je suis un petit nouveau ici, j'ai découvert access pour mon stage et je doit dire que je rame pas mal mais grâce a vos post j'arrivais à me débrouiller. La j'avoue je block et je ne trouve pas de solution.

    J'ai repris une base existante qui était devenu trop lourde pour tourner (+900Mo) et qui a été faite avec access 2003. Pour ne pas perdre trop de temps lors de mon stage je me suis inspiré de cette base pour faire la mienne mais le cc/cv du code vb d'une version à l'autre ne "marche pas".

    Mon plus gros problème a l'heure actuelle est de mettre à jour les tables de ma base avec les données de fichiers excel. J'ai adapté le code pour vider mes tables avec du sql (la je maîtrise un peu plus) mais pour les remplir je comprends pas le code d'origine et lorsque je lance mon code j'ai une erreur de classe range sur le paste spécial (je vous met le code après si j'y arrive depuis l'iPad). Si vous pouviez éclairer mes lumières ça serait cool.

    Vide DI : (Ancien 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
    Sub videDI_FER()
     
    Dim mabase As Database
    Dim DI_FER As Recordset
    Set mabase = DBEngine.Workspaces(0).Databases(0)
    Set DI_FER = mabase.OpenRecordset("DI_FER")
     
    If DI_FER.RecordCount > 0 Then
        DI_FER.MoveFirst
        Do Until DI_FER.EOF
            DI_FER.Delete
            DI_FER.MoveNext
        Loop
    End If
    mabase.Close
     
    End Sub
    Vide DI : (Nouveau code)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub videDI_FER()
    Dim SQL As String
    SQL = "Delete * From DI_FER"
    DoCmd.RunSQL SQL
     
    End Sub
    Remp DI:

    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
    Sub RempDIFER()
    Dim ad As String 
    ´Adresse du fichier 
    ad = "C:\User\Base par UR\Base FER\CHIPS FER\BW_SUIVI_BUDGETAIRE_FER.xls"
     
    Dim App As Object '(object déjà modifié par mes soins)
    Dim wb As Object
    Set App = CreateObject("Excel.Application")
    App.Visible = True
    Set wb = App.Workbooks.Open(ad)
    wb.Sheets("DONNEES").Select
     
    wb.Sheets("DONNEES").Cells.Copy
           
        wb.Sheets("DATA").Select
        
        
        wb.Sheets("DATA").Cells.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'Problème ici et en dessous sur la même commande
       
        
        wb.Application.CutCopyMode = False
       
        wb.Sheets("DATA").Rows("2:28").Delete Shift:=xlUp
     
       
        wb.Sheets("DATA").Columns("O:U").Delete Shift:=xlToLeft
        wb.Sheets("MENU").Select
       
        wb.Sheets("Procédure").Select
     
        wb.Sheets("Procédure").Rows(1).Copy
        wb.Sheets("DATA").Select
      
        wb.Sheets("DATA").Rows(1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
            wb.Save
           
       wb.Close
        App.Quit
     
        DoCmd.TransferSpreadsheet acImport, 8, "DI_FER", ad, True
     
    End Sub
    Incompréhension total de ma part. Merci par avance de votre aide

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 592
    Points
    24 592
    Par défaut
    Bonjour,
    C'est du code Excel, tu es dans le mauvais forum. je transfère.
    Sinon le code Access semble préhistorique.
    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci pour la remise en forme. Pour se qui est des codes ils ne sont pas sous excel mais bien dans la base avec vb. Et oui les codes ne sembles pas jeunes. A savoir la première bases date de plus ou moins 10 ans donc mon but pour mon stage est d'en faire une nouvelle qui réunira tout les pôles du site avec des choses en moins mais sur un même socle. Du coup pour pas tout changer j'ai voulu reprendre les codes et les réadapter. Je pensais maîtriser les "bases" d'excel mais j'avoue être complètement perdu pour faire la liaison entre access et excel

    En relisant ton message ce n'est pas du excel. Je souhaite prendre les info de mes tableaux excel pour les mettre dans mes tables access

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 592
    Points
    24 592
    Par défaut
    Cette partie est de l'Excel tu n'auras aucune réponse dans ACCESS :

    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
    wb.Sheets("DONNEES").Cells.Copy
     
        wb.Sheets("DATA").Select
     
     
        wb.Sheets("DATA").Cells.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'Problème ici et en dessous sur la même commande
     
     
        wb.Application.CutCopyMode = False
     
        wb.Sheets("DATA").Rows("2:28").Delete Shift:=xlUp
     
     
        wb.Sheets("DATA").Columns("O:U").Delete Shift:=xlToLeft
        wb.Sheets("MENU").Select
     
        wb.Sheets("Procédure").Select
     
        wb.Sheets("Procédure").Rows(1).Copy
        wb.Sheets("DATA").Select
     
        wb.Sheets("DATA").Rows(1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
            wb.Save
     
       wb.Close
        App.Quit
    Concernant le videTruc la nouvelle formule est correcte. Mais tu as déjà dû t'en apercevoir.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 592
    Points
    24 592
    Par défaut
    Par contre je ne comprends pas ce que vient faire l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.TransferSpreadsheet acImport, 8, "DI_FER", ad, True
    à la fin.

    Soit tu choisis de faire de l'automation comme au début et tu fais un transfert par ce biais. Soit tu fais un import classique avec la commande ci-dessus. Mais pas les 2 approches.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par loufab Voir le message
    Cette partie est de l'Excel tu n'auras aucune réponse dans ACCESS :

    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
    wb.Sheets("DONNEES").Cells.Copy
     
        wb.Sheets("DATA").Select
     
     
        wb.Sheets("DATA").Cells.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'Problème ici et en dessous sur la même commande
     
     
        wb.Application.CutCopyMode = False
     
        wb.Sheets("DATA").Rows("2:28").Delete Shift:=xlUp
     
     
        wb.Sheets("DATA").Columns("O:U").Delete Shift:=xlToLeft
        wb.Sheets("MENU").Select
     
        wb.Sheets("Procédure").Select
     
        wb.Sheets("Procédure").Rows(1).Copy
        wb.Sheets("DATA").Select
     
        wb.Sheets("DATA").Rows(1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
            wb.Save
     
       wb.Close
        App.Quit
    Concernant le videTruc la nouvelle formule est correcte. Mais tu as déjà dû t'en apercevoir.
    Et pourtant se code était dans le vb de la base access. Je veux bien te croire que c'est du excel car je connais pas mais je sais où le trouver et il est pas dans Excel mais dans access ... Et ça marchais comme ça après le code je le comprends pas du tout. Moi je cherchais à faire comme le videdifer avec du code sql

  7. #7
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 592
    Points
    24 592
    Par défaut
    C'est de l'automation = pilotage d'un logiciel embarquant le VBA à partir d'un autre également VBA.

    Ton code est dans ACCESS (c'est lui qui pilote) pourtant c'est de l'EXCEL (c'est lui qui est piloté).

    Autant le VBA est standard autant les bibliothèques ont chacune leur contrat d'utilisation, celles d'Excel comme celle d'Access.

    Je ne pense pas qu'Excel sache discuter en SQL.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  8. #8
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par loufab Voir le message
    Je ne pense pas qu'Excel sache discuter en SQL.
    Disons que oui. Excel peut importer des données externes. Même que par l'interface il fournit un assistant pour le faire depuis SQLServer.

    Quant à le faire en VBA, je n'ai jamais essayé.

    Ceci dit, je pense que la méthode la plus simple par Excel et VBA est probablement de passer par DAO ou ADO et de manipuler un Recordset...
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Ok ok, je comprends mieux.

    Du coup il y a-t-il un moyen pour adapter l'ancien code pour qu'il remarche sous la version 2010 puisque après discussion avec ma tutrice se fonctionnement était bon pour se qu'ils en attendaient mais j'avoue que je ne sais pas quoi faire pour que cela retourne ...

    J'avais trouvé pour importer et lier mais le problème c'est qu'au vue du nombre de table elle préférerait quelque chose d'automatiser qui fait tout, tout seul après un simple appuis sur un bouton de MAJ.
    De plus je ne peux pas lier certain fichiers avec leur tables car j'ai une erreur d'indice ...

  10. #10
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Personnellement, je n'ai pas Access, et je n'ai jamais programmé en VBA dans Access. Ceci dit, l'extrait de code VB que tu montres a l'air d'être sorti directement de l'enregistreur de macros d'Excel. C'est excellent pour débuter, ou pour dépanner, mais c'est un code vraiment élémentaire qui mériterait d'être revu et élagué.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Élémentaire pour toi pas pour moi :/.

    Bon sinon comment puis-je faire pour copier coller le contenu de mon ficher excel dans ma table et en automatique?

    Cdt

  12. #12
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Pour ajouter le contenu d'un fichier, ou même d'une plage d'Excel dans une table Access, tu peux le faire sans copier-coller, et même sans ouvrir le fichier. Tu peux t'inspirer du tutoriel suivant:

    http://silkyroad.developpez.com/VBA/ClasseursFermes/

    N'importe comment, cela devrait être mieux que des copier-coller à répétition.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

Discussions similaires

  1. Erreur 1064 - Probléme de versions
    Par thibaut06 dans le forum Requêtes
    Réponses: 2
    Dernier message: 12/11/2005, 16h22
  2. Problème compilation Version 8.0.1 sous Debian Sarge
    Par LIndien dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 04/02/2005, 21h38
  3. [Word] Problème de version Word
    Par delphicrous dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 17/09/2004, 11h19
  4. Problèmes de versions avec Xalan, Xerces et Java
    Par honeyz dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 05/06/2003, 10h18

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