les requêtes en Visual Basic

les requêtes en Visual Basic - VB/VBA/VBS - Programmation

Marsh Posté le 19-05-2006 à 11:39:20    

bonjour a tous
 
voila mon probleme :  
 
je suis en premiere année de bts IG et la je suis en train de faire mon stage.
pour se stage il me faut pouvoir ecrir des requêtes en VBA alors que je n'est jamais fait de vba jusqu'a présent :pt1cable: [:atog]
si quelqun de vous s'y connait un peu ou connaiterait un site qui explique les bases pour inclure le sql dans le vba sa m'aiderai bcp :lol:  
 
merci d'avance

Reply

Marsh Posté le 19-05-2006 à 11:39:20   

Reply

Marsh Posté le 19-05-2006 à 12:00:39    

C'est du VB6 mais aisement transposable en VBA
http://www.vb-helper.com/AdoTalk/AdoTalk.zip
et la dedans particulierement l'exemple QueryFld.vbp
il te restera a ajouter la sauvegarde des requêtes sous forme de fichiers *.ini par exemple, ajouter des criteres de tris

Reply

Marsh Posté le 19-05-2006 à 14:01:00    

merci beaucoup pour ce site je vais voir ske sa donne
merci encor

Reply

Marsh Posté le 19-05-2006 à 15:18:51    

Autrement sous Excel par exemple Menu Données/Données Externes/Créer des requêtes ( nécessite MS Query )

Reply

Marsh Posté le 19-05-2006 à 16:49:08    

je sais mais mon maitre de stage ma interdit de me servir de ms query ce *********!!!!mdr
 
sa marche comment le ado talk.zip l'ordi ne reconné ocun fichier et qd je les ouvre en document texte sa me paré vraiment complexe pour debuter lol
 
si t'a d'autres infos a donnée je suis preneur
 
merci encor
@++

Reply

Marsh Posté le 19-05-2006 à 17:10:39    

cela veut dire que tu n'as pas VB6 d'installé sur ton PC
 
Il doit vouloir que tu utilises des fonctions du style SQL.REQUEST dispo sous Excel
 
MS Query te permettrait via le macro recorder de voir la syntaxe à adopter


Message édité par kiki29 le 19-05-2006 à 17:41:27
Reply

Marsh Posté le 22-05-2006 à 08:21:26    

Merci mais en fait il veut que je travail sur une base access directement sous excel par le biais du sql sans passer par MSQUERY mais par du code VBA
 
il faut que je me serve des composants ABODB.Connection
ABODB.Recordset
ABODB.field
voila j'ai réussi a importer la BD table par table par du code sans utilser le sql mais maintenant il faut que j'importe certaines donnée donc je dois faire des requètes
 
voila.
PS : de plus MS QUERY n'est po installer donc je peu meme po l'utiliser

Reply

Marsh Posté le 22-05-2006 à 17:31:51    

Si tu trouves un VB6 en etat de marche le lien que je t'ai donné plus haut te permettra de faire tout cela sans aucun probleme

Reply

Marsh Posté le 23-05-2006 à 08:58:09    

OK je m'occupe de sa merci pour ton aide tu me sauve la vie :lol:

Reply

Marsh Posté le 24-05-2006 à 12:18:13    

Un bout de code qui marche ,si SQL Server la connexion sera à adapter


Option Explicit
 
'Outils | Reference MS Active Data Objects x.x Library
 
 
Sub ImportDonnées()
Dim Connexion As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim CheminBase As String
Dim CompteChamps As Long
Dim Requete As String
Dim i As Integer
Dim NomTable As String
     
    CheminBase = ThisWorkbook.Path & "\" & "CPASAN.mdb"
    NomTable = "cpasan"
     
    Cells(1, 1).CurrentRegion.Clear
     
    Connexion.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & CheminBase & ";"
     
    Requete = "SELECT [NOM],[PRENOM],[UNITE]" _
            & " FROM " & NomTable & "" _
            & " WHERE ([PRESENT]= -1) AND" _
            & " ([DISPONIBLE] = 0) " _
            & " ORDER BY [UNITE] ASC, [NOM] DESC;"
     
    With Rs
        .CursorLocation = adUseClient
        .Open Requete, Connexion, adOpenDynamic, adLockOptimistic
    End With
     
    CompteChamps = Rs.Fields.Count
    For i = 0 To CompteChamps - 1
        Cells(1, i + 1).Value = Rs.Fields(i).Name
    Next
     
    Cells(2, 1).CopyFromRecordset Rs
     
    Set Rs = Nothing
    Set Connexion = Nothing
End Sub


Message édité par kiki29 le 03-06-2006 à 21:52:44
Reply

Marsh Posté le 24-05-2006 à 12:18:13   

Reply

Marsh Posté le 24-05-2006 à 12:41:44    

un peu mieux


Option Explicit
 
'Cocher Outils References ActiveX Data Objects x.x Object Library.
 
Public Sub ADOImportTableAccess(FichierBaseAccess As String, NomTable As String, Cible As Range)
Dim Connexion As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim i As Integer
Dim Requete As String
                 
    Set Connexion = New ADODB.Connection
    Connexion.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & FichierBaseAccess & ";"
     
    Set Rs = New ADODB.Recordset
     
    Requete = "SELECT NOM, PRENOM, AILE, CHAMBRE, UNITE FROM " & NomTable & " WHERE (PRESENT = -1) AND (DISPONIBLE = 0) ORDER BY UNITE ASC,NOM ASC"
 
    With Rs
        .CursorLocation = adUseClient
        .Open Requete, Connexion, adOpenDynamic, adLockOptimistic
 
        For i = 0 To Rs.Fields.Count - 1
            Cible.Offset(0, i).Value = Rs.Fields(i).Name
        Next
        Cible.Offset(1, 0).CopyFromRecordset Rs
    End With
     
    Rs.Close
    Set Rs = Nothing
     
    Connexion.Close
    Set Connexion = Nothing
End Sub
 
Sub Bouton1_QuandClic()
Dim Chemin As String
Dim NomTable As String
Dim Cible As Range
 
    Application.ScreenUpdating = False
        Cells.Clear
         
        Chemin = ThisWorkbook.Path & "\Cpasan.mdb"
        NomTable = "CPASAN"
        Set Cible = Cells(1, 1)
         
        ADOImportTableAccess Chemin, NomTable, Cible
         
        Cells.Select
        With Selection
            .HorizontalAlignment = xlGeneral
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        Range("A1" ).Select
    Application.ScreenUpdating = True
End Sub


Message édité par kiki29 le 03-06-2006 à 21:53:22
Reply

Marsh Posté le 24-05-2006 à 14:30:36    

Pour les chaines de connexions voir http://www.carlprothman.net/Default.aspx?tabid=81

Reply

Marsh Posté le 24-05-2006 à 21:46:30    

Cette fois un INSERT brut de fonderie


Sub Excel2Access(FichierBaseAccess As String, NomTable As String)
Dim Connexion As ADODB.Connection
Dim ChaineConnexion As String
Dim Requete As String
Dim strNom, strPrenom, strNomJFille As String
Dim strLieuNaissance, strSexe As String
Dim strSituaFam, strDernierAdr As String
Dim strVille, strMedTraitant, strCaisse As String
Dim strComplement, strCategorie, strModSortie As String
Dim strService, strUnite As String
Dim strDiag, strAdresses As String
Dim strAile As String, iNbJours As Long, iNPP As Long
Dim iChambre As Integer, iCp As Long, iAgeAct As Integer
Dim dNumSecu As Double, iType As Integer
Dim iALD As Integer, iPresent As Integer, iDisponible As Integer
Dim strProvenance As String, DateNais As Date
Dim DateEntree As Date, DateSortiePre As Date, DateSortie As Date
     
    strNom = "Kiki"
    strPrenom = "essai"
    strNomJFille = ""
    DateNais = #7/15/1986#
    DateEntree = #9/9/9999#
    DateSortiePre = #10/9/9999#
    DateSortie = #11/9/9999#
    strLieuNaissance = "NoWhere"
    strSexe = "M"
    iAgeAct = 20
    strSituaFam = "C"
    strDernierAdr = "Somewhere"
    strVille = "Quimper"
    strMedTraitant = "Veto"
    strCaisse = "en bois"
    dNumSecu = 1234567890123#
    strComplement = ""
    strService = "OUDN"
    strUnite = "OUDN1"
    iCp = CLng(29000)
    strCategorie = ""
    iChambre = 512
    iType = 99
    iNbJours = CLng(DateDiff("d", DateEntree, DateSortie))
    iNPP = 99999
    strProvenance = "Hopital"
    strModSortie = "Taxi"
    strAile = "E"
    iALD = -1
    iPresent = -1
    iDisponible = 0
    strDiag = ""
    strAdresses = "10 rue des Morillons Paris"
     
    ChaineConnexion= "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & FichierBaseAccess & ";"
     
    Requete = "INSERT INTO " & NomTable & " (NOM,PRENOM,NOMJFILLE,DATE_NAIS,LIEU_NAIS,SEXE,AGE_ACT,SITUAFAM," & _
                                        "DERNIERADR,VILLE,CP,MEDTRAITAN,CAISSE,NUMERO,COMPLEMENT,ALD," & _
                                        "NPP,CATEGORIE,ENTREE,PROVENANCE,SORTIE_PRE,SORTIE,MOD_SORTIE,PRESENT," & _
                                        "SERVICE,AILE,CHAMBRE,TYPE,NB_JOURS,DISPONIBLE,ADRESSES,DIAG,UNITE)" & _
                                        "VALUES " & _
                                        "( '" & strNom & "','" & _
                                            strPrenom & "','" & _
                                            strNomJFille & "','" & DateNais & "','" & strLieuNaissance & "','" & _
                                            strSexe & "'," & iAgeAct & ",'" & strSituaFam & "','" & _
                                            strDernierAdr & "','" & strVille & "'," & iCp & ",'" & strMedTraitant & " ','" & _
                                            strCaisse & "'," & dNumSecu & ",'" & strComplement & "'," & iALD & "," & iNPP & ",'" & _
                                            strCategorie & "','" & DateEntree & "','" & strProvenance & "','" & DateSortiePre & "','" & DateSortie & "','" & strModSortie & "'," & iPresent & ",'" & _
                                            strService & "','" & strAile & "'," & _
                                            iChambre & "," & iType & "," & iNbJours & "," & iDisponible & ",'" & _
                                            strAdresses & "','" & strDiag & "','" & strUnite & "');"
    Set Connexion = New ADODB.Connection
    With Connexion
        .Open ChaineConnexion
        .CursorLocation = adUseClient
        .Execute (Requete)
    End With
     
    Connexion.Close
    Set Connexion = Nothing
End Sub


Message édité par kiki29 le 03-06-2006 à 21:51:58
Reply

Marsh Posté le 29-05-2006 à 09:42:51    

merci bcp
 
cependant j'ai un pitit pb au niveau du Set Connexion = New ADODB.Connection  
il ne le reconnait pas comme un type et c'est a chque fois ça qui plante
donc si tu as une idée elle est la bienvenu
 
je pense que c'est pasque mon excel est un peu vieu
 
voila merci et @+

Reply

Marsh Posté le 29-05-2006 à 13:00:20    

lire dans l'entete ; 'Outils | Reference MS Active Data Objects x.x Library
Ma version : Office 10 SP 3 (2002)


Message édité par kiki29 le 29-05-2006 à 13:01:45
Reply

Marsh Posté le 31-05-2006 à 11:16:12    

recoucou jé encors besoin d'aide (et oui encor et toujour)
voila j'ai f'ai une requete (et oui jé réussi!!!!) et je voudrai afficher le champ "PLAN1_CENTRE" dans les cellules de la ligne 5pour l'instant voila ma boucle
 
 i = 3
 
While Not rst.EOF
Cells(5, i).Value = rst.Fields("PLAN1_CENTRE" ).Value
 
rst.MoveNext
i = i + 1
Wend
 
et rien ne s'affiche donc sa fait 2h ke je pinaille la dessus et si jatten une 3eme heure fodra ke je rachete un ecran ossi!!!!!!!! mdr
@+

Reply

Marsh Posté le 31-05-2006 à 12:57:19    

Curieux parce qu'en modifiant le post du 24-05-2006 à 12:41:44
j'y arrive en rajoutant un rst.MoveFirst


 i = 3  
 rst.MoveFirst  <==
 While Not rst.EOF  
     Cells(5, i).Value = rst.Fields("PLAN1_CENTRE" ).Value  
     rst.MoveNext  
     i = i + 1  
Wend


Message édité par kiki29 le 03-06-2006 à 21:55:40
Reply

Marsh Posté le 31-05-2006 à 14:02:52    

sa ne marche tjr po!!!snif  
jé un message d'erreur qui s'affiche : "BOF ouEOF est egale a true ou l'enregistrement actuel a ete suprimer.
l'operation demandér néscessite un enregstrement actuel.
 
voila poutant ma Base de donnée est bien je sais vraiment po ski bug sa me deprimme!!!lol
@+

Reply

Marsh Posté le 02-06-2006 à 07:45:49    

Je t'ai fourni un code clair et lisible ce qui n'est plus le cas de ton code
et pour moi cela est rédhibitoire, de plus l'usage du GaBoZoMeu ne doit pas avoir cours sur les forums


Message édité par kiki29 le 03-06-2006 à 07:47:14
Reply

Marsh Posté le 02-06-2006 à 09:06:56    

Je trouve pas que le code qui m'est été fourni soit du niveau d'un debutant en vb et de plus je ne sais même pas ce qu'est le GaBoZoMeu
voila c'est tout  
tcho

Reply

Marsh Posté le 02-06-2006 à 09:27:00    

Eh bien laisse tomber la programmation
Le GaBoZoMeu c'est le langage des shadocks du sms

Reply

Marsh Posté le 08-06-2006 à 09:34:35    

C'est pas ce que je voulais dire en fait je te demander quelque chose qui tenais sur 5 lignes et tu m'a donné un script de 40 lignes!lol
 
C'est bon je trouver le probleme c'été a l'interieur de ma requête
 
voila merci et je vais eviter le gabozomeu
 
@+

Reply

Marsh Posté le 15-06-2006 à 14:46:29    

rebonjours c'est encors moi
pardonner moi d'abuser de votre gentillesse mais j'ai ecors un petit probleme ...
 
j'ai une requete qui marche sous sql view mais pas sur mon macro excel et donc je suis a bout de nerf! lol
pourriez vous me dire ce qui cloche?
 
voila ma requete :  
 
SELECT ECRITURE_COMPTE, SUM(ECRITURE_ANALYTIQUE_DEBIT)
- SUM(ECRITURE_ANALYTIQUE_CREDIT)) AS SOLDE_CREDITEUR,  
SUM(ECRITURE_ANALYTIQUE_CREDIT)- SUM(ECRITURE_ANALYTIQUE_DEBIT) AS SOLDE_DEBITEUR  
FROM TABLEAUEXCEL  
WHERE PIECE_DATE = '2005'  
AND DATEPART(mm, PIECE_DATE) = '01'  
AND ECRITURE_COMPTE BETWEEN '60000000' AND '79999999'  
AND FLUX_CODE = 'A010'  
AND CONVERT (VARCHAR, PLAN1_CENTRE) = '001'  
GROUP BY ECRITURE_COMPTE  
ORDER BY ECRITURE_COMPTE
 
merci de votre gentillesse
@+

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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