lise déroulante à partir d'un userforme

sosso03

XLDnaute Nouveau
Bonjour à tous,

Je débute en VBA, et bien sur, je rame...donc votre aide sera la bienvenue et je vous en remercie!

J'ai une petite base de données qui répertorie les subventions liés à l'énergie et l'environnement que ma société pourrait bénéficier lors d'un projet, je souhaite que les responsables de projets puissent faire une recherche selon différents critères à savoir: le type aide (nationale ou territoriale), le domaine (déchets, economies énergies,...) et enfin une recherche par mots clés.

J'ai donc créer un userform avec des listes déroulantes, mon probleme est de mettre le code VBA derriere le bouton "ok"

Merci!
 

Pièces jointes

  • base de données.v1.xls
    93 KB · Affichages: 284

jpb388

XLDnaute Accro
Re : lise déroulante à partir d'un userforme

Bonjour
Je pense que la solution la plus simple est de faire un filtre automatique(gain de temps car pas de macro) et si vous le souhaitez vous pouvez gérer le filtre avec votre formulaire car là la macro est simple exemple
activesheet.range("a3:c19").autofiltrer field:=3,criterial:=">130"
activesheet.range("a3:c19")=matrice de travail
.autofiltrer= creation du filtre
field:=3=colonne de recherche ici la 3 autrement dit la c
criterial:=">130"= le critère


bon courage
a+
jp
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : lise déroulante à partir d'un userforme

Bonsoir le fil, bonsoir le forum,

En pièce jointe ton fichier modifié. Le bouton RECHERCHER DES AIDES commence par annuler tous les filtres et afficher toutes les lignes séventuellement masquées. Puis il affiche l'UserForm. Le bouton OK applique le filtrage automatique en fonctions des différents critères puis ferme l'UserForm... Je sais pas si ça te conviendra...

les codes :
Module1 :
Code:
Public pl As Range 'déclare la variable pl (PLage)
Public cf As Range 'déclare la vriable cf (Cellule de Filtre)
Bouton RECHERCHER DES AIDES :
Code:
Private Sub RECHERCHE_Click() 'bouton "RECHERCHER DES AIDES"
Set pl = Sheets("liste").Range("A15").CurrentRegion 'définit la plage pl (déclarée publique dans le module1)
Set pl = pl.Offset(1, 0).Resize(pl.Rows.Count - 1) 'redéfinit la plage pl (sans la première ligne)
Set cf = Range("A15") 'définit la cellule de filtre (déclarée publique dans le module1)
ActiveCell.Select 'enlève le focus au bouton
pl.EntireRow.Hidden = False 'affiche toutes les lignes de la plage pl
If Me.FilterMode = True Then Me.ShowAllData 'si un critère du filtre automatique est utilisé affiche toutes les lignes
If Me.AutoFilterMode = True Then Range("A15").AutoFilter 'si le filtre automatique est utilisé supprime le filtre automatique
UserForm1.Show 'affiche l'UserForm1
End Sub
UserForm1 :
Code:
Private Sub OK_Click() 'bouton "OK"
Dim li As Range 'déclare la variable li (LIgne)
Dim r As Range 'déclare la variable r (Recherche)
 
Application.ScreenUpdating = False 'masques les changements à l'écran
 
'condition : si la ComboBox1 n'est pas vide
If Me.ComboBox1.Value <> "" Then
    'filtre automatique, critère ComboBox1
    cf.AutoFilter Field:=3, Criteria1:=Me.ComboBox1.Value
End If 'fin de la condition
 
'condition : si la ComboBox2 n'est pas vide
If Me.ComboBox2.Value <> "" Then
    'filtre automatique, critère ComboBox2
    cf.AutoFilter Field:=4, Criteria1:=Me.ComboBox2.Value
End If 'fin de la condition
 
'condition : si la ComboBox3 n'est pas vide
If Me.ComboBox3.Value <> "" Then
    'filtre automatique, critère ComboBox3
    cf.AutoFilter Field:=5, Criteria1:=Me.ComboBox3.Value
End If 'fin de la condition
 
If Me.TextBox1.Value <> "" Then 'condition : si la TextBox1 n'est pas vide
    'boucle sur toutes les lignes visibles de la plage pl
    For Each li In pl.SpecialCells(xlCellTypeVisible).Rows
        Set r = li.Find(Me.TextBox1.Value, , xlValues, xlPart) 'définit la recherche (recherche la valeur de la TextBox1 dans la ligne li)
        If r Is Nothing Then li.Hidden = True 'si aucune occurrence trouvé, masque la ligne
    Next li 'prochaine ligne de la boucle
End If 'fin de la condition
 
Application.ScreenUpdating = True 'affiche les changements à l'écran
Unload Me 'vide et ferme l'UserForm
End Sub
 
Private Sub CommandButton2_Click() 'bouton "Anuler"
Unload Me 'vide et ferme l'UserForm
End Sub
Le fichier :
 

Pièces jointes

  • Sosso_v01.xls
    105.5 KB · Affichages: 171

Statistiques des forums

Discussions
312 684
Messages
2 090 916
Membres
104 697
dernier inscrit
Pierrot Hubert