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