Tableau dynamique ,requête sous excel en vba

Résolu
sobeit1 Messages postés 32 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 29 avril 2005 - 19 janv. 2005 à 13:20
sobeit1 Messages postés 32 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 29 avril 2005 - 21 janv. 2005 à 14:25
bonjour, je suis débutant avec VB et je dois créer un tableau qui s'affiche selon
une requête et tout ça sous excel.
Le nombre de colonnes est fixe mais le nombre des lignes évolu en fonction de
la requête.
De plus, je dois créer une requête qui dépend d'un tableau excel (base de
donnée)qui se trouve sur le même classeur excel.
Je n'arrive à rien, si vous pouviez m'aider, je ne vous remercirai jamais assez.
(si je n'ai pas été suffisament clair, faite le moi savoir, merci!)
merci d'avance, Cedric.

8 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
20 janv. 2005 à 12:57
Mince, le code !

Sub Liste_Exemple()
Dim db_Exemple As Database
Dim rs_Exemple As Recordset
Dim rq_Sql As String
Dim nb_Lignes As Long
Dim Nom_Feuille As String
Dim i As Integer
Dim l As Long


' NOM DE LA FEUILLE
Nom_Feuille = InputBox("Entrez le nom de la feuille à créer.")

If Trim(Nom_Feuille) = "" Then Exit Sub

For i = 1 To Sheets.Count

If Sheets(i).Name = Nom_Feuille Then
MsgBox "Cette feuille existe déjà !", vbExclamation, "ERREUR"
Nom_Feuille = InputBox("Entrez le nom de la feuille à créer.")
i = 0
End If

Next

' OUVERTURE DE LA BASE DISTANTE
Set db_Exemple = opendatabase("MaBase.mdb", False, False, ";PWD=truc")

' REQUETE D'EXTRACTION DES DONNEES
rq_Sql = "SELECT PREDET.NOM_BENEF, PREDET.MONTANT_NUM, PREDET.LIBELLE, PREDET.REFERENCE"
rq_Sql = rq_Sql & " FROM PREDET"
rq_Sql = rq_Sql & " ORDER BY PREDET.NOM_BENEF"

Set rs_Exemple = db_Exemple.openrecordset(rq_Sql, dbopensnapshot)

' COMPTAGE DU NOMBRE D'ENREGISTREMENTS
rs_Exemple.MoveLast
nb_Lignes = rs_Exemple.RecordCount
rs_Exemple.MoveFirst

' CREATION DE LA FEUILLE RECEPTRICE
Sheets(1).Select
Sheets.Add
Sheets(1).Name = Nom_Feuille

' ECRITURE DES NOMS DE COLONNES
Cells(1, 1).Value = "BENEFICIAIRE"
Cells(1, 2).Value = "MONTANT"
Cells(1, 3).Value = "LIBELLE"
Cells(1, 4).Value = "REFERENCE"

' NOMS DE COLONNES EN GRAS
Range("A1:D1").Select
Selection.Font.Bold = True

' REMPLISSAGE DE LA FEUILLE
For l = 2 To nb_Lignes + 1
Cells(l, 1).Value = rs_Exemple.Fields("NOM_BENEF")
Cells(l, 2).Value = rs_Exemple.Fields("MONTANT_NUM")
Cells(l, 3).Value = rs_Exemple.Fields("LIBELLE")
Cells(l, 4).Value = rs_Exemple.Fields("REFERENCE")
rs_Exemple.MoveNext
Next

' FORMAT LARGEUR DE COLONNES
Columns("A:D").Select
Selection.Columns.AutoFit

' FORMAT DES NOMBRES
Columns("B:B").Select
Selection.NumberFormat = "#,##0.00"

' DEPLACEMENT DE LA FEUILLE A LA FIN DU CLASSEUR
Sheets(1).Move After:=Sheets(Sheets.Count)

' SELECTION DE LA 1ERE CELLULE POUR FAIRE PROPRE
Cells(1, 1).Select

End Sub

Cordialement, CanisLupus
3
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
21 janv. 2005 à 13:17
Salut

Regarde tes lignes :
g = F + i

If Me.TextBox1 = Range("F+i") Then.....
Tu vois le problème ?

Il faudrait plutôt coder soit :
If Me.TextBox1 = Range("F" & i) Then...
soit :
g = "F" & i
If Me.TextBox1 = Range(g) Then...

Bonne prog

Cordialement, CanisLupus
3
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
19 janv. 2005 à 18:16
Salut,

Visiblement, c'est de VBA (VB for Application) et non de VB (6 ou .NET) dont tu parles. Il y a quelques différences.

J'aimerais savoir de quoi tu pars, tu pilote Excel à partir de VB6 (ou VB.NET) ou tu fais tout à partir d'Excel ?

D'autre part, qu'appelles tu requête ? du SQL ? .... ?

Si ce n'est que du Excel, il y a des fonctions Excel prédéfinies (RechercheH et RechercheV entre autres qui peuvent te donner des réponses.

Cordialement, CanisLupus
0
sobeit1 Messages postés 32 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 29 avril 2005
20 janv. 2005 à 08:56
salut CanisLupus,
Il s'agit bien de VBA, et je fais tout à partir d'excel.

La requête se fait sous vba mais il s'agit bien de SQL ( DoCmd.RunSQL "select ...") mais je n'arrive pas à afficher les résultats.

Par contre, l'utilisation de rechercheH et rechercheV est un peu flou pour moi, en effet, rechercheH(valeur_cherchée, table_matrice,no_index_lig,valeur proche) je ne sais pas quoi mettre pour remplacer tout ce qui est souligné et idem pour rechercheV.

Si tu peux me donner un coup de main, merci.
Merci d'avance, cordialement, Cédric.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
20 janv. 2005 à 12:55
Oublie le RechercheV et RechercheH, je pense que c'est inadapté à ton prob. Par contre, j'ai retrouvé une macro que j'avais écrite pour présenter des données d'une base Access dans un tableau Excel.
Tu peux peut-être t'en inspirer ?

Cordialement, CanisLupus
0
sobeit1 Messages postés 32 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 29 avril 2005
20 janv. 2005 à 16:28
Bien, je vais essayé ça, je te tiens au courant si ça marche.
Merci mille fois, tu me sauves peut-être la vie, merci.
@+ Cédric
0
sobeit1 Messages postés 32 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 29 avril 2005
21 janv. 2005 à 09:56
Ton code marche impeccablement bien, merci.
Mais j'essai de mettre une variable dans range pour utiliser un IF et une boucle....
C'est pas évident à expliquer peut-être qu'avec le code que j'ai commencé, tu comprendras mieux. Voici le code :

Dim i As Integer
Dim g As String


Sheets("feuil1").Select
For i = 1 To Sheets.Count
g = F + i
If Me.TextBox1 = Range("F+i") Then
Rows("i:i").Select
Selection.Copy
Sheets("feuil2").Select
Rows("i:i").Select
ActiveSheet.Paste
End If
Next i

Merci d'avance. Cédric
0
sobeit1 Messages postés 32 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 29 avril 2005
21 janv. 2005 à 14:25
Merci beaucoup, tu m'as vraiment bien aidé.

Merci encore d'aider les débutants dans mon genre,
amicalement, Cédric
0
Rejoignez-nous