- 1 – Considérons la liste (A1 :E20), je souhaite (par exemple) masquer toute les lignes qui contiennent le mot France, quelque soit la colonne dans laquelle il se trouve.
Option Explicit
Option Base 1
Option Base 1
Sub recherche2()
Dim i As Integer
Dim j As Integer
Dim lignefin As Integer
Dim recherche As String
Dim contenu As String
Dim tab_compare(5)
Dim compare As Long
recherche = InputBox("Veuillez entrer la valeur cherchée ?", "Welcome", "")
'La valeur saisie est transmise à la variable recherche
With ThisWorkbook.Sheets(1)
'détermination du nombre de lignes dans la base
'le nombre de colonnes est en général connu
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
lignefin = Selection.Rows.Count
'pour chaque cellule de la base
For i = 2 To lignefin + 1
For j = 1 To 5
'on parcourt, on stocke le contenu de la cellule et on compare avec la valeur saisie
Cells(i, j).Select
contenu = Cells(i, j).Value
'la fonction InStr(chaîne1, chaîne2) permet de vérifier la présence de chaîne2 dans chaîne1
'et retourne l'occurrence de la première position de la comparaison donc 0 si chaîne2 est ‘pas présente dans chaîne1
compare = InStr(1, contenu, recherche)
'pour chaque comparaison on stocke le résultat dans un tableau
If compare = 0 Then
tab_compare(j) = "Y"
Else
tab_compare(j) = "N"
End If
'il faut cinq résultats positifs pour décider de masquer la ligne
If tab_compare(1) = "Y" And tab_compare(2) = "Y" And tab_compare(3) = "Y" _
And tab_compare(4) = "Y" And tab_compare(5) = "Y" Then
Rows(i).Select
Selection.EntireRow.Hidden = True
End If
Next j
Next i
End With
End Sub
‘************************************************************Dim i As Integer
Dim j As Integer
Dim lignefin As Integer
Dim recherche As String
Dim contenu As String
Dim tab_compare(5)
Dim compare As Long
recherche = InputBox("Veuillez entrer la valeur cherchée ?", "Welcome", "")
'La valeur saisie est transmise à la variable recherche
With ThisWorkbook.Sheets(1)
'détermination du nombre de lignes dans la base
'le nombre de colonnes est en général connu
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
lignefin = Selection.Rows.Count
'pour chaque cellule de la base
For i = 2 To lignefin + 1
For j = 1 To 5
'on parcourt, on stocke le contenu de la cellule et on compare avec la valeur saisie
Cells(i, j).Select
contenu = Cells(i, j).Value
'la fonction InStr(chaîne1, chaîne2) permet de vérifier la présence de chaîne2 dans chaîne1
'et retourne l'occurrence de la première position de la comparaison donc 0 si chaîne2 est ‘pas présente dans chaîne1
compare = InStr(1, contenu, recherche)
'pour chaque comparaison on stocke le résultat dans un tableau
If compare = 0 Then
tab_compare(j) = "Y"
Else
tab_compare(j) = "N"
End If
'il faut cinq résultats positifs pour décider de masquer la ligne
If tab_compare(1) = "Y" And tab_compare(2) = "Y" And tab_compare(3) = "Y" _
And tab_compare(4) = "Y" And tab_compare(5) = "Y" Then
Rows(i).Select
Selection.EntireRow.Hidden = True
End If
Next j
Next i
End With
End Sub
Sub Remettre()
'prévoir une macro pour réafficher les lignes
Rows("1:21").Select
Selection.EntireRow.Hidden = False
End Sub
- 3 – Voici le résultat après exécution de la procédure recherche2 () que j’ai attaché au bouton Recherche, la procédure Remettre() que j’ai attacher au bouton Réafficher permet de faire réapparaitre les lignes masquées.
4 commentaires:
Bonjour,
je voudrais utiliser exactement ce type de macro pour trier un tableau mais même en recopiant mot à mot votre macro, ça ne marche pas ou au mieux pour la première ligne, y-a-t-il une manip supplémentaire à faire en amont de l'application de la formule ? Merci d'avance.
Bonjour
J'ai du mal à saisir la question.
Cette macro est totalement inadaptée à des problèmes de tri...
Que souhaiteriez vous faire exactement ?
Cordialement
Olivier
Oups désolé, je ne suis pas familiarisé avec les forums et je pensais que je recevrais une alerte à la réponse de mon commentaire.
Bref, en fait je souhaite trier un tableau excel d'une centaine de lignes environ et de 40 colonnes environ si une valeur saisie dans une cellule identifiée (B36 par exemple) apparait dans une des colonnes 35 à 40. Dans ce cas, seules les lignes contenant la valeur (qui serait du texte) serait afficher et les autres lignes masquer.
En gros la fonction FILTRE de Excel mais sur 5 colonnes.
J'avoue avoir entre temps trouvé un livre sur VBA mais je tatonne encore.
Merci d'avance
Cordialement
Bonjour,
voici un code que j'ai pu avoir sur un forum qui permet de masquer des lignes vide, et je veux le modifier ou de rajouter aussi le cas ou mes cellules ( de A à F) contient 0
Sub Masquer_vides()
Application.ScreenUpdating = False
Dim dlg As Integer, i As Integer
dlg = Range("A" & Rows.Count).End(xlUp).Row
For i = 3 To dlg
If WorksheetFunction.Count(Range("B" & i & ":K" & i)) = 0 And Range("B" & i).Value <> "Article 1" Then Rows(i).EntireRow.Hidden = True
Next
End Sub
merci
Enregistrer un commentaire