XL 2016 Recherche instantanée multicritère.

Sacha1980

XLDnaute Nouveau
Bonjour tout le monde,

J'aimerais rendre le moteur de recherche instantanée en multicritère, mais je ne sais pas comment faire, je suis débutant dans le VBA.

Pour l'instant, la recherche se concentre sur la colonne D, mais j'aimerais aussi que la recherche puisse faire en même temps sur les colonnes D, F et H.

Exemple : Si je cherche Moulin qui est un critère de la colonne H et bien qu'il me le trouve.

Est-ce possible ? Et comment faire cela ?

Je vous le fichier-test pour que vous puissiez y jeter un oeil et éventuellement inclure la bonne manière pour rendre cela possible.

Merci pour votre aide.

Sacha.
 

Pièces jointes

  • Classeurtest2.xlsm
    362.5 KB · Affichages: 29

Sacha1980

XLDnaute Nouveau
Oui, un cas auquel je n'avais pas pensé.
Remplace par :
VB:
If Not pl Is Nothing Then pl.EntireRow.Hidden = True

Par contre je me demande si je n'ai pas poussé trop loin.
Pour gagner du temps, je ne reteste pas les lignes déjà masquées.
Si tu supprimes un caractère je ne ré-affiche pas les concernées. Fausse bonne idée...
Je retourne à plus plus traditionnel je pense ?

Si oui :
VB:
Private Sub TextBox1_Change()
    Dim datas, pl As Range, lig As Long, lig1 As Long, mot As String
    Application.ScreenUpdating = False
  
    Range("Tableau14").EntireRow.Hidden = False
    If Sheets("Collection").TextBox1.Value <> "" Then
        datas = Range("Tableau14").Value
        lig1 = Range("Tableau14").Row
        mot = TextBox1.Value & "*"
        For lig = 1 To UBound(datas)
            If Not (datas(lig, 1) Like mot Or datas(lig, 3) Like mot Or datas(lig, 5) Like mot) Then
                If pl Is Nothing Then Set pl = Rows(lig + lig1 - 1) Else Set pl = Union(pl, Rows(lig + lig1 - 1))
            End If
            If Not pl Is Nothing Then
                If pl.Areas.Count > 10 Then pl.EntireRow.Hidden = True: Set pl = Nothing
            End If
        Next lig
        If Not pl Is Nothing Then pl.EntireRow.Hidden = True
        Set pl = Nothing
    End If
    Application.ScreenUpdating = True
End Sub

Super, là c'est parfait.

Un souci encore avec le code, c'est que quand je mets la protection de ma feuille pour empêcher toute modification, j'ai une erreur et sur deux lignes, mais c'est le même code, mais pour deux codes différents

La première dans ton code à la ligne indiquée qui est surligné en jaune :

VB:
Range("Tableau1").EntireRow.Hidden = False

Et cela dès que je rentre dans le champ de recherche.

Et j'ai la même chose avec le code auquel tu as ajouté une ligne qui est le même code ci-dessus.

La partie pour supprimer le texte au clic sur le champ

Code:
Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    'On supprime le text du champs au clic sur le champs
    With TextBox1
        .Text = ""
        .SelStart = 0
        .SelLength = Len(.Text)
    End With
    Range("Tableau1").EntireRow.Hidden = False
End Sub

Cela indique comme erreur pour cette partie du code de chaque code :

Erreur d'exécution '1004'
Impossible de définir la propriété Hidden de la class Range.

Il y a moyen de contourner cela pour que je puisse mettre la protection de la feuille ?

Merci.
 
Dernière édition:

eriiic

XLDnaute Barbatruc
protège par macro juste pour les utilisateurs avec UserInterfaceOnly:=True.
Dans ThisWorkbook :
VB:
Private Sub Workbook_Open()
    Worksheets("Collection").Protect Contents:=True, UserInterfaceOnly:=True
End Sub
tu peux supprimer la ligne ajoutée du second sub, elle n'a plus lieu d'être
eric
 

Sacha1980

XLDnaute Nouveau
protège par macro juste pour les utilisateurs avec UserInterfaceOnly:=True.
Dans ThisWorkbook :
VB:
Private Sub Workbook_Open()
    Worksheets("Collection").Protect Contents:=True, UserInterfaceOnly:=True
End Sub
tu peux supprimer la ligne ajoutée du second sub, elle n'a plus lieu d'être
eric
Merci, là cela protège, par contre facile à déverrouiller lol, on peut mettre un mot de passe ? et est-ce possible de mettre deux feuilles ou trois avec le même mot de passe ?
 

Sacha1980

XLDnaute Nouveau
Re Eriiiic,

Du coup en fouinant, j'ai trouvé une très bonne solution et qui résout le souci, j'ai même associé à un raccourci clavier ainsi pas besoin de bouton.

Un grand merci en tout cas pour ton aide ou plutôt pour ton boulot.

Macro de protection des feuilles de JM27

Bête question, je sais que malheureusement avec Google Sheet on ne sait pas lire un fichier xlsm en ligne car il ne prend pas les macros en lignes et bien d'autres choses encore comme les mises en forme de tableau etc... c'est bien dommage d'ailleurs car cela aurait facilité le partage en mode lecture en ligne pour les joueurs !

Du coup, je mets le fichier en téléchargement depuis le Drive de Google et Méga, mais beaucoup de joueurs ont le souci avec leur antivirus qui pense que mon fichier est une menace et bloque le fichier et bien entendu c'est toute une procédure pour autoriser le fichier selon l'antivirus !

Y a-t-il une solution pour tromper l'antivirus et qu'il accepte de laisser passer un fichier avec du VBA ?
 

eriiic

XLDnaute Barbatruc
Bonjour,

en regardant l'aide de la fonction, tu vois tous les paramètres dont :
VB:
.Protect Contents:=True, Password:="Toto", UserInterfaceOnly:=True
Pas vraiment besoin d'ajouter des userforms.
Mais une protection excel, est illusoire et se fait sauter très facilement. Elle ne peut servir qu'à empêcher les erreurs de manip.

Pour l'antivirus, guère d'autre possibilité que d'en changer pour un qui donne moins de faux positifs.
eric
 

Sacha1980

XLDnaute Nouveau
Bonjour,

en regardant l'aide de la fonction, tu vois tous les paramètres dont :
VB:
.Protect Contents:=True, Password:="Toto", UserInterfaceOnly:=True
Pas vraiment besoin d'ajouter des userforms.
Mais une protection excel, est illusoire et se fait sauter très facilement. Elle ne peut servir qu'à empêcher les erreurs de manip.

Pour l'antivirus, guère d'autre possibilité que d'en changer pour un qui donne moins de faux positifs.
eric

Hello,

Effectivement, une simple protection est facile à supprimer pour une personne qui fouine un peu sur le net il y a suffisamment de tuto pour cela, je les déjà fait moi-même d'ailleurs j'avoue lol. Il en de même avec une protection du projet VBA.

C'est dommage que l'on ne puisse pas vraiment empêcher cela !

Bah pour les antivirus, il se réfère à leur logiciel, en général le fichier se place en quarantaine, il suffit juste de l'autoriser, mais bon il y en a que ça fait peur et tu as bon à leur expliquer que le fichier ne comporte pas de mauvaises surprises, c'est comme parler avec un mur Mdr.
 

Deionfire

XLDnaute Nouveau
Bonjour,

Je suis un débutant dans le VBA et dans le monde de la comptabilité.
J'ai pu faire une macro pour automatiser la saisie d'écriture comptable. Cependant, parfois je cherche des valeurs dans la feuille n°2 qui peut faire jusqu'à des dizaines de milliers de lignes. J'aimerai alors pouvoir automatiser cette recherche avec des recherches instantanées.

Je me tourne donc vers vous afin de trouver une solution à mon problème. Je vous joins donc mon fichier pour que vous puissiez jeter un rapide coup d'oeil.

Merci par avance,
 

Discussions similaires

Statistiques des forums

Discussions
312 078
Messages
2 085 120
Membres
102 783
dernier inscrit
Basoje