Accès source externe depuis un script VB

Accès source externe depuis un script VB - VB/VBA/VBS - Programmation

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
 
     
 
 
     

Reply

Marsh Posté le 01-03-2006 à 12:43:41   

Reply

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 ?

Message cité 2 fois
Message édité par tegu le 03-03-2006 à 11:20:18
Reply

Marsh Posté le 03-03-2006 à 15:29:43    

tegu a écrit :

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 ?


 
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 ?)
 
 

Reply

Marsh Posté le 03-03-2006 à 15:34:49    

tegu a écrit :

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 ?


 
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() ??

Reply

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
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 ?)


-----------------------
 :wahoo: J'ai trouvé une propriété du querytables ecrase . Je peux m'appuyerr dessus pour nourrir mes champs sur ma Usf .
Bingo
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed