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

IHM Discussion :

Comment alimenter au mieux les données de ma Spreadsheet (OWC10) ?


Sujet :

IHM

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Points : 129
    Points
    129
    Par défaut Comment alimenter au mieux les données de ma Spreadsheet (OWC10) ?
    Bonjour,

    j'essaie acuellement d'exploiter le composant activeX Microsoft Office Spreadsheet 10.0 pour afficher le résultat d'une requête dans un formulaire avec mise en forme conditionnelle.

    J'alimente mon contrôle activeX avec un recordset que je parcoure progressivement sur le principe :
    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
        Dim rst As Recordset
        Dim I, j As Integer
     
        Set rst = CurrentDb.OpenRecordset("select * from matable;")
        I = 1
     
        With Ctl     'Ctl c'est le nom du control activeX
            While Not rst.EOF
                I = I + 1
                For j = 1 To rst.Fields.Count
                    .Cells(I, j).Value = rst.Fields(fldname(j)).Value
                    .Cells(I, j).Borders.LineStyle = xlContinuous
                Next j
                rst.MoveNext
            Wend
        End With
     
        rst.Close
        Set rst = Nothing
    Seulement je trouve que le résultat est lent à s'afficher. Y aurait-il une autre méthode plus adéquate pour remplacer cette méthode ?

    Dans la barre d'outils on trouve un bouton "Actualiser tout"... à quoi sert-il ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Essayes avec la méthode CopyFromRecordset de l'objet Range de ce composant (regardes dans l'aide Excel pour plus de précision).

    Cependant, cette méthode devrait te remplir beaucoup plus vite la grille, mais elle ne réalise pas la mise en forme (les bordures dans ton cas), pour cela il va falloir créer cette bordure par la suite sur la plage de tes cellules.

    Starec

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Points : 129
    Points
    129
    Par défaut
    Bonjour Starec,

    merci pour ta réponse. Je n'arrive cependant pas à l'appliquer. Access me retourne l'erreur 430 : "Cette classe d'objet ne gère pas Automation"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Btn_Ajout_Données_Click()
        Dim rst As Recordset
        Set rst = CurrentDb.OpenRecordset("select * from [ARTICLES];")
     
        Ctl.Cells(2, 1).CopyFromRecordset rst
     
        rst.Close
        Set rst = Nothing
    End Sub

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    CopyFromRecordset est une méthode de l'objet Range, essayes avec celui-là plutôt que Cell.

    Essayes pour voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Ctl.Range("A2").CopyFromRecordset rst
    Starec

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par Starec Voir le message
    Bonjour

    CopyFromRecordset est une méthode de l'objet Range, essayes avec celui-là plutôt que Cell.

    Essayes pour voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Ctl.Range("A2").CopyFromRecordset rst
    Starec
    Oui effectivement, j'avais déjà testé : le message d'erreur est le même.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Je viens de faire le test, effectivement cela ne fonctionne pas

    Il semblerait que comme ce composant est intégrer dans le formulaire on ne le gère pas par Automation, alors que cette méthode fonctionne à partir d'Access pour remplir une feuille Excel dans Excel.

    Il faut essayer une autre méthode donc.

    Une hypothèse, cette élément à une propriété Calculation, hors lorsque tu ajoutes des éléments, il y a un calcul à chaque fois.

    Donc avec ton ancienne méthode (la boucle), essayes cette instruction avant de la lancer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ct.Calculation = xlCalculationManual
    Sans garantie, à tester.

    Je rappel que lors de la rédaction de ces deux articles sur ce composant, j'ai détourné celui-ci de son utilisation originel pour compenser un défaut d'Access qui est la mise en forme conditionnel qui était limité, donc je n'ai pas abordé et testé toutes les propriétés.

    Starec

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par Starec Voir le message
    Bonjour

    Je viens de faire le test, effectivement cela ne fonctionne pas

    Il semblerait que comme ce composant est intégrer dans le formulaire on ne le gère pas par Automation, alors que cette méthode fonctionne à partir d'Access pour remplir une feuille Excel dans Excel.

    Il faut essayer une autre méthode donc.

    Une hypothèse, cette élément à une propriété Calculation, hors lorsque tu ajoutes des éléments, il y a un calcul à chaque fois.

    Donc avec ton ancienne méthode (la boucle), essayes cette instruction avant de la lancer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ct.Calculation = xlCalculationManual
    Sans garantie, à tester.
    Je viens de tester... celà ne change malheureusement pas significativement le résultat. Je reste donc ouvert à toute idée sur le sujet.

    Citation Envoyé par Starec Voir le message
    Je rappel que lors de la rédaction de ces deux articles sur ce composant, j'ai détourné celui-ci de son utilisation originel pour compenser un défaut d'Access qui est la mise en forme conditionnel qui était limité, donc je n'ai pas abordé et testé toutes les propriétés.

    Starec
    Of course. Merci avant tout pour ces articles.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Re

    Pourrais-tu mettre en pièce jointe une base alléger avec la table, le formulaire où est le composant et ton code.

    De plus sous qu'elle version d'Access (je peux tester sur 2002 et 2007). Vu que tu utilises la version OWC 10.0 je pense que c'est de 2002, car j'ai la version OWC 11.0 sur 2007 et OWC 10.0 pour 2002.

    J'essaierais ce soir, car je suis absent cet après-midi.

    Starec

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Points : 129
    Points
    129
    Par défaut
    Bonjour Starec,
    voici une base avec 1 table et 1 formulaire. Petit inconvénient : je suis chez un client qui travaille sous Access97. Il te faudra donc monter la base en version chez toi pour pouvoir tester. Tiens moi au courant.

    Merci de ton aide...

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Je vais regarder cela, mais je viens d'éplucher un peu ton code, et j'aimerais savoir qu'elle est l'intérêt de passer par le composant OWC ?

    Car ce ce que je vois, c'est une visualisation de données sans mise en forme conditionnelle spécifique, et un sous-formulaire devrait suffire, non ?

    Starec

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Points : 129
    Points
    129
    Par défaut
    Je ne t'ai pas mis le code de la mise en forme car ce n'est pas l'objet initial de ma question. Tu en as besoin ?
    (Une fois les données dans mon contrôle ActiveX, je n'ai pas de problème à les mettre en forme)

Discussions similaires

  1. Comment gérer au mieux les accès aux données MySQL
    Par akaii dans le forum Accès aux données
    Réponses: 10
    Dernier message: 15/07/2010, 07h49
  2. Réponses: 9
    Dernier message: 12/06/2008, 16h37
  3. Réponses: 2
    Dernier message: 09/03/2007, 17h24
  4. Réponses: 6
    Dernier message: 01/08/2006, 17h23
  5. [DataWareHouse] Comment définir au mieux les clés ?
    Par Melvine dans le forum Alimentation
    Réponses: 12
    Dernier message: 05/05/2006, 03h15

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