Alimenter une combobox avec un fichier dbf fermé

rcan7412

XLDnaute Occasionnel
Comment en VBA alimenter une combobox avec une fichier type 'DBF' géré depuis un progiciel externe ?

Dans le fichier joint, je souhaiterais lister la colonne 'RAIS' dans une combobox et renvoyer le 'PATH'.

Merci pour votre aide [file name=societes.zip size=1502]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/societes.zip[/file]
 

Pièces jointes

  • societes.zip
    1.5 KB · Affichages: 59

MichelXld

XLDnaute Barbatruc
bonjour

j'espere que cet exemple pourra t'aider


'necessite d'activer la reference Microsoft ActiveX Data Objects x.x Library
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim Chemin As String, Cible As String, laBase As String

Chemin = 'C:\\\\\\\\Documents and Settings\\\\\\\\michel\\\\\\\\dossier'
laBase = 'societes.dbf'

Set Cn = New ADODB.Connection
Cn.Open _
'Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=' & _
Chemin & ';'

Cible = 'SELECT RAIS FROM ' & laBase & ';'

Set Rs = New Recordset
Rs.Open Cible, Cn, adOpenKeyset, adLockOptimistic

Do While Not Rs.EOF
ComboBox1.AddItem Rs.Fields(0).Value
Rs.MoveNext
Loop

Rs.Close
Cn.Close



par contre je n'ai pas compris ta question concernant le Path


bon apres midi
MichelXld
 

rcan7412

XLDnaute Occasionnel
Je remercie michel pour les renseignements. Mais je n'arrive pas à mettre les enregistrements dans la combobox. Elle est désespérement vide.

Sans vouloir abuser, tu ne voudrais pas joindre un exemple. Je cherche depuis plus de 3 heures, mais je ne suis pas très doué en vba
 

michel_m

XLDnaute Accro
Salut rcan
Bonjour mon vieux copain MichelXLD

Pour répondre à l'arret sur
ComboBox1.AddItem Rs.Fields(0).Value

Il suffit d'indiquer l'objet auquel appartient le combobox
si c'est une feuille
Worksheets('tafeuil').ComboBox1.AddItem Rs.Fields(0).Value
Si c'est un userform
Tonuserform.ComboBox1.AddItem Rs.Fields(0).Value

Bonne soirée.

Michel_M
 

MichelXld

XLDnaute Barbatruc
bonsoir Rcan7412 , bonsoir cher ami Michel

tu peux tester cette adaptation : j'ai présenté les 2 exemples ( Combobox dans la feuille et dans un UserForm)

La base doit etre placée dans le meme répertoire que le classeur


bonne soirée
MichelXld [file name=importDonnees_DBase.zip size=17270]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/importDonnees_DBase.zip[/file]
 

Pièces jointes

  • importDonnees_DBase.zip
    16.9 KB · Affichages: 278
  • importDonnees_DBase.zip
    16.9 KB · Affichages: 297
  • importDonnees_DBase.zip
    16.9 KB · Affichages: 297

rcan7412

XLDnaute Occasionnel
Merci aux 'Michels'. C'est TOTALEMENT ECOEURANT !! : 'comment peut-on trouver la solution si rapidement :evil:
Il faut croire que je suis trop ridicule :(

Là je sens que je vais abuser...mais bon j'essaye quand même :

Après avoir sélectionné l'enregistrement du fichier societe.dbf, je souhaiterais qu'il importe dans un feuille du classeur le fichier comptes.dbf qui se trouve dans le répertoire indiqué dans la colonne 'PATH' du fichier societes.
En résumé, je voudrais avoir la possibilité d'importer suivant la société choisie dans le fichier societe.dbf(objet du post pour la combobox), du fichier 'comptes.dbf' stocké dans le répertoire situé à l'endroit indiqué dans la colonne 'PATH' du fichier 'societe.dbf'

Exemple :
societes.dbf
NUM RAIS PATH
1 SOCIETE1 REPERTOIRE1
2 SOCIETE2 REPERTOIRE2
3 SOCIETE3 REPERTOIRE3

C:\\COMPTA\\REPERTOIRE1\\comptes.dbf
C:\\COMPTA\\REPERTOIRE2\\comptes.dbf
C:\\COMPTA\\REPERTOIRE3\\comptes.dbf

Je choisi d'importer le fichier comptes.dbf par exemple de la société 2 qui se trouve dans le répertoire 'REPERTOIRE2'. A noter qu'il s'agit toujours du même nom de fichier (comptes.dbf). Idéalement il faudrait n'importer que certaines colonnes (requête - voir fichier en annexe).

Tout ça me semble plus facile en access mais mon projet consiste à établir un tableau de bord (plus facile en xl) avec liaison dynamique avec les données du progiciel de comptabilité. Pour le travail du tableau de bord dans la feuille xl, je suis bien avancé. Mon problème réside plutôt de récupérer automatiquement les données.

J'espère que je n'ai pas été trop long et je ne veux pas abuser mais bon je m'entête...

Merci à tous et très bon week-end

Rodolphe [file name=comptes_20060114200021.zip size=22572]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/comptes_20060114200021.zip[/file]
 

Pièces jointes

  • comptes_20060114200021.zip
    22 KB · Affichages: 46

MichelXld

XLDnaute Barbatruc
rebonsoir Rcan7412 , rebonsoir Michel

oui tu abuses un peu puisque tu n'as meme pas pris le temps de répondre à la question que nous te posions avec Michel : La combobox est dans la feuille ? ou dans un userform ?


Sinon tu peux tester cette nouvelle version , suite à ton dernier message :

Attention l'exemple ne gere pas les erreurs si les repertoires et les fichiers .dbf n'existent pas dans l'arborescence que tu as indiqué

'C:\\\\\\\\COMPTA\\\\\\\\' & PATH & comptes.dbf

lors de l'import du champ 'RAIS' dans la ComboBox , le champ 'PATH' est aussi récupéré et stocké dans une 2eme colonne masquée


bonne soirée
MichelXld [file name=importDonnees_DBase_V02.zip size=16734]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/importDonnees_DBase_V02.zip[/file]
 

Pièces jointes

  • importDonnees_DBase_V02.zip
    16.3 KB · Affichages: 49

rcan7412

XLDnaute Occasionnel
Bonjour MichelXld,

Je suis vraiment désolé de ne pas vous avoir répondu comme il se doit. En fait, je souhaitais voir la méthode utilisée avec le code adéquat peut importe si la combo était dans un userform ou directement sur la feuille xl. Mon manque de connaissances en VBA m'a empêché de réaliser l'importance de cette précision. Je tiendrai compte également de tes remarques sur la confidentialité des données.

En tout cas un réel grand merci pour ton aide, c'est une ENORME épine que tu m'enlèves pour la création de mon tableau de bord.

Juste encore une précision : Quand on ouvre un fichier dbf par excel, sur la première ligne, il reprend le nom des champs. Dans le cas de cette importation, il n'y a que les données.

N'y a-t-il pas une option dans le code qui permet d'importer le nom des champs ? Ces noms sont absolument nécessaires pour le reste de l'application. Si ce n'est pas possible, je les indiquerai manuellement et les données seront importées sur la 2ème ligne.

Peut-on trouver quelque part sur le net de la documentation sur le code vba spécifique aux fichiers dbf ?

Merci et bon dimanche
Rodolphe
 

MichelXld

XLDnaute Barbatruc
bonjour Rcan7412

si tu souhaites recupérer le nom des champs tu peux tester

Private Sub ComboBox1_Change()
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim Chemin As String, Cible As String, laBase As String
Dim Fld As ADODB.Field
Dim i As Integer

If ComboBox1.ListIndex = -1 Then Exit Sub

Chemin = 'C:\\\\\\\\COMPTA\\\\\\\\' & ComboBox1.List(ComboBox1.ListIndex, 1)
laBase = 'comptes.dbf'

Set Cn = New ADODB.Connection
Cn.Open _
'Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=' & _
Chemin & ';'

Cible = 'SELECT * FROM ' & laBase & ';'

Set Rs = New Recordset
Rs.Open Cible, Cn, adOpenKeyset, adLockOptimistic

For Each Fld In Rs.Fields
i = i + 1
Cells(19, i) = Fld.Name
Next Fld

Do While Not Rs.EOF
Range('A20').CopyFromRecordset Rs
Loop

Rs.Close
Cn.Close
End Sub



Pour ta derniere question, tu peux utiliser la nombreuse documentation disponible sur le net , nottament pour piloter des bases Acces . les methodes pour effectuer les requetes restent identique . il n'y a que la methode de connection qui change d'un type de bases à une autre ( Access , Excel , DBase ...)


pour DBase c'est :

Set Cn = New ADODB.Connection
Cn.Open _
'Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=' & _
Chemin & ';'



tu trouveras quelques exemples dans ce lien

https://www.excel-downloads.com/thr...iltres-variables-fichiers-fermes-acces.92374/



bon dimanche
MichelXld
 

rcan7412

XLDnaute Occasionnel
Encore un truc, j'avance pas mal mais... Je n'ai aucun problème pour trier la balance importée. Par contre la combobox n'est pas triée et jusqu'à présent je me servais du tri excel avant alimentation de la combo.
Ne peut-on pas utiliser une instruction dans le code comme pour une requête de type sql :'ORDER BY RAIS ASC'
Je cherche mais je ne trouve que des procédures pour trier une combobox et là j'ai un peu de mal dans mon exemple. :eek:
 

rcan7412

XLDnaute Occasionnel
J'aimerais afficher dans 2 textbox du formulaire les deux champs DATEDEB ET DATEFIN, comment m'y prendre ?

Code:
Private Sub Userform_Initialize()
'Private Sub CommandButton1_Click()
'necessite d'activer la reference Microsoft ActiveX Data Objects x.x Library
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim Chemin As String, Cible As String, laBase As String

Chemin = 'C:\\evolution'
'Chemin = ThisWorkbook.Path
laBase = 'societes.dbf'

With ComboBox1
.Clear 'suppression anciennes données dans combobox
.ColumnCount = 4 'nombre de colonnes
'Il y aura 2 colonnes dans ComboBox
'dont la 2eme masquée pour stocker le repertoire(champ PATH)
.ColumnWidths = '130;0;0;0' 'largeur colonnes
End With

Set Cn = New ADODB.Connection
Cn.Open _
'Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=' & _
Chemin & ';'

'pour la recuperation des champs RAIS et PATH
Cible = 'SELECT RAIS,PATH,DATDEB,DATEFIN FROM ' & laBase & ' ORDER BY RAIS ;'


Set Rs = New Recordset
Rs.Open Cible, Cn, adOpenKeyset, adLockOptimistic

Do While Not Rs.EOF
ComboBox1.AddItem Rs.Fields(0).Value 'champ RAIS
ComboBox1.List(ComboBox1.ListCount - 1, 1) = Rs.Fields(1).Value 'champ PATH
Rs.MoveNext
Loop


Rs.Close
Cn.Close
End Sub

Private Sub ComboBox1_Change()
TextBox1 = ComboBox1.List(ComboBox1.ListIndex, 2)
Sheets('TblComplet').Range('a1') = ComboBox1
End Sub

Merci pour l'aide
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia