Utilisation de fonctions en VBA sur access

Fermé
renan.michel Messages postés 4 Date d'inscription jeudi 7 février 2013 Statut Membre Dernière intervention 8 septembre 2014 - Modifié par blux le 7/02/2013 à 21:14
 tessel75 - 7 févr. 2013 à 22:55
Bonjour,
J'ai besoin pour le travail d'utiliser des macro sur access, je suis naturellement amené à utiliser VBA pour ça e crée des fonctions dessus et je veux ensuite m'en servir en passant par la commande ExecuterCode. Le soucis est que je n'arrive pas à utiliser les fonctions dans ce cas. J'ai une table à mettre en argument de ma fonction et ça ne fonctionne pas. Voici mon code, il est plutôt simple et inspiré d'internet mais c'est pour comprendre comment ça fonctionne:

Function macro_test(h As Object)

Dim nom1 As String, prenom1 As String, age1 As Integer

nom1 = h.range("B1")
prenom1 = h.range("C1")
age1 = h.range("D1")

'Exemple 1 : on affiche le nom :
boite_de_dialogue nom1

'Exemple 2 : on affiche le nom et le prénom :
boite_de_dialogue nom1, prenom1

'Exemple 3 : on affiche le nom et l'âge :
boite_de_dialogue nom1, , age1

'Exemple 4 : on affiche le nom, le prénom et l'âge :
boite_de_dialogue nom1, prenom1, age1

End Function

Sub boite_de_dialogue(nom As String, Optional prenom, Optional age)

If IsMissing(age) Then 'Si la variable age est absente ...

If IsMissing(prenom) Then 'Si la variable prenom est absente, on n'affiche que le nom
MsgBox nom
Else 'Sinon, on affiche le nom et le prénom
MsgBox nom & " " & prenom
End If

Else 'Si la variable age est présente ...

If IsMissing(prenom) Then 'Si la variable prenom est absente, on affiche le nom et l'âge
MsgBox nom & ", " & age & " ans"
Else 'Sinon on affiche le nom, le prénom et l'âge
MsgBox nom & " " & prenom & ", " & age & " ans"
End If

End If

End Sub


Et ensuite j'utilise, comme dit précédemment, la fonction macro: ExecuterCode avec l'argument suivant:

macro_test («test1»)

sachant que test1 correspond à la table suivante:

N° B C D
3 michel renan 21


J'obtiens le message d'erreur suivant:

Impossible pour Microsoft Office Access de trouver le nom "test1" entré dans l'expression

Si quelqu'un pouvait m'aider là-dessus je lui serai très reconnaissant.


4 réponses

blux Messages postés 26507 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
7 févr. 2013 à 19:23
Salut,

j'ai pas tout compris, mais je crains que tu ne confondes access avec excel...
Ton vba ne me semble pas familier du tout.

Ce qui serait bien, c'est que tu exposes précisément ce que tu veux obtenir, avec ce dont tu disposes pour ce faire...
0
Salut blux,

Tout d'abord merci de t'y intéresser, je vais essayer d'être plus clair:

Je veux bien me servir d'access mais il est possible que j'ai récupéré un code vba qui ne fonctionne qu'avec excel, je pensais que le code serait le même pour les deux logiciels, n'est ce pas le cas?
En fait j'ai besoin d'access pour simplifier une macro sur des tableaux 50000*300, d'après ce que j'en sais access peut me faire gagner du temps de calcul qui pour le moment se compte en heures. J'essaye donc de me familiariser avec l'utilisation de macro sur access.
Pour ça je veux faire tourner le programme suivant qui prend en compte un tableau, possède une fonction (macro_test) permettant d'étudier dans différents cas boite_de_dialogue.

La boite_de_dialogue permet de renvoyer une MsgBox donnant le nom le prénom et:ou l'age en fonction de ce qui se trouve dans le tableau.
Et la fonction la teste dans des cas comme: il n'y a que le nom, on y ajoute l'age dans un autre...
Mon but est de pouvoir appliquer cette macro directement sur un tableau possédant le 3 colonnes correspondantes.
0
blux Messages postés 26507 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
7 févr. 2013 à 19:57
C'est quoi pour toi un 'tableau' ?

Le code est identique si on gère les mêmes chose. Or excel manipule des feuilles de calcul alors qu'access manipule des tables...
0
Désolé, je parle de table, il est possible dans ce cas que des fonctions comme range ne fonctionne pas dans ce cas, est ce le cas?
0
blux Messages postés 26507 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
7 févr. 2013 à 20:48
C'est exactement cela...
C'est pour ça que je demande ce que tu veux faire et ce dont tu disposes pour y arriver (type de données, format de stockage...).
0
Je dispose d'une Table, mais je l'utilise comme un tableau par ce que je ne connais pas la différence entre les deux. Je le stocke donc comme une table dans access, par contre j'aurai du mal à t'en dire plus là-dessus. Mais j'aimerai récupérer la valeur à l'intérieur de ces cases par la suite. En réalité par cet exemple assez simple je voulais essayer de comprendre comment cela fonctionnait, mais mon vrai objectif est d'importer un tableau sous forme de fichier texte sur access, ce qui ne m'a pas posé de soucis, puis de travailler sur ce tableau en gardant uniquement les colonnes qui m'intéressent et en effectuant une des boucles par exemple sur ces colonnes par la suite. Mon gros problème est donc peut-on considérer une table comme un tableau?
0
blux Messages postés 26507 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
7 févr. 2013 à 21:14
Tu as donc une table, qui comprend des lignes et des colonnes.
On peut considérer cela comme un 'tableau' (ensemble de données de même type).
Une fois que la table est correctement 'peuplée', on peut lui faire 'subir' à peu près tout ce qu'on veut.
Cependant, si ton but est de gagner en temps sur un traitement chronophage fait en excel, il faudra veiller à bien exposer ton problème, afin que l'on puisse voir où sont les axes d'amélioration....
0
C'est là que se pose une autre de mes interrogations, si j'utilise un code vba comme excel je ne vois pas en quoi l'utilisation d'access va me faire gagner du temps, je ne connais pas les particularités d'access, connaitrais tu par hasard une différence qui en serait la cause et que je pourrais exploiter. Par ce que pour lemoment je suis parti pour faire la m^me chose je pense, pas très utile!
0
Bonsoir R.M. , Bonsoir à Blux que je salue au passage,
Désolé Renan.Michel d'être un peu raide, mais tu nous fais une salade de tous les diables. Si le code que tu as pêché on ne sait où fonctionnait dans Access, ça relèverait du miracle mais certainement pas de l'informatique. Comme te l'as dit Blux, ça ressemble à du code Excel, certaines expressions paraissent en sortir tout droit (Range("A1")) qui ne sont pas du tout de l'Access; Access "parle" en terme de tables ou de requêtes et de champs, ou bien en terme de formulaires et de contrôles, éventuellement en terme d'états, mais certainement pas en terme de "plages".
Le code en question peut être intéressant mais de toutes façons il ne peut pas être utilisé tel quel, par un simple Copier/Coller, il faudrait l'adapter très sérieusement.
Maintenant, ton "projet": l'idée n'est pas forcément mauvaise en elle-même, mais à condition de savoir exactement ce que tu comptes en faire à long terme parce que le procédé risque d'être passablement lourd. Il nécessiterait de mettre "à la norme" Access ta feuille Excel, de l'importer dans Access, de "mouliner" la table dans Access via une requête et enfin de faire recracher le résultat sur Excel éventuellement ou sous une autre forme. Cela chaque fois que tu en auras besoin. Rien de vraiment simple.
Si tu y tiens réellement, je suis convaincu que beaucoup de personnes ici sont prêtes à t'aider, encore faut-il savoir si le jeu en vaut la chandelle et si la moulinette Excel n'est pas et suffisante et plus rapide que ces opérations successives. Toi seul peux le dire.
Bonne suite
0
Bonsoir tessel75,
Ne t'inquiète pas, n'ayant vraiment aucune prétention en informatique je prends très bien ton commentaire qui s'avère très constructif, j'ai en effet essayé d'adapter le peu que je savais d'excell à access ce qui ne sert à rien convenons-en, je me suis lancé un peu tête baissée là-dedans et je te remercie de m'avoir aidé à voir que mon problème était plutôt sur ma manière d'aborder access. Je vais voir si je continue avec lui, le soucis c'est qu'actuellement j'ai déjà un code sur excell qui fonctionne bien mais est trop lent. C'est donc juste par soucis d'optimisation que je me renseignais sur access. Bonne soirée à toi
Merci aussi à Blux pour ta patience
0
Sans façon, R.M.. Nous sommes tous là pour échanger et apprendre. Mais mieux vaut le dire quand un correspondant fait fausse route. Dans la circonstance, peut-être serais-tu gagnant à chercher de l'aide pour accélérer ton code existant sur le Forum Excel, en tout cas ce serait certainement moins laborieux.
Access est un monde passionnant, mais chacun, Excel et Access, ont leur utilité et leur facilité d'usage propres, mais aucun des 2 ne peut s'apprendre ni se maîtriser dans l'urgence et le besoin immédiat. Je ne peux que t'encourager à apprendre Access, mais pas à pas.
Cordialement.
0