begin process at 2012 02 17 08:41:07
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VBScript

 > UNE COMBOBOX REMPLIE PAR ACCESS EN VBSCRIPT POUR VOS FORMULAIRES

UNE COMBOBOX REMPLIE PAR ACCESS EN VBSCRIPT POUR VOS FORMULAIRES


 Information sur la source

Note :
Aucune note
Catégorie :VBScript Classé sous :listes, access, triée, combobox, outlook Niveau :Initié Date de création :20/10/2006 Date de mise à jour :30/10/2006 15:00:04 Vu :10 344

Auteur : dthuler

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 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

Source avec Zip L'HEURE EN TEMPS RÉEL DANS UNE FEUILLE EXCEL
Source avec Zip Source avec une capture FRACTALE: FLOCON DE KOCH (RÉCURSIVITÉ)

 Sources de la même categorie

Source avec Zip Source avec une capture RECHERCHE & SAUVEGARDE DES FICHIERS PAR LEURS EXTENSIONS par hackoo
Source avec Zip Source avec une capture [VBS] SPLASH SCREEN EN VBSCRIPT par hackoo
Source avec Zip Source avec une capture [VBS] GOOGLE EASTER EGGS par hackoo
Source avec Zip Source avec une capture FILE2COMPARE: COMPARAISON DE DEUX FICHIERS LIGNE PAR LIGNE par hackoo
Source avec Zip Source avec une capture [VBS] COMMENT CRÉER UN DOSSIER ET LE PROTÉGER PAR MOT DE PAS... par hackoo

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture OUTLOOK ATTACHEMENT SAVER par MoiLafouine
GÉNÉRATEUR DE MAIL OUTLOOK AVEC MISE EN FORME VIA UNE SYNTAX... par 8Tnerolf8
Source avec Zip PARAMETRES SETTINGS VBA par Le Pivert
Source avec Zip Source avec une capture Source .NET (Dotnet) EPHEMERIDE_VB.NET par Le Pivert
SAUVEGARDER DES MAILS ET COCHER UNE TABLE ACCES par yannlevrai

Commentaires et avis

Commentaire de mitsh666 le 22/03/2007 13:26:58

ça à l'air sympa ce que tu fais, mais c'est du VB? pas du VBS?
Cela dis, je suis débutant VBScript et ne connaît pas Access. Je ne peux donc pas donner de feed-back à ton boulot... désolé.
Pour te dire que je suis débutant en VBScript, je n'arrive pas à écrire quelque chose dans une combobox avec du VBScript. C'est l'horreur...

Commentaire de dthuler le 22/03/2007 16:17:51

Salut,

Merci pour le commentaire :-) Tu as raison, c'est du VBS, comme expliqué dans la description, posté dans VB car pas de catégorie VBS séparée (au moment du post du moins...)

L'intérêt de ce code est de montrer comment résoudre ton problème car c'est un casse-tête de premier ordre la méthode AddItem n'existant pas;

Effectivement, il faut partir du principe qu'une combolist est un tableau d'élément. Le moyen de faire est donc de créer un tableau d'élément Dim Tableau() puis une fois complété (ligne 53 et 55), l'assigner à la propriété list() (ligne 81).

Si jamais tu as une question y relatif, n'hésite pas...

David

Commentaire de razette le 12/09/2007 18:05:21

C'est justement le code que je cherche !! On peut l'adapter pour excel ? (je suis novice en prog sous vb)
Merci

 Ajouter un commentaire


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


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,819 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales