| auteur : Maxence HUBICHE | Dans l'évènement Avant Mise à jour de votre liste, collez ceci (en prenant soin de remplacer lstChamps par le nom de votre zone de liste) : On Error GoTo GestErr
Static lngItems () As Long
Dim lngLoop As Long
Dim varItems As Variant
lstChamps. Selected (0 ) = False
lstChamps. Selected (1 ) = False
If lstChamps. ItemsSelected . Count > 10 Then
Cancel = True
For lngLoop = 2 To lstChamps. ListCount - 1
lstChamps. Selected (lngLoop) = False
Next
For lngLoop = 0 To UBound (lngItems)
lstChamps. Selected (lngItems (lngLoop)) = True
Next
Else
ReDim lngItems (lstChamps. ItemsSelected . Count - 1 )
For lngLoop = 0 To lstChamps. ItemsSelected . Count - 1
lngItems (lngLoop) = lstChamps. ItemsSelected (lngLoop)
Next
Cancel = False
End If
FinProg :
Exit Sub
GestErr :
If Err . Number = 91 Then
For lngLoop = 0 To lstChamps. ListCount
lstChamps. Selected (lngLoop) = False
Next
End If
Resume FinProg
|
|
| auteur : FRED.G |
Pour ajouter "[Tous]" (ou tout autre texte) en premier choix d'une zone de liste
(déroulante ou pas), il est possible d'utiliser une requête UNION dans la propriété
Contenu (RowSource) du contrôle.
Imaginons que l'on veuille afficher et trier toutes les valeurs du champ Champ1
de la table Table1, mais faire précéder ces valeurs par la mention "[Tous]",
le SQL notre requête pourrait être :
SELECT A.Champ1
FROM (SELECT B.Champ1, 1 AS IndexTri FROM Table1 AS B
Union
SELECT TOP 1 " [Tous] " , 0 FROM Table1 AS C) AS A
ORDER BY A.IndexTri, A.Champ1
|
Remarque : pour optimiser les performances on peut, le cas échéant, créer une table permanente (appelons la TableListe) avec les deux champs suivants :
- EnTête (Type : String; Null Interdit : Oui; Chaine vide autorisée : Non; Index : Sans doublon),
- IndexTri (Type : Byte; Null Interdit : Oui; Valeur par défaut : 0; Valide Si : =0)
On utilise cette table en créant un enregistrement pour chaque valeur d'entête que l'on veut rendre disponible dans sa base, par exemple :
[Tous]
[Toutes]
[Aucun]
...
|
Ensuite, le SQL de notre requête Union servant pour la source de nos listes ressemblera à :
|
SELECT A.Champ1
FROM (SELECT B.Champ1, 1 AS Position FROM Table1 AS B
Union
SELECT TableListe.Entête, TableListe.IndexTri FROM TableListe WHERE TableListe.Entête= " [Tous] " ) AS A
ORDER BY A.IndexTri, A.Champ1
|
A noter aussi, concernant les performances, que d'une manière générale, pour les requêtes complexes
ou ciblant plusieurs dizaines ou centaines de milliers d'enregistrements, il est préférable
d'enregistrer sa requête plutôt que d'exécuter à la volée son équivalent SQL
(si les tables sources bénéficient d'indexes). Dans ce dernier cas, on n'écrira plus l'instruction
SQL dans la propriété RowSource de la zone de liste, mais simplement le nom de la requête enregistrée.
|
| auteur : Starec | Le but d'une application est de durer dans le temps, sans avoir à retoucher le code à chaque changement d'année.
Souvent on choisit une année à l'aide d'une liste déroulante, ce que l'on fait c'est que dans la propriété contenu (RowSource) on saisi les années.
Ce que je vous propose, c'est que cela soit fait automatiquement.
Dans les deux cas que je vais vous proposer, il faut que la propriété Origine Source de la liste déroulante soit à Listes Valeurs.
Version Access 2002, 2003 :
Private Sub cboAnnee_GotFocus ()
Dim i As Integer
Me. cboAnnee . RowSource = " "
For i = 1 To 5
Me. cboAnnee . AddItem Year (DateAdd (" yyyy " , i - 2 , Date ))
Next i
End Sub
|
Version Access 97 et 2000 :
Je vous propose cette version, car la méthode Additem n'est apparue qu'à partir de 2002. Private Sub cboAnnee2_GotFocus ()
Dim i As Integer
Dim strSource As String
For i = 1 To 5
strSource = strSource & " ; " & Year (DateAdd (" yyyy " , i - 2 , Date ))
Next i
Me. cboAnnee2 . RowSource = Right (strSource, Len (strSource) - 1 )
End Sub
|
Ces exemples vont vous donner 5 années, de 2006 à 2010, l'année prochaine en 2008, vous aurez donc de 2007 à 2011.
|
Consultez les autres F.A.Q's
Les sources présentés sur cette pages sont libre de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2004
Developpez LLC. Tout droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérets.
Cette page est déposée à la SACD.
|