Tableau dynamique ,requête sous excel en vba [Résolu]

sobeit1 32 Messages postés lundi 6 novembre 2000Date d'inscription 29 avril 2005 Dernière intervention - 19 janv. 2005 à 13:20 - Dernière réponse : sobeit1 32 Messages postés lundi 6 novembre 2000Date d'inscription 29 avril 2005 Dernière intervention
- 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.
Afficher la suite 

8 réponses

cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 20 janv. 2005 à 12:57
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 21 janv. 2005 à 13:17
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 19 janv. 2005 à 18:16
0
Utile
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
sobeit1 32 Messages postés lundi 6 novembre 2000Date d'inscription 29 avril 2005 Dernière intervention - 20 janv. 2005 à 08:56
0
Utile
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.
cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 20 janv. 2005 à 12:55
0
Utile
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
sobeit1 32 Messages postés lundi 6 novembre 2000Date d'inscription 29 avril 2005 Dernière intervention - 20 janv. 2005 à 16:28
0
Utile
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
sobeit1 32 Messages postés lundi 6 novembre 2000Date d'inscription 29 avril 2005 Dernière intervention - 21 janv. 2005 à 09:56
0
Utile
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
sobeit1 32 Messages postés lundi 6 novembre 2000Date d'inscription 29 avril 2005 Dernière intervention - 21 janv. 2005 à 14:25
0
Utile
Merci beaucoup, tu m'as vraiment bien aidé.

Merci encore d'aider les débutants dans mon genre,
amicalement, Cédric

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.