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 :

MAJ de valeurs récupérées sous Access


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Par défaut MAJ de valeurs récupérées sous Access [EDIT 31-08]
    Hello

    J'ai une fonction sous Excel qui récupère une valeur dans une base Access en fonction d'une référence rentrée dans une autre cellule (en gros, depuis la cellule dans laquelle je veux récupérer la valeur, j'appelle la fonction ci-dessous (en gros hein) en mettant en variables des cellules du classeur) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Function recupDB(vSource As String, vTable As String, vValeur As String, vType As String)
     
    Dim vBDD As New ADODB.Connection
    Dim vDonnées As New ADODB.Recordset
    Dim vSQL As String
     
    vBDD.Open "provider=microsoft.jet.oledb.4.0;" & "persist security info=false;" & "data source=" & vSource
    vSQL = "select * from " & vTable & " where code='" & vValeur & "'"
    vDonnées.Open vSQL, vBDD, adOpenDynamic, adLockReadOnly
    recupDB = vDonnées(vType)
    vBDD.Close
     
    End Function
    Tout ça fonctionne bien, je récupère ma valeur, le seul problème c'est que cette façon de faire empêche toute MAJ automatique, enfin en tous cas je n'ai aucune idée de comment procéder...

    Vous sauriez ?

    Merci

    @+

    [EDIT]
    c'est là :
    http://www.developpez.net/forums/sho...8&postcount=14

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Tu pourrais utiliser les données externes qui pointeraient sur ton fichier access.
    Tu peux mettre un paramètre dans ta requête SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from tatable where code=[TonCode]
    Ensuite tu peux affecter le [code] a une cellule.
    Il te reste plus qu'a actualiser tes données

    Pas simple a expliquer. Il y a peut être un tutoriel sur ce sujet

  3. #3
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Par défaut
    :/ J'ai pas vraiment compris :/

    Ce qu'il faudrait ce serait qu'à l'ouverture du fichier ça puisse actualiser, si je pouvais en plus limiter les appels à la base (ouverture/fermeture du lien)...

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Si tu veux actualiser a l'ouverture du classeur il faut que dans le Workbook_Open() tu appels le code de MAJ

  5. #5
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Par défaut
    Oui mais comment mettre à jour des données qui sont recherchées à la saisie de la fonction dans la cellule ?

    Hmm, en fait de temps en temps lorsque je touche à quelque chose elles sont mises à jour, mais je comprends pas vraiment dans quels cas :/

    En plus ça a aussi tendance à faire une MAJ et à m'afficher des #VALUE partout, j'comprends vraiment keud...

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Par défaut
    Avec des requêtes toutes faites grâce à MSQuery, tu peux aisément le faire :
    http://www.developpez.net/forums/sho...d.php?t=381965
    Pour le faire avec des macros, tu n'as plus qu'à enregistrer ce que tu viens de faire juste au dessus et adapter...

  7. #7
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Par défaut
    A bien regarder le code automatique d'Excel, la querytable ne m'a pas l'air tellement adaptée :/

    Merci en tous cas pour les coups de main !

    [EDIT] Justification (attention décrypteur nécessaire :p ):
    J'ai besoin de pouvoir appeler une fonction depuis les cellules où je souhaite récupérer la donnée, et cela me semble difficile d'en créer une associée à une querytable qui permette d'aller chercher une seule donnée, autrement qu'en créant la table sur une feuille puis en faisant un vlookup().

  8. #8
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonsoir

    Si tu utilises ta fonction dans une cellule et que tu souhaites un recalcul automatique, ajoute cette ligne en tout début de procédure:



    bonne soirée
    michel

  9. #9
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Par défaut
    Merci pour l'astuce, j'essaierai ça dès demain matin (j'ai pas mon code sous la main c'est au boulot :p).

    Bonne soirée

  10. #10
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Par défaut
    Je viens de faire une recherche sur Application.Volatile, et j'ai lu que cela permettait de recalculer la valeur de la cellule associée à chaque fois qu'Excel calcule. Si c'est bien ça, cela risque de fortement ralentir ma feuille (qui est en fait un simulateur de devis) où il y a de nombreux appels à la base de données.
    Serait-il possible de limiter son application? Ou bien au pire comment pourrait-on modifier ma fonction de recherche pour qu'elle fasse moins d'appels à la base (tout en gardant une base externe, primordial)?

  11. #11
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    dans ce cas, utilise plutot l'evenement Change de la feuille de calcul et définit une cellule particulière qui déclenchera la procedure lorsqu'elle sera modifiée.


    michel

  12. #12
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Par défaut
    Ça me convient tout à fait comme solution ça Merci beaucoup

    Et le contraire ce serait possible ? Empêcher la MAJ qui me place des #VALUE partout?

  13. #13
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Par défaut
    Re,

    bon alors j'ai trifouillé tout ça depuis 9h, et je ne parviens pas à faire fonctionner correctement le Application.Volatile.

    Par contre, dans la même idée, j'ai regardé du côté des Calculate, et je trouve ça beaucoup mieux.
    J'ai donc mis un Application.Calculation = xlCalculationManual dans ma fonction, ce qui est censé limiter les recalculs (j'en ai pas vraiment eu la preuve après mes tests) et un bouton 'MAJ' avec un ActiveSheet.Calculate pour que toutes les cellules soient mises à jour.

    Là le problème c'est que la première fois que je clique sur le bouton cela fonctionne, mais après quand je clique dessus je vois dans la barre d'état un "calculate" qui apparaît à côté du "Ready", mais rien ne se passe, et je ne comprends pas pourquoi...

  14. #14
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Par défaut
    Pour une fois je récrée pas de topic pour ce sujet ^^

    Mon problème porte sur la MAJ de valeurs retournées par des fonctions (cf ce topic pour les fonctions http://www.developpez.net/forums/sho...68#post2410268 )

    Elles sont bien mises à jour dès que l'un des paramètre est modifié, ou lorsque l'on modifie la formule, mais il arrive, par exemple lorsque je cache des lignes, que les valeurs se mettent à "#VALUE!". Là, pour récupérer mes valeurs correctes, je suis obligé d'ajouter une ligne, et surtout de la supprimer.

    Personne n'aurait une façon moins rudimentaire d'effectuer la même opération ? :p

    Merci


    Précisions :
    - Application.Calculation => automatique
    - la fonction recherche une valeur dans une feuille du classeur
    - les #VALUE apparaissent quand une macro est effectuée, vraisembablement qui agit sur le classeur (j'ai essayé d'automatiser l'ajout/suppresion de ligne et ça m'a mit les #VALUE partout :p, mais ça fonctionne à la main !)

Discussions similaires

  1. [AC-2007] gestion Réseau et MAJ sous access
    Par julien17 dans le forum Access
    Réponses: 3
    Dernier message: 19/03/2012, 21h03
  2. [AC-2000] Insertion de valeurs sous Access et VBA
    Par Tydher dans le forum VBA Access
    Réponses: 5
    Dernier message: 16/05/2011, 14h05
  3. Réponses: 7
    Dernier message: 09/10/2007, 18h07
  4. Valeur Not Null sous Access
    Par tux2005 dans le forum DB2
    Réponses: 7
    Dernier message: 10/05/2007, 17h02
  5. vb6: Stocker des valeurs récupérés dans un TextBox sous excel
    Par gaetan.tranvouez dans le forum VB 6 et antérieur
    Réponses: 32
    Dernier message: 19/07/2006, 16h12

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