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 :

[VBA] Intégration Access et Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Par défaut [VBA] Intégration Access et Excel
    Salut les petits loups !
    Je vous expose un ptt pbme sur lequel je me casse la tête depuis 3 jours sans rien trouver comme solution (et sur ce coup là Google n'est pas mon pote).
    Voila le topo :
    - J'ai un fichier Excel avec deux onglets ainsi qu'une procédure Workbook_BeforeSave qui me permet de déplacer automatiquement les lignes à historiser du premier onglet vers le second onglet. Le code fonctionne correctement quand je ferme le classeur à la main. Voici un exemple simplifié de mon code (dans l'exemple je me contente de déplacer la dernière valeur du premier onglet dans le second).
    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
        Dim xlWsIn As Worksheet
        Dim xlWsOut As Worksheet
        Dim iLineToCopy As Integer
        Dim iLineToPaste As Integer
     
        Set xlWsIn = ActiveWorkbook.Worksheets(1)
        Set xlWsOut = ActiveWorkbook.Worksheets(2)
        iLineToCopy = 1
        iLineToPaste = 1
        Do Until xlWsIn.Range("A" & iLineToCopy + 1) = ""
            iLineToCopy = iLineToCopy + 1
        Loop
        Do Until xlWsOut.Range("A" & iLineToPaste) = ""
            iLineToPaste = iLineToPaste + 1
        Loop
        xlWsIn.Range("A" & iLineToCopy).Cut
        xlWsOut.Paste xlWsOut.Range("A" & iLineToPaste)
     
        Set xlWsIn = Nothing
        Set xlWsOut = Nothing
    - J'ai une base Access dans laquelle une macro ouvre le fichier Excel pour y mettre les lignes à jour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Dim xlApp As Excel.Application
        Dim xlWb As Excel.Workbook
        Dim xlWs As Excel.Worksheet
     
        'Démarrage d'Excel
        Set xlApp = CreateObject("Excel.Application")
        xlApp.Visible = True
        Set xlWb = xlApp.Workbooks.Open("C:\test.xls")
        xlWb.Worksheets(1).Range("A1").Value = Time()
        xlWb.Close True
        Set xlWb = Nothing
        Set xlApp = Nothing
    Voici mon pbme. Quand la macro Access ferme le fichier Excel, cela déclenche bien la procédure BeforeSave (testé en ajoutant des MsgBox dans le code) MAIS les instructions suivantes ne fonctionnent pas ! :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        xlWsIn.Range("A" & iLineToCopy).Cut
        xlWsOut.Paste xlWsOut.Range("A" & iLineToPaste)
    Bref gros coup de pouce demandé car je ne m'y retrouve plus ! Etes vous au courant d'une limitation ?
    Merci par avance.

  2. #2
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 50
    Par défaut Presse-Papier
    J'ai fait quelques tests, et la cause de ton anomalie est le Presse-papiers... Je te conseille de faire des recherches dans ce sens...

    Pour visualiser l'anomalie:
    - Ouvrir le Gestionnaire de l'Album avec la commande clipbrd dans le menu Exécuter de Windows
    - Sélectionner le Presse-papiers dans le menu Fenêtre
    - Ajouter une MsgBox avant la commande Cut pour pouvoir activer le mode Debug avec [CTRL]+[Pause]
    - Faire un test à partir du classeur
    - Faire un test à partir de la base
    Les tests doivent être fait en pas à pas à partir de la MsgBox pour voir qu'une information circule depuis le classeur et non depuis la base
    Pour le moment je n'ai pas de solution, mais je continue les recherches

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Je pense que le problème est plus un problème Excel qu'un problème Access... (et donc, déplacement vers Excel...)

    Il faudrait placer un point d'arrêt juste avant les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        xlWsIn.Range("A" & iLineToCopy).Cut
        xlWsOut.Paste xlWsOut.Range("A" & iLineToPaste)
    puis fermer Excel pour vérifier que xlWsIn, wlWsOut, iLineToCopy et iLineToPaste ont des valeurs cohérentes.

    Autre question: Y-a-t'il une gestion d'erreurs active dans la procédure (Comme le code montré ici n'est pas celui qui est utilisé, il y a une multitude d'autre possibilités, car il est très possible qu'en allégeant le code, tu aies supprimé la cause de l'erreur...)
    un exemple simplifié de mon code (dans l'exemple je me contente de déplacer la dernière valeur du premier onglet dans le second).
    Le mieux, quand un code plante, c'est de le montrer tel qu'il est utilisé...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Par défaut
    Pour compléter mon premier post :
    L'exemple simplifié dont je me sers présente exactement le même "bug". Je l'ai simplifié afin de cibler au mieux le pbme et éviter comme Pierre le souligne la multitude d'autre possibilités.

    Les tests suivants ont également été menés avec l'exemple simplifié :
    - test de la procédure BeforeSave dans le classeur Excel seul : aucun pbme, la fonction déplace bien la dernière ligne du premier onglet vers le second

    - test depuis la base Access en pas à pas dans la fonction BeforeSave : tout se passe bien , les variables xlWsIn, wlWsOut, iLineToCopy et iLineToPaste sont correctes MAIS les instruction Cut et Paste ne donnent rien

    Je pense que le problème est plus un problème Excel qu'un problème Access.
    Cela peut aider mais les tests réalisés montrent clairement que cela fonctionne dans Excel seul mais que cela ne marche plus à partir du moment où le fichier est ouvert par Access

    Je continue à chercher sur la piste du Clipboard

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Et en testant les valeurs de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlWsIn.Range("A" & iLineToCopy)
    et de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlWsOut.Range("A" & iLineToPaste)
    Cela veut dire quoi "...ne donnent rien"... Plantage, rien n'est coupé/collé? Plantage? ...

    Une piste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlWsIn.Range("A" & iLineToCopy).cut destination:= xlWsOut.Range("A" & iLineToPaste)
    et éventuellement, Avant le couper/coller, mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CutCopyMode = False
    ??
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Par défaut
    Cela veut dire quoi "...ne donnent rien"... Plantage, rien n'est coupé/collé? Plantage? ...
    Le code ne plante pas mais lorsque les lignes sont exécutées, il ne se passe rien dans le classeur (ni cut ni paste). Une fois la procédure BeforeSave terminée, le classeur se ferme bien.

    Une piste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlWsIn.Range("A" & iLineToCopy).cut destination:= xlWsOut.Range("A" & iLineToPaste)
    et éventuellement, Avant le couper/coller, mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CutCopyMode = False
    Rien à faire, le même pbme se produit !
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [VBA-E][Access] Exécuter un module Access dans Excel
    Par Amara dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/03/2006, 09h42
  2. [VBA] Comment utiliser Access avec Excel
    Par MxPx_23 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/02/2006, 12h00
  3. [VBA Excel] Importer des tables Access dans Excel
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/12/2005, 11h44
  4. Pb de lien entre Access et Excel pour des fonctions VBA
    Par favien dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/11/2005, 01h00
  5. Ouverture d'un fichier Excel en VBA par Access
    Par illight dans le forum Access
    Réponses: 2
    Dernier message: 02/11/2005, 11h14

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