Accès source externe depuis un script VB - VB/VBA/VBS - Programmation
Marsh Posté le 03-03-2006 à 11:14:45
Beaucoup de questions
Pour le 1/ tu dis que le « compilateur ne comprends pas ». C'est-à-dire ? Quelle erreur et sur quelle ligne ? Ta macro est une Sub() d'un module donc elle devrait parfaitement fonctionner en l'appelant directement depuis un UserForm.
Edit:
As-tu essayé de faire la manipulation d'importation de tes données avec l'enregsitreur de macro activé pour être sûr des syntaxes, notamment pour d'éventuels paramètres de .QueryTables ?
Marsh Posté le 03-03-2006 à 15:29:43
tegu a écrit : Beaucoup de questions |
Ok , il y avait un léger probleme sur ma requete (j'ai ecrit la chaine dans un fichier, je l'ai testé avec mon outil SQL) et j'utilisais une propriéte text au lieu de value
Pb : il y a bien écriture dans une feuille Excel activée , mais il m'insère de facto des colonnes.
Or , c'est idiot mais, dans mon code je lis ces colonnes pour les afficher dans ma UserForm pour que l'utilisateur corrige eventuellement (les data seront récrites dans ma feuille de dossiers) .
Donc au dossier suivant , je décale, etc.....
Donc le fonctionnement est différent de ma macro qui se positionne sur la cellule ou j'ai attaché une source externe et qui actualise
Donc soit on peut ecraser les colonnes existantes
Soit j'exploite un objet query (SQLrequest ?)
Marsh Posté le 03-03-2006 à 15:34:49
tegu a écrit : Beaucoup de questions |
Pour le compilateur : ij'ai mis dans un script d'ouverture de l'UserForm un appel à ma macro
worksheet("parametre" ).IdentiteUsager() ' (identiteUsager est la macro)
Le compilateur ne comprend pas !
En fait peut-on appeler une macro depuis un script , et comment ?
du style objet(activé).macro() ??
Marsh Posté le 03-03-2006 à 15:59:12
Flipper94 a écrit : Ok , il y avait un léger probleme sur ma requete (j'ai ecrit la chaine dans un fichier, je l'ai testé avec mon outil SQL) et j'utilisais une propriéte text au lieu de value |
-----------------------
J'ai trouvé une propriété du querytables ecrase . Je peux m'appuyerr dessus pour nourrir mes champs sur ma Usf .
Bingo
Marsh Posté le 01-03-2006 à 12:43:41
Pour des raisons diverses , je dois faire une appli sans trop de fioritures (jetable) et j'ai choisi de stocker mes données dans des feuilles EXCEL manipulées par des UserForms de VB.
Débutant dans l'environnement, sans bouquin, je scrutte les forums, je progresse mais j'ai des manques .
Cahier des charges :
- Un demandeur (données identitaires stockées dans une base SQL)
- un dossier stockée dans une feuille Excel
- des lignes sur ce dossier ( Ex ; 1 commande , des produits (Nb , Mtt)
- des tables de parametres (Ex code et libelle produit)
Bref une petite base de données (20 à 50 dossiers)
Mes besoins
1- Acces à la source externe depuis un script VB
j'ai une source externe dans ma feuille Excel qui rapatrie correctement
J'ai crée une macro pour permettre l'actualisation des données par un bouton dans la barre à outils.
J'ai voulu lancer la macro depuis une Userform : le compilateur ne comprend pas . C'est logique ? Ca ne se fait pas ?
Mais je prefère executer la requete depuis un script dans une UserForm apres que l'utilisateur a saisi l'identifiant des demandeurs dans un champ texte du formulaire .
1-1 J'ai teste la querytables pour ecrire directement dans la feuille
Ca ne marche pas bien ,
-------------------script---
Sheets("parametre" ).Activate
sqlstring = "SELECT DISTINCT V.NO_PACAGE, V.CODE_CIVILITE," _
& " V.NOM , V.LIBELLE_ADR, " _
& " V.CODE_INSEE_COMMUNE , COM.COM_LB" _
& " FROM ARCHE.dbo.COM C, ARCHE.dbo.VA_COORDONNEES_USAGER V" _
& " WHERE V.CODE_INSEE_COMMUNE = C.COM_RFA " _
& " AND V.NO_PACAGE= '" & NO_PACAGE.Text & "' AND V.ADR_EXPLOITATION_ON=1 " _
& " ORDER BY V.NO_PACAGE"
connstring = _
"ODBC;DSN=ARCHE;UID=consult;PWD=consult;Database=ARCHE"
With ActiveSheet.QueryTables.Add(Connection:=connstring, _
Destination:=Range("A25" ), Sql:=sqlstring)
'MsgBox (sqlstring)
' .Refresh
End With
J'ecris bien dans la feuille mais uniquement des entetes , qui ne reprennent pas les noms de colonnes et qui me cree des colonnes dans la feuille ; bref j'ai pas tout compris
1-2 Je prefère un objet SQLquery (comme en delphi ) avec des propriétes la requete de type string, une methode retrieve , un resultset qu'on pourrait manipuler .
J'ai repérer SQLrequest triggé apres un evt change sur le textbox identifiant
returnArray = SQLRequest(connstring, sqlstring, _
Worksheets("parametre" ).Range("A25" ), _
2, True)
Erreur à l'exec ; sub ou fonction non défini (pourtant elle existe dans l'aide)
Fait-il installer quelque chose ?
ou SQL.request
SQL.request(connstring,A25,4,sqlstring,true)
Cette commande devrait renvoyer quelque chose mais je ne connais pas la structure du resultset (un tableau ? une matrice ?déclaré comment ,le nb de colonnes doit correspondre au nb ramené ?)
Bref j'ai un souci d'implémentation, ll'EVT change est inadapté (il trigge à chaque caractère)
et je souhaite une solution simple
--> un bon evenement
--> un ordre SQL (ouvrir ou pas l'objet (SQLOpen)
--> un result set identifié
--> une manip du resultset dans des champs de mon formulaire
2- Utilisation de fonction Excel dans un formulaire
table parametre code libelle nommé enjeux
libelle nommé et source d'un controle liste dans mon formulaire
Je veux recuperer le code
Dans ma feuille ca marche code=INDEX(parametre!enjeux;H15+1;1)
dans mon code VB apres sélection d'item dans la liste
codeenjeu.Value = Application.WorksheetFunction.Index("parametre!enjeux", Lig - 5, 1)
Erreur 1004 impossible de lire la propriété Index .
J'ai oublié quelque chose ? activer la feuille ?
Bref bien dommage
Si on peut me brieffer
3- Enfin : code pour créer directement une source ODBC dans les sources ODBCsans passer par les outils d'administration (les utilisateurs ne sont pas autonomes)
Merci à tous d'avance