OVH Cloud OVH Cloud

[VBA Excel] Listbox

28 réponses
Avatar
Nyck0las
Bonjour,

Je suis en train de travailler sur une base de donn=E9es et je voudrais
r=E9aliser un userform qui me permettrait de s=E9lectionner l'=E9l=E9ment qu=
i
servira de r=E9f=E9rence dans la suite de mon =E9tude.

En gros pour choisir cette r=E9f=E9rence, il me faut croiser 3 colonnes
- nom
- ann=E9e
- domaine
Il peut y avoir des redondances (un m=EAme nom =E0 diverses ann=E9es et pour=

divers domaines)

En gros ce que je souhaiterais faire, ce sont 3 listbox qui
reprendrais ces 3 colonnes nom, domaine et ann=E9e, sans doublon,
class=E9e par ordra alphanum=E9riqueet quand je s=E9lectionne un =E9lement
d'une colonne cel=E0 enl=E8ve des choix dans les autres.
C=E0 correspond en fait aux filtres automatiques sur ces 3 colonnes,
mais je souhaite une m=E9thode d=E9tourn=E9e pour que l'utilisateur n'ait
pas acc=E8s =E0 la base de donn=E9es directement.

Est-ce que quelqu'un aurait une petite piste ?

8 réponses

1 2 3
Avatar
Nyck0las
Bonjour JB,

et oui c'est encore moi !! J'ai essayé ce que tu avais dit et voici ce
que j'ai marqué

Private Sub UserForm_Initialize()

'codage des noms des champs dynamiques
ActiveWorkbook.Names.Add Name:="An",
RefersTo:="=OFFSET(Cells(2,ColA),,,CountA((" & Columns(ColA).Address &
") - 1)"
ActiveWorkbook.Names.Add Name:="Collectivité",
RefersTo:="=OFFSET(Cells(2,ColC),,,CountA(" & Columns(ColC).Address &
") - 1)"
ActiveWorkbook.Names.Add Name:="Domaine",
RefersTo:="=OFFSET(Cells(2,ColD),,,CountA(" & Columns(ColD).Address &
") - 1)"

Ch_Nom
Ch_An
Ch_Domaine
On Error Resume Next
ActiveSheet.ShowAllData
End Sub

malheureusement, celà ne marche pas et j'ai l'erreur d'exécution 1004
Avatar
JB
Private Sub UserForm_Initialize()
ActiveWorkbook.Names.Add Name:="an", _
RefersTo:="=OFFSET($C$2,,,CountA(" & Columns(3).Address & ") - 1)"
ActiveWorkbook.Names.Add Name:="Collectivité", _
RefersTo:="=OFFSET($A$2,,,CountA(" & Columns(1).Address & ") - 1)"
ActiveWorkbook.Names.Add Name:="Domaine", _
RefersTo:="=OFFSET($B$2,,,CountA(" & Columns(2).Address & ") - 1)"

Ch_Nom
Ch_An
Ch_Domaine
On Error Resume Next
ActiveSheet.ShowAllData
End Sub

JB

On 7 fév, 10:54, Nyck0las wrote:
Bonjour JB,

et oui c'est encore moi !! J'ai essayé ce que tu avais dit et voici ce
que j'ai marqué

Private Sub UserForm_Initialize()

    'codage des noms des champs dynamiques
    ActiveWorkbook.Names.Add Name:="An",
RefersTo:="=OFFSET(Cells(2,ColA),,,CountA((" & Columns(ColA).Address &
") - 1)"
    ActiveWorkbook.Names.Add Name:="Collectivité",
RefersTo:="=OFFSET(Cells(2,ColC),,,CountA(" & Columns(ColC).Address &
") - 1)"
    ActiveWorkbook.Names.Add Name:="Domaine",
RefersTo:="=OFFSET(Cells(2,ColD),,,CountA(" & Columns(ColD).Address &
") - 1)"

    Ch_Nom
    Ch_An
    Ch_Domaine
    On Error Resume Next
    ActiveSheet.ShowAllData
End Sub

malheureusement, celà ne marche pas et j'ai l'erreur d'exécution 1004


Avatar
Nyck0las
non, tu n'as pas compris ce que je voulais faire, je ne suis mal
exprimé.
en fait je veux supprimer les références aux noms de colonnes du type
A, B et C car ma base de données est susceptible de modification et
les colonnes pourront changer de place.
J'ai créé une procédure qui détecte mes colonnes et rentre leur num éro
dans variables ColA, ColC et ColD.
Ce sont ces variables que je souhaiterais utiliser ici.
Avatar
Nyck0las
une petite idée ??
Avatar
JB
Bonjour,

Private Sub UserForm_Initialize()
ColC = 3
ActiveWorkbook.Names.Add Name:="an", _
RefersTo:="=OFFSET(" & Split(Columns(ColC).Address, ":")(0) & "$2"
& ",,,CountA(" & Columns(ColC).Address & ") - 1)"
ColA = 1
ActiveWorkbook.Names.Add Name:="Collectivité", _
RefersTo:="=OFFSET(" & Split(Columns(ColA).Address, ":")(0) & "$2"
& ",,,CountA(" & Columns(ColA).Address & ") - 1)"
ColB = 2
ActiveWorkbook.Names.Add Name:="Domaine", _
RefersTo:="=OFFSET(" & Split(Columns(ColB).Address, ":")(0) & "$2"
& ",,,CountA(" & Columns(ColB).Address & ") - 1)"
Ch_Nom
Ch_An
Ch_Domaine
On Error Resume Next
ActiveSheet.ShowAllData
End Sub

http://cjoint.com/?cjiiC0Hyi5

JB

On 8 fév, 14:48, Nyck0las wrote:
une petite idée ??


Avatar
Nyck0las
bonjour JB,

super, merci beaucoup

par contre çà ne marche pas, il doit encore y avoir un problème (voire
plusieurs)

Dans tes fichiers, quand je fais la sélection des 3 critères
(collectivité, an, domaine) je vois la sélection en direct dans les
colonnes. Dans mon fichier ce n'est pas le cas.
De plus quand on clique sur OK, je lui demande de rafficher la
totalité des données : çà coince ...

J'ai aussi fait 2 petites modifs dans les procédures filtre et
ligneref :

Sub filtre()
On Error Resume Next
ActiveSheet.ShowAllData
[A1].AutoFilter Field:=1, Criteria1:=Me.Collectivité
If Me.An <> "*" Then [A1].AutoFilter Field:=3, Criteria1:=Me.An
[A1].AutoFilter Field:=2, Criteria1:=Me.Domaine
End Sub

et

Sub LigneRef()
Dim ligne As Integer
If Range("A:A").SpecialCells(xlCellTypeVisible).Areas(1).Count > 1
Then
ligne = 2 'pas de filtre
Else 'il y a un filtre
ligne =
Range("A:A").SpecialCells(xlCellTypeVisible).Areas(2).Item(1).Row
End If
LgR = ligne
End Sub

Dans ces procédures, j'ai modifié les codes [A1] et range("A:A") par
cells(1, ColC) et columns(ColC). çà te semble juste ??

Je mets un version modifiée de mon fichier, si tu pouvais jetter un
oeil ...
Il faut lancer la macro Prog et choisir le mode Bilan Annuel

http://cjoint.com/?clkFBYNsxE

merci :-)
Avatar
Nyck0las
juste un petit coup d'oeil vite fait ??
Avatar
Nyck0las
bon bein je crois que je vais essayer de me débrouiller tout seul ...
1 2 3