Accueil > > > UNE COMBOBOX REMPLIE PAR ACCESS EN VBSCRIPT POUR VOS FORMULAIRES
UNE COMBOBOX REMPLIE PAR ACCESS EN VBSCRIPT POUR VOS FORMULAIRES
Information sur la source
Description
Construit le contenu d'un contrôle List ou ComboBox à l'aide des données d'un fichier Access en triant les données à la volée (utilisation de l'algorithme modifié du tri par insertion) J'ai dû pas mal me creuser la tête pour compléter une liste déroulante ComboBox d'un formulaire Outlook avec les donnée d'un fichier Access en les triant! Après avoir transpiré je me dis que cette source pourrait être utile à d'autres... L'Idée: Afficher la liste des utilisateurs triée par nom de famille dans un ComboBox. Cette liste change régulièrement et est gérée par Access. L'Obligation: Utilisation d'un code VBScript pour se connecter à la BD. Le Tri: La méthode du tri par insertion est celle que vous utiliseriez si vous deviez classer des dossiers dans un classeur ou dossier suspendu, à savoir on recherche où on peut insérer le dossier entre ceux existant pour que le tout reste trié. L'algorithme peut être légèrement adapté pour permettre le tri "à la volée". Comme ce tri reste rapide pour les petites listes (moins d'un millier d'enregistrement) nous l'utiliserons dans ce script.
Source
- '**********************************************************************************
- '** Type: SubRoutine
- '** Name: BuildList
- '** Arguments: Référence Objet
- '** Return: Nothing
- '**********************************************************************************
- '** Developped by: David Thueler
- '** Creation Date: 10 Oct. 2006
- '** Last Modified: -
- '** Purpose: Populate ComboBox object from MDB file and sort the list.
- '** ADO Shared Component 3.6 MUST be registered or it will hangs!
- '**
- '** Usage: Set cboList = Item.GetInspector.ModifiedFormPages("OutlookPageName").Controls("ControlName")
- '** BuildList(cboList)
- '**********************************************************************************
- Sub BuildList(objListe)
- Dim rst 'Recordset
- Dim dao 'Reference DAO
- Dim wks 'Workspace
- Dim dbs 'Database
- Dim strAccessDir 'Chemin du fichier
- Dim strDBName 'Nom de fichier
- Dim EmployeeArray 'Enregistrement
- Dim arrEmployee() 'Tableau des Employés
- Dim indEmployee 'Indice du Tableau
- Dim RecEmployee 'Enregistrement en traitement
- Dim SortLoop 'Indice de boucle pour le tri par insertion
- Dim intSeekPos 'Position de l'insertion
-
- On Error Resume Next
-
- 'Définit le nom et emplacement de la base de donnée
- strAccessDir = "R:\"
- strDBName = strAccessDir & "phonelist.mdb"
-
- 'Set reference de la base Access. ADO36 doit être enregistré sinon le moteur doit être modifié en conséquence
- Set dao = Application.CreateObject("DAO.DBEngine.36")
- If Err > 0 Then
- 'on quitte le sub si la connexion a échouée
- Exit Sub
- End If
- Set wks = dao.Workspaces(0)
- Set dbs = wks.OpenDatabase(strDBName)
-
- 'Lien sur la table qui nous intéresse
- Set rst = dbs.OpenRecordset("Employees")
-
- 'On parcours les enregistrements de la table
- indEmployee = 0
- With rst
- .MoveFirst
- While Not .EOF
- EmployeeArray = rst.GetRows(1)
- 'On ajuste la dimension du tableau (très important dans le cas de ce script!)
- ReDim Preserve arrEmployee(indEmployee)
-
- 'On construit la chaîne de caractère avec les enregistrements intéressants.
- 'Dans notre cas, [Nom de famille] [Prénom] ([Téléphone]) à l'aide des indices
- RecEmployee = EmployeeArray(1,0) & " "
- RecEmployee = RecEmployee & EmployeeArray(0,0) & " ("
- RecEmployee = RecEmployee & Left(EmployeeArray(2,0),4) & ")"
-
- 'On insert l'enregistrement à la bonne place dans la liste
- For SortLoop = 0 To indEmployee
- If StrComp(RecEmployee, arrEmployee(SortLoop), vbTextCompare)<0 Then
- intSeekPos = SortLoop
- Exit For
- End If
- Next
- For SortLoop=indEmployee To intSeekPos+1 step -1
- arrEmployee(SortLoop)=arrEmployee(SortLoop-1)
- Next
- arrEmployee(intSeekPos)=RecEmployee
-
- indEmployee = indEmployee + 1
- Wend
- .Close
- End With
-
- 'On met à jour la ComboBox
- objListe.List() = arrEmployee
- End Sub
'**********************************************************************************
'** Type: SubRoutine
'** Name: BuildList
'** Arguments: Référence Objet
'** Return: Nothing
'**********************************************************************************
'** Developped by: David Thueler
'** Creation Date: 10 Oct. 2006
'** Last Modified: -
'** Purpose: Populate ComboBox object from MDB file and sort the list.
'** ADO Shared Component 3.6 MUST be registered or it will hangs!
'**
'** Usage: Set cboList = Item.GetInspector.ModifiedFormPages("OutlookPageName").Controls("ControlName")
'** BuildList(cboList)
'**********************************************************************************
Sub BuildList(objListe)
Dim rst 'Recordset
Dim dao 'Reference DAO
Dim wks 'Workspace
Dim dbs 'Database
Dim strAccessDir 'Chemin du fichier
Dim strDBName 'Nom de fichier
Dim EmployeeArray 'Enregistrement
Dim arrEmployee() 'Tableau des Employés
Dim indEmployee 'Indice du Tableau
Dim RecEmployee 'Enregistrement en traitement
Dim SortLoop 'Indice de boucle pour le tri par insertion
Dim intSeekPos 'Position de l'insertion
On Error Resume Next
'Définit le nom et emplacement de la base de donnée
strAccessDir = "R:\"
strDBName = strAccessDir & "phonelist.mdb"
'Set reference de la base Access. ADO36 doit être enregistré sinon le moteur doit être modifié en conséquence
Set dao = Application.CreateObject("DAO.DBEngine.36")
If Err > 0 Then
'on quitte le sub si la connexion a échouée
Exit Sub
End If
Set wks = dao.Workspaces(0)
Set dbs = wks.OpenDatabase(strDBName)
'Lien sur la table qui nous intéresse
Set rst = dbs.OpenRecordset("Employees")
'On parcours les enregistrements de la table
indEmployee = 0
With rst
.MoveFirst
While Not .EOF
EmployeeArray = rst.GetRows(1)
'On ajuste la dimension du tableau (très important dans le cas de ce script!)
ReDim Preserve arrEmployee(indEmployee)
'On construit la chaîne de caractère avec les enregistrements intéressants.
'Dans notre cas, [Nom de famille] [Prénom] ([Téléphone]) à l'aide des indices
RecEmployee = EmployeeArray(1,0) & " "
RecEmployee = RecEmployee & EmployeeArray(0,0) & " ("
RecEmployee = RecEmployee & Left(EmployeeArray(2,0),4) & ")"
'On insert l'enregistrement à la bonne place dans la liste
For SortLoop = 0 To indEmployee
If StrComp(RecEmployee, arrEmployee(SortLoop), vbTextCompare)<0 Then
intSeekPos = SortLoop
Exit For
End If
Next
For SortLoop=indEmployee To intSeekPos+1 step -1
arrEmployee(SortLoop)=arrEmployee(SortLoop-1)
Next
arrEmployee(intSeekPos)=RecEmployee
indEmployee = indEmployee + 1
Wend
.Close
End With
'On met à jour la ComboBox
objListe.List() = arrEmployee
End Sub
Conclusion
Pas de bug connus.
Donnez-moi votre feed-back, je programme souvent ces temps en VBScript et j'aimerais beaucoups connaître vos critiques, remarques, félicitations et encouragements ;-)
Dites aussi si vous avez des suggestions, ça m'intéresse toujours!
Historique
- 30 octobre 2006 15:00:04 :
- Correction d'un bug qui provoquait un saut d'enregistrement sur le moteur DAO36.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
liaison outlook et access [ par boris ]
Bonjour,je souhaite lier un formulaire Outlook97 avec une base de donnée Access ?Est-possible et comment ?Merci,Boris
Outlook et Access 2000 [ par taz ]
Comment exporter ou importer les informations du calendrier d'Outlook 2000 ans Access 2000
Consulter une base Access depuis Outlook via MAPI [ par David ]
Hola, je desire consulter une base access regroupant des infos (mail, nom, prenom.....). Cette base fait office d'un carnet d'adresses.Je voudrais pou
Lier deux liste sous access [ par Ph_D ]
Salut,J'ai un pb avec des listes modifiables. Dans une base existante, j'ai un formulaire avec un liste qui donne les "clients", j'ai un sous-formulai
sous visual basic 6.0 combobox < liens vers une table access [ par BOP ]
Bonjour a tous,je souhaite lier des enregistrements d'une table access à un combobox sur un formulaire VB et pas un formulaire access(VBA). J'ai deja
Listes dans access [ par BasicInstinct ]
LutJ'ai une liste qui est créée grace a :maliste.rowsource="select....."avec ma requete qui est créée dynamiquement par l'utilisateurcomment je peux e
import/export automatisé entre outlook et access [ par raphaelle37 ]
Bonjour à tous,J'ai a realiser une procedure qui automatise l'import / export des carnets d'adresses entre outlook2000 et access2000.On fait interveni
ACCESS ET OUTLOOK [ par pepe013 ]
pépéQuestion :J'ai des contacts dans une base access et j'aimerais les envoyer dans le carnet d'adresse d'outlook. comment faire ?
Synchroniser une table access avec les contact outlook. [ par jff27 ]
J'ai une table client (Nom, prenom, adresse etc...)Aprés une saisie de client, il faudrait qu'il apparaise dans les contact outlook.Peut on vraiment p
liaison entre outlook et access [ par snoop ]
je cherche à récuperer tous les mails entrant dans outlook et les stockés dans access , de préférence par code VBA.Mon majeur problème est de ne pas p
|
Derniers Blogs
[WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
LISTER KEYS.KEYLISTER KEYS.KEY par Onin42
Cliquez pour lire la suite par Onin42
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|